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 e938af7..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="10619"
-    android:versionName="1.6.19">
+          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 3af9b34..36fc64a 100644
--- a/res/layout/contact_editor_activity.xml
+++ b/res/layout/contact_editor_activity.xml
@@ -30,7 +30,7 @@
         android:background="?android:attr/colorPrimary"
         android:elevation="4dp"
         app:navigationContentDescription="@string/cancel_button_content_description"
-        app:navigationIcon="@drawable/ic_close_dk"
+        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_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-sw600dp/strings.xml b/res/values-af-sw600dp/strings.xml
deleted file mode 100644
index 0c1f4df..0000000
--- a/res/values-af-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Toestel"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Daar is geen kontakte wat uitgevoer kan word nie. As jy wel kontakte op jou tablet het, kan sommige dataverskaffers dalk nie toelaat dat die kontakte uitgevoer word vanaf die tablet nie."</string>
-</resources>
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-sw600dp/strings.xml b/res/values-am-sw600dp/strings.xml
deleted file mode 100644
index ae56708..0000000
--- a/res/values-am-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"መሣሪያ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ወደ ውጭ ሊላኩ የሚችሉ እውቂያዎች የሉም። በጡባዊዎ ላይ እውቂያዎች ካሉዎት የተወሰኑ የውሂብ አቅራቢዎች እውቂያዎቹ ከጡባዊው ወደ ውጭ እንዲላኩ ላይፈቅዱ ይችላሉ።"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ar-sw600dp/strings.xml
deleted file mode 100644
index f23b881..0000000
--- a/res/values-ar-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"الجهاز"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ليست هناك أية جهات اتصال قابلة للتصدير. إذا كانت لديك جهات اتصال على الجهاز اللوحي، فإن بعض موفري البيانات لا يسمحون بتصدير جهات الاتصال من الجهاز اللوحي."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-az-rAZ-sw600dp/strings.xml
deleted file mode 100644
index acbee5d..0000000
--- a/res/values-az-rAZ-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Cihaz"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Eksport edilə bilən kontakt yoxdur. Əgər planşetinizdə kontaktlarınız varsa, bəzi data provayderləri kontaktların telefondan eksport olunmasına icazə verməyə bilər."</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-b+sr+Latn-sw600dp/strings.xml b/res/values-b+sr+Latn-sw600dp/strings.xml
deleted file mode 100644
index f6727a7..0000000
--- a/res/values-b+sr+Latn-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Uređaj"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nema kontakata za izvoz. Ako imate kontakte na tabletu, neki dobavljači podataka možda neće dozvoliti izvoz kontakata sa tableta."</string>
-</resources>
diff --git a/res/values-be-rBY-sw600dp/strings.xml b/res/values-be-rBY-sw600dp/strings.xml
deleted file mode 100644
index 8e0b10f..0000000
--- a/res/values-be-rBY-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Прылада"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Няма кантактаў, якія можна экспартаваць. Калі ў вас ёсць кантакты на планшэце, некаторыя пастаўшчыкі даных могуць не дазваляць экспарт кантактаў з планшэта."</string>
-</resources>
diff --git a/res/values-bg-sw600dp/strings.xml b/res/values-bg-sw600dp/strings.xml
deleted file mode 100644
index 3be14a5..0000000
--- a/res/values-bg-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Устройство"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Няма контакти, позволяващи експортиране. Ако в таблета си имате контакти, е възможно някои доставчици на данни да не позволяват експортирането им извън него."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-bn-rBD-sw600dp/strings.xml
deleted file mode 100644
index efa5628..0000000
--- a/res/values-bn-rBD-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ডিভাইস"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"এখানে রপ্তানিযোগ্য কোনো পরিচিতি নেই৷ আপনার ট্যাবলেটে পরিচিতি থাকলে, কিছু ডেটা সরবরাহকারী আপনার ট্যাবলেট থেকে সেই পরিচিতিগুলিকে রপ্তানি করা মঞ্জুর নাও করতে পারে৷"</string>
-</resources>
diff --git a/res/values-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-bs-rBA-sw600dp/strings.xml b/res/values-bs-rBA-sw600dp/strings.xml
deleted file mode 100644
index 6b0ac29..0000000
--- a/res/values-bs-rBA-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Uređaj"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nema kontakata koji se mogu izvoziti. Ako imate kontakte na tabletu, neki dobavljači podataka možda ne dozvoljavaju izvoz kontakata s tableta."</string>
-</resources>
diff --git a/res/values-ca-sw600dp/strings.xml b/res/values-ca-sw600dp/strings.xml
deleted file mode 100644
index 854e712..0000000
--- a/res/values-ca-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositiu"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"No hi ha cap contacte que es pugui exportar. Si en tens algun a la tauleta, és possible que hi hagi proveïdors de dades que no permetin que els contactes s\'exportin des d\'aquest dispositiu."</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-sw600dp/strings.xml b/res/values-cs-sw600dp/strings.xml
deleted file mode 100644
index 4fb49de..0000000
--- a/res/values-cs-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Zařízení"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Není možné exportovat žádné kontakty. Pokud v tabletu opravdu máte uložené kontakty, je možné, že některý poskytovatel datových služeb zakázal jejich export mimo tablet."</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-sw600dp/strings.xml b/res/values-da-sw600dp/strings.xml
deleted file mode 100644
index ba0b482..0000000
--- a/res/values-da-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Enhed"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Der er ingen kontaktpersoner, der kan eksporteres. Hvis du har kontaktpersoner på din tablet, tillader nogle dataudbydere muligvis ikke, at kontaktpersonerne eksporteres fra din tablet."</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-sw600dp/strings.xml b/res/values-de-sw600dp/strings.xml
deleted file mode 100644
index 00ad909..0000000
--- a/res/values-de-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Gerät"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Es sind keine exportierbaren Kontakte vorhanden. Falls sich Kontakte auf deinem Tablet befinden, ist das Exportieren der Kontakte eventuell durch den Datenanbieter gesperrt."</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-sw600dp/strings.xml b/res/values-el-sw600dp/strings.xml
deleted file mode 100644
index 2116429..0000000
--- a/res/values-el-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Συσκευή"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Δεν υπάρχουν επαφές προς εξαγωγή. Αν υπάρχουν επαφές στο tablet, ορισμένοι πάροχοι δεδομένων ενδέχεται να μην επιτρέπουν την εξαγωγή επαφών από το tablet."</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-sw600dp/strings.xml b/res/values-en-rAU-sw600dp/strings.xml
deleted file mode 100644
index c6fbdb7..0000000
--- a/res/values-en-rAU-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Device"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"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-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-sw600dp/strings.xml b/res/values-en-rGB-sw600dp/strings.xml
deleted file mode 100644
index c6fbdb7..0000000
--- a/res/values-en-rGB-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Device"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"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-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-sw600dp/strings.xml b/res/values-en-rIN-sw600dp/strings.xml
deleted file mode 100644
index c6fbdb7..0000000
--- a/res/values-en-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Device"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"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-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-sw600dp/strings.xml b/res/values-es-rUS-sw600dp/strings.xml
deleted file mode 100644
index 02d6728..0000000
--- a/res/values-es-rUS-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"No hay contactos exportables. Si tienes contactos en la tablet, es posible que algunos proveedores de datos no permitan la exportación de contactos desde ella."</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-sw600dp/strings.xml b/res/values-es-sw600dp/strings.xml
deleted file mode 100644
index 09a5a4f..0000000
--- a/res/values-es-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"No hay contactos que exportar. Si tienes contactos en el tablet, es posible que el proveedor de datos no permita que se exporten los contactos del tablet."</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-sw600dp/strings.xml b/res/values-et-rEE-sw600dp/strings.xml
deleted file mode 100644
index cf4d9fb..0000000
--- a/res/values-et-rEE-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Seade"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Eksporditavaid kontakte pole. Kui teil siiski on tahvelarvutis kontakte, ei pruugi mõned andmesidepakkujad kontaktide eksportimist tahvelarvutist lubada."</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-sw600dp/strings.xml b/res/values-eu-rES-sw600dp/strings.xml
deleted file mode 100644
index 695fc37..0000000
--- a/res/values-eu-rES-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Gailua"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Ez dago esporta daitekeen kontakturik. Tabletan kontaktuak badituzu, baliteke datu-hornitzaile batzuek kontaktuak tabletatik esportatzen ez uztea."</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-sw600dp/strings.xml b/res/values-fa-sw600dp/strings.xml
deleted file mode 100644
index f84cb60..0000000
--- a/res/values-fa-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"دستگاه"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"مخاطب قابل صادر کردن وجود ندارد. اگر روی رایانه لوحی خود مخاطبینی دارید، بعضی از ارائه‌دهندگان داده ممکن است اجازه ندهند مخاطبین از رایانه لوحی صادر شوند."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-fi-sw600dp/strings.xml
deleted file mode 100644
index cad0f94..0000000
--- a/res/values-fi-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Laite"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Ei vietäviä yhteystietoja. Jos tabletillasi on yhteystietoja, tietojen tarjoaja on saattanut estää niiden viemisen tabletilta."</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-sw600dp/strings.xml b/res/values-fr-rCA-sw600dp/strings.xml
deleted file mode 100644
index 3790691..0000000
--- a/res/values-fr-rCA-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Appareil"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Aucun contact ne peut être exporté. Si des contacts sont enregistrés sur votre tablette, il est possible qu\'un fournisseur de données n\'autorise pas l\'exportation de contacts vers un autre appareil."</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-sw600dp/strings.xml b/res/values-fr-sw600dp/strings.xml
deleted file mode 100644
index 3790691..0000000
--- a/res/values-fr-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Appareil"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Aucun contact ne peut être exporté. Si des contacts sont enregistrés sur votre tablette, il est possible qu\'un fournisseur de données n\'autorise pas l\'exportation de contacts vers un autre appareil."</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-sw600dp/strings.xml b/res/values-gl-rES-sw600dp/strings.xml
deleted file mode 100644
index 73fbb7e..0000000
--- a/res/values-gl-rES-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Non hai ningún contacto exportable. Se tes contactos na túa tableta, é posible que algúns provedores de datos non permitan a exportación dos contactos desde a tableta."</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-sw600dp/strings.xml b/res/values-gu-rIN-sw600dp/strings.xml
deleted file mode 100644
index 448c44c..0000000
--- a/res/values-gu-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ઉપકરણ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"કોઈ નિકાસયોગ્ય સંપર્કો નથી. જો તમારી પાસે તમારા ટેબ્લેટ પર કોઈ સંપર્કો નથી, તો કેટલાક ડેટા પ્રદાતા ટેબ્લેટ પરથી સંપર્કોને નિકાસ કરવાની મંજૂરી આપી શકશે નહીં."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-hi-sw600dp/strings.xml
deleted file mode 100644
index 599cd3c..0000000
--- a/res/values-hi-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"डिवाइस"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"कोई भी निर्यात-योग्‍य संपर्क नहीं है. यदि आपके पास अपने टैबलेट पर संपर्क हों, तो हो सकता है कि कुछ डेटा प्रदाता संपर्कों को टैबलेट से निर्यात ना करने दें."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-hr-sw600dp/strings.xml
deleted file mode 100644
index 779b6e9..0000000
--- a/res/values-hr-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Uređaj"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nema kontakata koji se mogu izvoziti. Ako na svojem tabletu imate kontakte, neki davatelji podataka možda ne dopuštaju izvoz kontakata s tog tableta."</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-sw600dp/strings.xml b/res/values-hu-sw600dp/strings.xml
deleted file mode 100644
index eaba233..0000000
--- a/res/values-hu-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Eszköz"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nincsenek exportálható névjegyek. Ha vannak névjegyek a táblagépén, akkor elképzelhető, hogy az adatszolgáltatója nem teszi lehetővé a névjegyek exportálását a táblagépről."</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-sw600dp/strings.xml b/res/values-hy-rAM-sw600dp/strings.xml
deleted file mode 100644
index 2db07e2..0000000
--- a/res/values-hy-rAM-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Սարք"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Արտահանելու կոնտակտներ չկան: Հնարավոր է՝ որոշ տվյալների մատակարարներ չեն թույլատրում պլանշետից կոնտակտների արտահանումը:"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-in-sw600dp/strings.xml
deleted file mode 100644
index b677e88..0000000
--- a/res/values-in-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Perangkat"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Tidak ada data kontak yang dapat diekspor. Jika Anda menyimpan data kontak di tablet, beberapa penyedia data mungkin tidak mengizinkan data kontak untuk diekspor dari tablet."</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-sw600dp/strings.xml b/res/values-is-rIS-sw600dp/strings.xml
deleted file mode 100644
index f8c9eff..0000000
--- a/res/values-is-rIS-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Tæki"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Engir tengiliðir til útflutnings. Ef þú ert með tengiliði í spjaldtölvunni getur verið að vissar gagnaveitur leyfi ekki útflutning tengiliða úr spjaldtölvunni."</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-sw600dp/strings.xml b/res/values-it-sw600dp/strings.xml
deleted file mode 100644
index e2974b3..0000000
--- a/res/values-it-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Non sono presenti contatti esportabili. Se hai contatti sul tablet, è possibile che alcuni fornitori di dati non consentano l\'esportazione dei contatti dal tablet."</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-sw600dp/strings.xml b/res/values-iw-sw600dp/strings.xml
deleted file mode 100644
index 8212665..0000000
--- a/res/values-iw-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"מכשיר"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"אין אנשי קשר שניתן לייצא. אם בטאבלט מוגדרים אנשי קשר, ייתכן שספקי הנתונים שלהם לא מאפשרים לייצא אותם מהטאבלט."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ja-sw600dp/strings.xml
deleted file mode 100644
index 3fd2413..0000000
--- a/res/values-ja-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"端末"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"エクスポートできる連絡先がありません。タブレットに連絡先を保存している場合でも、データ プロバイダによってはタブレットから連絡先をエクスポートできないことがあります。"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ka-rGE-sw600dp/strings.xml
deleted file mode 100644
index d4059f9..0000000
--- a/res/values-ka-rGE-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"მოწყობილობა"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ექსპორტირებადი კონტაქტები არ მოიპოვება. თუ კონტაქტები ნამდვილად არის თქვენს ტაბლეტში, შესაძლოა ზოგიერთი მონაცემთა პროვაიდერი არ იძლევა ტაბლეტიდან მათი ექსპორტის უფლებას."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-kk-rKZ-sw600dp/strings.xml
deleted file mode 100644
index 3e144a1..0000000
--- a/res/values-kk-rKZ-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Құрылғы"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Экспортталатын контактілер жоқ. Планшетіңізде контактілер болса, кейбір дерек жабдықтаушылары контактілердің планшеттен экспортталуына рұқсат бермейді."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-km-rKH-sw600dp/strings.xml
deleted file mode 100644
index dde77c4..0000000
--- a/res/values-km-rKH-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ឧបករណ៍"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"មិន​មាន​ទំនាក់​ទំនង​ដើម្បី​នាំចេញ​ទេ។ ប្រសិនបើ​អ្នក​ពិតជា​មាន​ទំនាក់ទំនង​នៅ​ក្នុង​ទូរស័ព្ទ​របស់​អ្នក​មែន នោះ​ទំនាក់ទំនង​ទាំងអស់​អាច​បាន​ហាម​មិន​ឲ្យ​នាំចេញ​ដោយ​ក្រុមហ៊ុន​ផ្ដល់​ទិន្នន័យ​មួយ​ចំនួន។"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-kn-rIN-sw600dp/strings.xml
deleted file mode 100644
index 9f06e21..0000000
--- a/res/values-kn-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ಸಾಧನ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ಯಾವುದೇ ರಫ್ತುಮಾಡುವಂತಹ ಸಂಪರ್ಕಗಳಿಲ್ಲ. ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌‌ನಲ್ಲಿ ಸಂಪರ್ಕಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಟ್ಯಾಬ್ಲೆಟ್‌‌‌‌ನಿಂದ ರಫ್ತು ಮಾಡಲಿರುವ ಸಂಪರ್ಕಗಳಿಗೆ ಕೆಲವು ಡೇಟಾ ಪೂರೈಕೆದಾರರು ಅನುಮತಿ ನೀಡದಿರಬಹುದು."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ko-sw600dp/strings.xml
deleted file mode 100644
index 5d70f6f..0000000
--- a/res/values-ko-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"기기"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"내보낼 수 있는 연락처가 없습니다. 태블릿에 연락처가 있다면 일부 데이터 제공업체에서 연락처를 태블릿에서 내보내지 못하도록 했기 때문일 수 있습니다."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ky-rKG-sw600dp/strings.xml
deleted file mode 100644
index e90fa6e..0000000
--- a/res/values-ky-rKG-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Түзмөк"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Экспорттоло турган байланыштар жок. Эгер байланыштар планшетиңизде болсо, айрым дайындарды камсыздоочулар байланыштарды планшеттен экспорттоого жол бербеши мүмкүн."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-lo-rLA-sw600dp/strings.xml
deleted file mode 100644
index a9e97d5..0000000
--- a/res/values-lo-rLA-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ອຸປະກອນ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ສາມາດສົ່ງອອກໄດ້. ຫາກທ່ານມີລາຍຊື່ຜູ້ຕິດຕໍ່ໃນແທັບເລັດຂອງທ່ານ ແຕ່ບໍ່ສາມາດສົ່ງອອກໄດ້ ກໍອາດເປັນເພາະບາງຜູ້ໃຫ້ບໍລິການຂໍ້ມູນບໍ່ອະນຸຍາດ ໃຫ້ສົ່ງລາຍຊື່ຜູ້ຕິດຕໍ່ອອກຈາກແທັບເລັດໄດ້."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-lt-sw600dp/strings.xml
deleted file mode 100644
index 7745e5f..0000000
--- a/res/values-lt-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Įrenginys"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nėra jokių eksportuojamų kontaktų. Jei planšetiniame kompiuteryje yra kontaktų, kai kurie duomenų paslaugų teikėjai gali neleisti eksportuoti kontaktų iš planšetinio kompiuterio."</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-sw600dp/strings.xml b/res/values-lv-sw600dp/strings.xml
deleted file mode 100644
index 78712f2..0000000
--- a/res/values-lv-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Ierīce"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nav nevienas eksportējamas kontaktpersonas. Ja jūsu planšetdatorā ir saglabātas kontaktpersonas, iespējams, jūsu datu pakalpojumu sniedzējs neļauj eksportēt kontaktpersonas no planšetdatora."</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-sw600dp/strings.xml b/res/values-mk-rMK-sw600dp/strings.xml
deleted file mode 100644
index a1c3983..0000000
--- a/res/values-mk-rMK-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Уред"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Нема контакти на кои може да се изврши извоз. Ако имате контакти на вашиот таблет, некои оператори може да не дозволуваат извоз на контактите од таблетот."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ml-rIN-sw600dp/strings.xml
deleted file mode 100644
index c3ccd7c..0000000
--- a/res/values-ml-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ഉപകരണം"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"എക്‌സ്‌പോർട്ടുചെയ്യാനാകുന്ന കോൺടാക്റ്റുകളൊന്നുമില്ല. നിങ്ങളുടെ ടാബ്‌ലെറ്റിൽ കോൺടാക്റ്റുകളുണ്ടെങ്കിൽ, ടാബ്‌ലെറ്റിൽ നിന്നും കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യാൻ ചില സേവന ദാതാക്കൾ അനുവദിക്കാനിടയില്ല."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-mn-rMN-sw600dp/strings.xml
deleted file mode 100644
index 35bd8e9..0000000
--- a/res/values-mn-rMN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Төхөөрөмж"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Экспорт хийж болох харилцагчид алга байна. Хэрэв та таблетдаа харилцагчидтай байгаа бол зарим өгөгдөл нийлүүлэгч харилцагчдын мэдээллийг таблетаас экспорт хийхийг зөвшөөрөхгүй байж магадгүй."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-mr-rIN-sw600dp/strings.xml
deleted file mode 100644
index fb4a256..0000000
--- a/res/values-mr-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"डिव्हाइस"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"निर्यात करण्यायोग्य संपर्क नाहीत. आपल्याकडे आपल्या टॅब्लेटवर संपर्क असल्यास, काही डेटा प्रदाते टॅब्लेट वरून संपर्क निर्यात करण्यास कदाचित अनुमती देणार नाहीत."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ms-rMY-sw600dp/strings.xml
deleted file mode 100644
index bec2ed8..0000000
--- a/res/values-ms-rMY-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Peranti"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Tiada kenalan yang boleh dieksport. Jika anda mempunyai kenalan pada tablet, sesetengah pembekal data mungkin tidak membenarkan kenalan itu dieksport daripada tablet."</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-sw600dp/strings.xml b/res/values-my-rMM-sw600dp/strings.xml
deleted file mode 100644
index 1b5ea68..0000000
--- a/res/values-my-rMM-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ကိရိယာ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"တင်ပို့နိုင်သောအဆက်အသွယ် မရှိပါ။ သင့်တက်ဘလက်အတွင်း အဆက်အသွယ်များရှိနေပါက အချို့ဒေတာထောက်ပံ့သူတို့အနေဖြင့် တက်ဘလက်မှ အဆက်အသွယ်များတင်ပို့ခွင့် ပြုမထားနိုင်ပါ။"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-nb-sw600dp/strings.xml
deleted file mode 100644
index cf91470..0000000
--- a/res/values-nb-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Enhet"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Du har ingen kontakter som kan eksporteres. Hvis du har kontakter på nettbrettet, kan det hende at dataleverandøren din ikke tillater at kontaktene eksporteres fra nettbrettet."</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-sw600dp/strings.xml b/res/values-ne-rNP-sw600dp/strings.xml
deleted file mode 100644
index f74d832..0000000
--- a/res/values-ne-rNP-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"यन्त्र"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"निर्यात योग्य सम्पर्कहरू छैनन्। यदि तपाईँको ट्याब्लेटमा सम्पर्कहरू छन् भने केही डेटा प्रदायकहरूले ट्याब्लेटबाट सम्पर्कहरू निर्यात गर्ने अनुमति दिँदैनन्।"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-nl-sw600dp/strings.xml
deleted file mode 100644
index 55cc896..0000000
--- a/res/values-nl-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Apparaat"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Er zijn geen exporteerbare contacten. Als je wel contacten op je tablet hebt opgeslagen, staat je gegevensprovider het exporteren van contacten van de tablet mogelijk niet toe."</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-sw600dp/strings.xml b/res/values-pa-rIN-sw600dp/strings.xml
deleted file mode 100644
index a7d9afc..0000000
--- a/res/values-pa-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"ਡੀਵਾਈਸ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ਇੱਥੇ ਕੋਈ ਵੀ ਨਿਰਯਾਤ ਕਰਨਯੋਗ ਸੰਪਰਕ ਨਹੀਂ ਹਨ। ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਵਿੱਚ ਸੰਪਰਕ ਹਨ, ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਕੁਝ ਡੈਟਾ ਪ੍ਰਦਾਤਾ ਸੰਪਰਕਾਂ ਨੂੰ ਟੈਬਲੈੱਟ ਤੋਂ ਨਿਰਯਾਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਾ ਦੇਣ।"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-pl-sw600dp/strings.xml
deleted file mode 100644
index 12e6bbc..0000000
--- a/res/values-pl-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Urządzenie"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Brak kontaktów do eksportu. Jeśli masz na tablecie kontakty, być może niektórzy dostawcy danych nie zezwalają na ich eksport z tabletu."</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-sw600dp/strings.xml b/res/values-pt-rBR-sw600dp/strings.xml
deleted file mode 100644
index 294d1c6..0000000
--- a/res/values-pt-rBR-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Não há contatos exportáveis. Se você tiver contatos no tablet, talvez alguns provedores de dados não permitam que eles sejam exportados."</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-sw600dp/strings.xml b/res/values-pt-rPT-sw600dp/strings.xml
deleted file mode 100644
index 6d68a1d..0000000
--- a/res/values-pt-rPT-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Não existem contactos exportáveis. Se tiver contactos no seu tablet, alguns fornecedores de dados podem não permitir a exportação dos contactos a partir do tablet."</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-sw600dp/strings.xml b/res/values-pt-sw600dp/strings.xml
deleted file mode 100644
index 294d1c6..0000000
--- a/res/values-pt-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Dispositivo"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Não há contatos exportáveis. Se você tiver contatos no tablet, talvez alguns provedores de dados não permitam que eles sejam exportados."</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-sw600dp/strings.xml b/res/values-ro-sw600dp/strings.xml
deleted file mode 100644
index f0ab37d..0000000
--- a/res/values-ro-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Gadget"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nu există persoane din agendă care să poată fi exportate. Dacă aveți persoane în agenda tabletei, este posibil ca exportul acestora de pe tabletă să fie interzis de unii furnizori de date."</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-sw600dp/strings.xml b/res/values-ru-sw600dp/strings.xml
deleted file mode 100644
index e3fea12..0000000
--- a/res/values-ru-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Устройство"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Не найдены контакты для экспорта. Возможно, экспорт контактов с планшетного ПК не поддерживается поставщиком услуг передачи данных."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-si-rLK-sw600dp/strings.xml
deleted file mode 100644
index 8548adc..0000000
--- a/res/values-si-rLK-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"උපාංගය"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"නිර්යාත කළ හැකි සම්බන්ධතා නැත. ඔබේ ටැබ්ලටයේ සම්බන්ධතා තිබේ නම්, සමහර දත්ත සපයන්නන් ටැබ්ලටයෙන් සම්බන්ධතා නිර්යාත කිරීමට ඉඩ නොදිය හැකිය."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-sk-sw600dp/strings.xml
deleted file mode 100644
index 1fcfa04..0000000
--- a/res/values-sk-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Zariadenie"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nenašli sa žiadne kontakty, ktoré by bolo možné exportovať. Ak v tablete skutočne máte kontakty, problém môže byť spôsobený tým, že niektorí poskytovatelia údajov neumožňujú export kontaktov z tabletu."</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-sw600dp/strings.xml b/res/values-sl-sw600dp/strings.xml
deleted file mode 100644
index b5f6b01..0000000
--- a/res/values-sl-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Naprava"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Na voljo ni noben stik za izvoz. Če imate stike v tabličnem računalniku, nekateri ponudniki podatkov morda ne omogočajo izvoza stikov iz tabličnega računalnika."</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-sw600dp/strings.xml b/res/values-sq-rAL-sw600dp/strings.xml
deleted file mode 100644
index 8f4c647..0000000
--- a/res/values-sq-rAL-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Pajisja"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Nuk ka kontakte që mund të eksportohen. Nëse ke kontakte në tabletin tënd, disa ofrues të të dhënave mund të mos lejojnë që kontaktet të eksportohen nga tableti."</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-sw600dp/strings.xml b/res/values-sr-sw600dp/strings.xml
deleted file mode 100644
index e586979..0000000
--- a/res/values-sr-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Уређај"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Нема контаката за извоз. Ако имате контакте на таблету, неки добављачи података можда неће дозволити извоз контаката са таблета."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-sv-sw600dp/strings.xml
deleted file mode 100644
index a16d260..0000000
--- a/res/values-sv-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Enhet"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Det finns inga kontakter att exportera. Om du har kontakter på surfplattan kanske vissa dataleverantörer inte tillåter att kontakterna exporteras från surfplattan."</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-sw600dp/strings.xml b/res/values-sw-sw600dp/strings.xml
deleted file mode 100644
index 8e64b09..0000000
--- a/res/values-sw-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Kifaa"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Hakuna anwani zinazoweza kuhamishwa. Kama una anwani kwenye kompyuta kibao, huenda baadhi ya watoa huduma za data hawaruhusu anwani zihamishwe kutoka kwenye kompyuta kibao."</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-sw600dp/strings.xml b/res/values-ta-rIN-sw600dp/strings.xml
deleted file mode 100644
index e6671ab..0000000
--- a/res/values-ta-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"சாதனம்"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ஏற்றத்தக்க தொடர்புகள் இல்லை. டேப்லெட்டில் தொடர்புகள் இருந்தால், டேப்லெட்டிலிருந்து தொடர்புகளை ஏற்றுவதற்குச் சில தரவு வழங்குநர்கள் அனுமதிக்காமல் போகக்கூடும்."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-te-rIN-sw600dp/strings.xml
deleted file mode 100644
index c4ea39d..0000000
--- a/res/values-te-rIN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"పరికరం"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ఎగుమతి చేయదగిన పరిచయాలు ఏవీ లేవు. మీరు మీ టాబ్లెట్‌లో పరిచయాలు కలిగి ఉన్నప్పటికీ, కొందరు డేటా ప్రదాతలు పరిచయాలను టాబ్లెట్ నుండి ఎగుమతి చేయడానికి అనుమతించకపోవచ్చు."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-th-sw600dp/strings.xml
deleted file mode 100644
index 09f4e08..0000000
--- a/res/values-th-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"อุปกรณ์"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"ไม่มีรายชื่อติดต่อที่สามารถส่งออกได้ หากคุณมีรายชื่อติดต่อในแท็บเล็ตจริงๆ อาจเป็นเพราะผู้ให้บริการข้อมูลบางรายไม่อนุญาตให้ส่งออกรายชื่อติดต่อจากแท็บเล็ต"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-tl-sw600dp/strings.xml
deleted file mode 100644
index dc1e451..0000000
--- a/res/values-tl-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Device"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Walang mga na-e-export na contact. Kung mayroon kang mga contact sa iyong tablet, maaaring hindi payagan ng ilang provider ng data na ma-export mula sa tablet ang mga contact."</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-sw600dp/strings.xml b/res/values-tr-sw600dp/strings.xml
deleted file mode 100644
index 0078d71..0000000
--- a/res/values-tr-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Cihaz"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Dışa aktarılabilecek kişi yok. Tabletinizde kişiler varsa, bazı veri sağlayıcılar kişilerin tabletten dışa aktarılmasına izin vermeyebilir."</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-sw600dp/strings.xml b/res/values-uk-sw600dp/strings.xml
deleted file mode 100644
index 8835265..0000000
--- a/res/values-uk-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Пристрій"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Немає контактів, які можна експортувати. Якщо на вашому планшеті є контакти, можливо, якийсь постачальник даних заборонив експорт контактів із планшета."</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-ur-rPK-sw600dp/strings.xml
deleted file mode 100644
index 55d9a23..0000000
--- a/res/values-ur-rPK-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"آلہ"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"برآمد کرنے لائق کوئی رابطے نہیں ہیں۔ اگر آپ کے ٹیبلیٹ پر واقعی رابطے ہیں تو ممکن ہے کچھ ڈیٹا فراہم کنندگان رابطوں کو ٹیبلیٹ سے برآمد کیے جانے کی اجازت نہ دیتے ہوں۔"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-uz-rUZ-sw600dp/strings.xml
deleted file mode 100644
index eeb392d..0000000
--- a/res/values-uz-rUZ-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Qurilma"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Eksport qilish uchun kontaktlar yo‘q. Ba’zi tarmoq operatorlari kontaktlarni planshetdan eksport qilishga ruxsat bermagan bo‘lishi mumkin."</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-sw600dp/strings.xml b/res/values-vi-sw600dp/strings.xml
deleted file mode 100644
index 4269a26..0000000
--- a/res/values-vi-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Thiết bị"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Không thể xuất danh bạ nào. Nếu bạn có danh bạ trên máy tính bảng của mình, một số nhà cung cấp dữ liệu có thể không cho phép xuất danh bạ từ máy tính bảng."</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-sw600dp/strings.xml b/res/values-zh-rCN-sw600dp/strings.xml
deleted file mode 100644
index ce30330..0000000
--- a/res/values-zh-rCN-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"设备"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"没有可导出的联系人。如果您的平板电脑上确实存有联系人，则可能是某些数据源不允许从平板电脑中导出联系人。"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-zh-rHK-sw600dp/strings.xml
deleted file mode 100644
index d6450c8..0000000
--- a/res/values-zh-rHK-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"裝置"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"沒有聯絡人可以匯出。如果您的平板電腦中確實有聯絡人，則可能是部分資料提供者不允許您將聯絡人從平板電腦匯出。"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-zh-rTW-sw600dp/strings.xml
deleted file mode 100644
index f4aaeaa..0000000
--- a/res/values-zh-rTW-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"裝置"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"沒有可匯出的聯絡人。如果你的平板電腦中確實有聯絡人資料，那麼可能是部分資料提供者不允許你將聯絡人資料從平板電腦匯出。"</string>
-</resources>
diff --git a/res/values-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-sw600dp/strings.xml b/res/values-zu-sw600dp/strings.xml
deleted file mode 100644
index ee09bbd..0000000
--- a/res/values-zu-sw600dp/strings.xml
+++ /dev/null
@@ -1,22 +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:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="account_phone" msgid="347665663520819575">"Idivayisi"</string>
-    <string name="composer_has_no_exportable_contact" msgid="5998889616701036804">"Abekho oxhuana nabo abangathumeleka. Uma unabo oxhumana nabo ekhompyutheni yakho yepeni, abanye abahlinzeki be-data kungenzeka bangavumi ukuthi oxhumana nabo bthuyelwe besuka ekhompyutheni yakho yepeni."</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 4155299..31c0f6b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -21,9 +21,6 @@
         <item name="windowActionModeOverlay">true</item>
     </style>
 
-    <style name="Theme">
-    </style>
-
     <style name="Theme.QuickContact" parent="@style/PeopleTheme">
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:colorBackgroundCacheHint">@null</item>
@@ -41,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>
@@ -58,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
@@ -103,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>
@@ -131,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
@@ -194,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">
@@ -208,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>
@@ -269,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>
 
@@ -308,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>
@@ -438,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..9393e1a 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());
@@ -114,9 +126,9 @@
         if (savedInstanceState != null) {
             mAccountHeaderPresenter.onRestoreInstanceState(savedInstanceState);
         } else {
-            final AccountWithDataSet currentDefaultAccount = AccountWithDataSet
-                    .getDefaultOrBestFallback(mPreferences, mAccountTypeManager);
-            mAccountHeaderPresenter.setCurrentAccount(currentDefaultAccount);
+            // Default may be null in which case the first account in the list will be selected
+            // after they are loaded.
+            mAccountHeaderPresenter.setCurrentAccount(mPreferences.getDefaultAccount());
         }
         mAccountHeaderPresenter.setObserver(new AccountHeaderPresenter.Observer() {
             @Override
@@ -128,7 +140,6 @@
             }
         });
         mAdapter.setAccount(mAccountHeaderPresenter.getCurrentAccount());
-        restoreAdapterSelectedStates(savedInstanceState);
 
         mListView = (ListView) view.findViewById(R.id.list);
         mListView.setOnScrollListener(this);
@@ -162,6 +173,9 @@
 
     private void rememberSelectionsForCurrentAccount() {
         final AccountWithDataSet current = mAdapter.getAccount();
+        if (current == null) {
+            return;
+        }
         final long[] ids = mListView.getCheckedItemIds();
         Arrays.sort(ids);
         mPerAccountCheckedIds.put(current, ids);
@@ -224,7 +238,7 @@
     }
 
     @Override
-    public SimContactLoader onCreateLoader(int id, Bundle args) {
+    public Loader<LoaderResult> onCreateLoader(int id, Bundle args) {
         return new SimContactLoader(getContext(), mSubscriptionId);
     }
 
@@ -235,6 +249,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 +262,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 +297,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 +445,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 +492,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 dd371ae..cea2ea8 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..2ca51f6 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,15 @@
 
 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.AccountType;
+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 +54,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 AccountsLoader.AccountsListener {
 
     private static final String TAG = ContactEditorAccountsChangedActivity.class.getSimpleName();
 
@@ -95,10 +102,30 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
         mEditorUtils = ContactEditorUtils.create(this);
-        final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(this).
-                getAccounts(true);
+        AccountsLoader.loadAccounts(this, 0, AccountTypeManager.writableFilter());
+    }
+
+    @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 +150,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 +160,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 +175,7 @@
             rightButton.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    saveAccountAndReturnResult(account);
+                    saveAccountAndReturnResult(accountInfo.getAccount());
                 }
             });
         } else {
@@ -183,6 +210,9 @@
             rightButton.setOnClickListener(mAddAccountClickListener);
         }
 
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.dismiss();
+        }
         mDialog = new AlertDialog.Builder(this)
                 .setView(view)
                 .setOnCancelListener(new DialogInterface.OnCancelListener() {
@@ -195,25 +225,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 +235,9 @@
         setResult(RESULT_OK, intent);
         finish();
     }
+
+    @Override
+    public void onAccountsLoaded(List<AccountInfo> accounts) {
+        updateDisplayedAccounts(accounts);
+    }
 }
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 6e79b50..a33e92f 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -32,15 +32,14 @@
 import com.android.contacts.ContactSaveService;
 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;
@@ -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";
 
@@ -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..4e4f35a 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,19 @@
         updateDisplayedAccount();
     }
 
+    public void setAccounts(List<AccountInfo> accounts) {
+        mAccounts = accounts;
+        // If the current account hasn't been set or it has been removed just use the first
+        // account.
+        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 +127,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 +151,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 +175,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 +211,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/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 5f544de..489cfd1 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -57,44 +57,47 @@
 import android.widget.Toast;
 
 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;
@@ -108,12 +111,14 @@
         JoinContactConfirmationDialogFragment.Listener,
         AggregationSuggestionEngine.Listener, AggregationSuggestionView.Listener,
         CancelEditDialogFragment.Listener,
-        RawContactEditorView.Listener, PhotoEditorView.Listener {
+        RawContactEditorView.Listener, PhotoEditorView.Listener,
+        AccountsLoader.AccountsListener {
 
     static final String TAG = "ContactEditor";
 
     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 +307,6 @@
     // Views
     //
     protected LinearLayout mContent;
-    protected View mAggregationSuggestionView;
     protected ListPopupWindow mAggregationSuggestionPopup;
 
     //
@@ -343,6 +347,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;
 
@@ -539,12 +544,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 +561,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) {
+            AccountsLoader.loadAccounts(this, LOADER_ACCOUNTS, AccountTypeManager.writableFilter());
+        }
     }
 
     /**
@@ -655,30 +660,53 @@
             }
             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;
             }
         }
     }
 
+    @Override
+    public void onAccountsLoaded(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();
+            }
+        }
+    }
+
     //
     // Options menu
     //
@@ -734,19 +762,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 +1002,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 +1010,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 +1022,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 +1190,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 +1255,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 +1517,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 9ef6608..31d41b1 100644
--- a/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
+++ b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
@@ -16,9 +16,6 @@
 
 package com.android.contacts.editor;
 
-import com.android.contacts.R;
-import com.android.contacts.editor.PhotoActionPopup.ChoiceListItem;
-
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.DialogFragment;
@@ -29,6 +26,9 @@
 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..5a9c9fd 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}.
@@ -52,7 +53,6 @@
         private final LayoutInflater mInflater;
         private final Context mContext;
         private final RawContactsMetadata mRawContactsMetadata;
-        private final AccountDisplayInfoFactory mAccountDisplayInfoFactory;
         private final AccountTypeManager mAccountTypeManager;
         private final ContactsPreferences mPreferences;
 
@@ -60,7 +60,6 @@
                 RawContactsMetadata rawContactsMetadata) {
             mContext = context;
             mInflater = LayoutInflater.from(context);
-            mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forWritableAccounts(context);
             mAccountTypeManager = AccountTypeManager.getInstance(context);
             mPreferences = new ContactsPreferences(context);
             mRawContactsMetadata = rawContactsMetadata;
@@ -114,12 +113,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/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 faba8c5..004e0f4 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..5bf4fe4
--- /dev/null
+++ b/src/com/android/contacts/interactions/ImportDialogFragment.java
@@ -0,0 +1,311 @@
+/*
+ * 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.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountSelectionUtil;
+import com.android.contacts.util.AccountsListAdapter.AccountListFilter;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.List;
+import java.util.concurrent.Future;
+
+/**
+ * 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;
+
+    private Future<List<AccountInfo>> mAccountsFuture;
+
+    /** 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 void onResume() {
+        super.onResume();
+
+        // Start loading the accounts. This is done in onResume in case they were refreshed.
+        mAccountsFuture = AccountTypeManager.getInstance(getActivity()).filterAccountsAsync(
+                AccountTypeManager.writableFilter());
+    }
+
+    @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) {
+        // Get the accounts. Because this only happens after a user action this should pretty
+        // much never block since it will usually be at least several seconds before the user
+        // interacts with the view
+        final List<AccountWithDataSet> accountList = AccountInfo.extractAccounts(
+                Futures.getUnchecked(mAccountsFuture));
+
+        // 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 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..32e4b9c
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -0,0 +1,464 @@
+/*
+ * 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)";
+        }
+    }
+
+    public boolean isSyncable() {
+        return isGoogleAccountType() && filterType == FILTER_TYPE_ACCOUNT;
+    }
+
+    /**
+     * Returns true if this ContactListFilter contains at least one Google account.
+     * (see {@link #isGoogleAccountType)
+     */
+    public boolean isSyncable(List<AccountWithDataSet> accounts) {
+        if (isSyncable()) {
+            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..df81832
--- /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.exists(filterAccount);
+    }
+}
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 262325a..e905ac7 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,37 +58,32 @@
 
 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.AccountInfo;
+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 com.google.common.util.concurrent.Futures;
 
 import java.util.List;
 import java.util.Locale;
+import java.util.concurrent.Future;
 
 /**
  * Fragment containing a contact list used for browsing (as compared to
@@ -157,6 +155,8 @@
     private ContactsRequest mContactsRequest;
     private ContactListFilterController mContactListFilterController;
 
+    private Future<List<AccountInfo>> mWritableAccountsFuture;
+
     private final ActionBarAdapter.Listener mActionBarListener = new ActionBarAdapter.Listener() {
         @Override
         public void onAction(int action) {
@@ -328,12 +328,13 @@
         // TODO(samchen) : Check ContactListFilter.FILTER_TYPE_CUSTOM
         if (ContactListFilter.FILTER_TYPE_DEFAULT == filter.filterType
                 || ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS == filter.filterType) {
-            final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(getContext())
-                    .getAccounts(/* contactsWritableOnly */ true);
-            final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
+            final List<AccountInfo> syncableAccounts =
+                    AccountTypeManager.getInstance(getContext()).getWritableGoogleAccounts();
 
             if (syncableAccounts != null && syncableAccounts.size() > 0) {
-                for (Account account : syncableAccounts) {
+                for (AccountInfo info : syncableAccounts) {
+                    // Won't be null because Google accounts have a non-null name and type.
+                    final Account account = info.getAccount().getAccountOrNull();
                     if (SyncUtil.isSyncStatusPendingOrActive(account)
                             || SyncUtil.isUnsyncableGoogleAccount(account)) {
                         return false;
@@ -516,9 +517,11 @@
     public void onEnableAutoSync(ContactListFilter filter) {
         // Turn on auto-sync
         ContentResolver.setMasterSyncAutomatically(true);
+
+        // This should be OK (won't block) because this only happens after a user action
+        final List<AccountInfo> accountInfos = Futures.getUnchecked(mWritableAccountsFuture);
         // Also enable Contacts sync
-        final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(
-                getContext()).getAccounts(/* contactsWritableOnly */ true);
+        final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(accountInfos);
         final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
         if (syncableAccounts != null && syncableAccounts.size() > 0) {
             for (Account account : syncableAccounts) {
@@ -586,8 +589,8 @@
         bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
         bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
 
-        final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(
-                getContext()).getAccounts(/* contactsWritableOnly */ true);
+        final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(
+                Futures.getUnchecked(mWritableAccountsFuture));
         final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
         if (syncableAccounts != null && syncableAccounts.size() > 0) {
             for (Account account : syncableAccounts) {
@@ -737,6 +740,9 @@
         mActionBarAdapter.setListener(mActionBarListener);
         mDisableOptionItemSelected = false;
         maybeHideCheckBoxes();
+
+        mWritableAccountsFuture = AccountTypeManager.getInstance(getContext()).filterAccountsAsync(
+                AccountTypeManager.writableFilter());
     }
 
     private void maybeHideCheckBoxes() {
@@ -852,9 +858,9 @@
 
         if (filter != null && !mActionBarAdapter.isSearchMode()
                 && !mActionBarAdapter.isSelectionMode()) {
-            final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(getContext())
-                    .getAccounts(/* contactsWritableOnly */ true);
-            if (filter.isSyncable(accounts)) {
+            if (filter.isSyncable()
+                    || (filter.shouldShowSyncState()
+                    && SyncUtil.hasSyncableAccount(AccountTypeManager.getInstance(getContext())))) {
                 swipeRefreshLayout.setEnabled(true);
             }
         }
@@ -990,6 +996,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) {
@@ -1014,43 +1029,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..cbdccd5
--- /dev/null
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -0,0 +1,737 @@
+/*
+ * 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 =
+                AccountInfo.extractAccounts(Futures.getUnchecked(getAccountsAsync()));
+        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);
+    }
+
+    /**
+     * Returns whether the specified account still exists
+     */
+    public boolean exists(AccountWithDataSet account) {
+        final List<AccountWithDataSet> accounts =
+                AccountInfo.extractAccounts(Futures.getUnchecked(getAccountsAsync()));
+        return accounts.contains(account);
+    }
+
+    /**
+     * Returns whether the specified account is writable
+     *
+     * <p>This checks that the account still exists and that
+     * {@link AccountType#areContactsWritable()} is true</p>
+     */
+    public boolean isWritable(AccountWithDataSet account) {
+        return exists(account) && getAccountInfoForAccount(account).getType().areContactsWritable();
+    }
+
+    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) {
+        reloadLocalAccounts();
+        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<>();
+                for (AccountWithDataSet account : input.get(0)) {
+                    result.add(
+                            typeProvider.getTypeForAccount(account).wrapAccount(mContext, account));
+                }
+
+                for (AccountWithDataSet account : input.get(1)) {
+                    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;
+    }
+
+    /**
+     * Returns true if there are real accounts (not "local" account) in the list of accounts.
+     *
+     * <p>This is overriden for performance since the default implementation blocks until all
+     * accounts are loaded
+     * </p>
+     */
+    @Override
+    public boolean hasNonLocalAccount() {
+        final Account[] accounts = mAccountManager.getAccounts();
+        if (accounts == null) {
+            return false;
+        }
+        for (Account account : accounts) {
+            if (mTypeProvider.supportsContactsSyncing(account.type)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 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;
+    }
+
+    /**
+     * Returns whether the account still exists on the device
+     *
+     * <p>This is overridden for performance. The default implementation loads all accounts then
+     * searches through them for specified. This implementation will only load the types for the
+     * specified AccountType (it may still require blocking on IO in some cases but it shouldn't
+     * be as bad as blocking for all accounts).
+     * </p>
+     */
+    @Override
+    public boolean exists(AccountWithDataSet account) {
+        final Account[] accounts = mAccountManager.getAccountsByType(account.type);
+        for (Account existingAccount : accounts) {
+            if (existingAccount.name.equals(account.name)) {
+                return mTypeProvider.getTypeForAccount(account) != null;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 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..2b86644
--- /dev/null
+++ b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
@@ -0,0 +1,105 @@
+/*
+ * 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.contacts.model.account.GoogleAccountType;
+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);
+        } else {
+            return new NexusDeviceAccountLocator(accountManager);
+        }
+    }
+
+    /**
+     * On Nexus the "device" account uses "null" values for the account name and type columns
+     *
+     * <p>However, the focus sync adapter automatically migrates contacts from this null
+     * account to a Google account if one exists. Hence, the device account should be returned
+     * only when there is no Google Account added
+     * </p>
+     */
+    public static class NexusDeviceAccountLocator extends DeviceLocalAccountLocator {
+
+        private final AccountManager mAccountManager;
+
+        public NexusDeviceAccountLocator(AccountManager accountManager) {
+            mAccountManager = accountManager;
+        }
+
+        @Override
+        public List<AccountWithDataSet> getDeviceLocalAccounts() {
+            @SuppressWarnings("MissingPermission")
+            final Account[] accounts = mAccountManager
+                    .getAccountsByType(GoogleAccountType.ACCOUNT_TYPE);
+
+            if (accounts.length > 0) {
+                return Collections.emptyList();
+            } else {
+                return Collections.singletonList(AccountWithDataSet.getNullAccount());
+            }
+        }
+    }
+}
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..ac1ad35
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountDisplayInfoFactory.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.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);
+    }
+
+    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..b07204e
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountInfo.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.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 hasGoogleAccountType() {
+        return mDisplayInfo.hasGoogleAccountType();
+    }
+
+    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..e30ae29
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountTypeProvider.java
@@ -0,0 +1,261 @@
+/*
+ * 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 static com.android.contacts.util.DeviceLocalAccountTypeFactory.Util.isLocalAccountType;
+
+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;
+
+/**
+ * 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;
+    }
+
+    public boolean supportsContactsSyncing(String accountType) {
+        return mAuthTypes.containsKey(accountType);
+    }
+
+    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..a163139
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountWithDataSet.java
@@ -0,0 +1,258 @@
+/*
+ * 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;
+    }
+}
+
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..260c44b
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountsLoader.java
@@ -0,0 +1,106 @@
+/*
+ * 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.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.os.Bundle;
+
+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));
+    }
+
+
+    public interface AccountsListener {
+        void onAccountsLoaded(List<AccountInfo> accounts);
+    }
+
+    /**
+     * Loads the accounts into the target fragment using {@link LoaderManager}
+     *
+     * <p>This is a convenience method to reduce the
+     * boilerplate needed when implementing {@link android.app.LoaderManager.LoaderCallbacks}
+     * in the simple case that the fragment wants to just load the accounts directly</p>
+     */
+    public static <FragmentType extends Fragment & AccountsListener> void loadAccounts(
+            final FragmentType fragment, int loaderId, final Predicate<AccountInfo> filter) {
+        loadAccounts(
+                fragment.getActivity(), fragment.getLoaderManager(), loaderId, filter, fragment);
+    }
+
+    public static <ActivityType extends Activity & AccountsListener> void loadAccounts(
+            final ActivityType activity, int id, final Predicate<AccountInfo> filter) {
+        loadAccounts(activity, activity.getLoaderManager(), id, filter, activity);
+    }
+
+    private static void loadAccounts(final Context context, LoaderManager loaderManager, int id,
+            final Predicate<AccountInfo> filter, final AccountsListener listener) {
+        loaderManager.initLoader(id, null,
+                new LoaderManager.LoaderCallbacks<List<AccountInfo>>() {
+                    @Override
+                    public Loader<List<AccountInfo>> onCreateLoader(int id, Bundle args) {
+                        return new AccountsLoader(context, filter);
+                    }
+
+                    @Override
+                    public void onLoadFinished(
+                            Loader<List<AccountInfo>> loader, List<AccountInfo> data) {
+                        listener.onAccountsLoaded(data);
+                    }
+
+                    @Override
+                    public void onLoaderReset(Loader<List<AccountInfo>> loader) {
+                    }
+                });
+    }
+}
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..72ba74d
--- /dev/null
+++ b/src/com/android/contacts/preference/DefaultAccountPreference.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.contacts.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 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());
+    }
+
+    @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.exists(defaultAccount)) {
+            return null;
+        } else {
+            return mAccountTypeManager.getAccountInfoForAccount(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..a9ec250
--- /dev/null
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -0,0 +1,427 @@
+/*
+ * 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.AccountInfo;
+import com.android.contacts.model.account.AccountsLoader;
+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, AccountsLoader.AccountsListener {
+
+    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;
+    private static final int LOADER_ACCOUNTS = 1;
+
+    /**
+     * 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().initLoader(LOADER_PROFILE, null, mProfileLoaderListener);
+        AccountsLoader.loadAccounts(this, LOADER_ACCOUNTS, AccountTypeManager.writableFilter());
+    }
+
+    @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));
+        }
+
+        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 void onAccountsLoaded(List<AccountInfo> accounts) {
+        // Hide accounts preferences if no writable accounts exist
+        if (accounts.isEmpty()) {
+            getPreferenceScreen().removePreference(findPreference(KEY_DEFAULT_ACCOUNT));
+            getPreferenceScreen().removePreference(findPreference(KEY_CUSTOM_CONTACTS_FILTER));
+        }
+    }
+
+    @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..54c16e2
--- /dev/null
+++ b/src/com/android/contacts/util/AccountFilterUtil.java
@@ -0,0 +1,245 @@
+/*
+ * 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 AccountInfo info = AccountTypeManager.getInstance(context)
+                .getAccountInfoForAccount(filter.toAccountWithDataSet());
+        if (info == null) {
+            return context.getString(R.string.contactsList);
+        }
+
+        if (info.hasGoogleAccountType()) {
+            return context.getString(R.string.title_from_google);
+        }
+        return context.getString(R.string.title_from_other_accounts,
+                info.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..c5feb39 100644
--- a/src/com/android/contacts/util/SyncUtil.java
+++ b/src/com/android/contacts/util/SyncUtil.java
@@ -22,7 +22,9 @@
 import android.net.NetworkInfo;
 import android.provider.ContactsContract;
 
-import com.android.contacts.common.model.account.GoogleAccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
 
 import java.util.List;
 
@@ -48,6 +50,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) {
@@ -57,6 +72,10 @@
         return ContentResolver.getIsSyncable(account, ContactsContract.AUTHORITY) <= 0;
     }
 
+    public static final boolean hasSyncableAccount(AccountTypeManager accountTypeManager) {
+        return !accountTypeManager.getWritableGoogleAccounts().isEmpty();
+    }
+
     public static boolean isAlertVisible(Context context, Account account, int reason) {
         if (reason == SYNC_SETTING_GLOBAL_SYNC_OFF) {
             return (SharedPreferenceUtil.getNumOfDismissesForAutoSyncOff(context) == 0);
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 8cced15..263617b 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..46b5f40
--- /dev/null
+++ b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
@@ -0,0 +1,356 @@
+/*
+ * 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.AfterClass;
+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();
+        }
+    }
+
+    @AfterClass
+    public static void tearDownClass() {
+        AccountsTestHelper.removeAccountsWithPrefix(
+                InstrumentationRegistry.getTargetContext(), "SimImportActivity");
+    }
+
+    @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("SimImportActivity0_targetAccount_"));
+
+        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.textContains("_targetAccount_")).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..12365a2
--- /dev/null
+++ b/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java
@@ -0,0 +1,218 @@
+/*
+ * 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.test.AndroidTestCase;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+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.HashSet;
+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 HashSet<>(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..7c74b21
--- /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.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..17d815e
--- /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.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..3b96e3a
--- /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) &&
+                    Arrays.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) &&
+                    Arrays.equals(mSelectionArgs, update.mSelectionArgs);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mUri, mContentValues, mAnyNumberOfTimes, mIsExecuted, mSelection,
+                    Arrays.hashCode(mSelectionArgs));
+        }
+
+        @Override
+        public String toString() {
+            return "Update{" +
+                    "mUri=" + mUri +
+                    ", mContentValues=" + mContentValues +
+                    ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
+                    ", mIsExecuted=" + mIsExecuted +
+                    ", mSelection=" + mSelection +
+                    ", mSelectionArgs=" + Arrays.toString(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..2b2c16e 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,7 +44,7 @@
     private final AccountManager mAccountManager;
     private final ContentResolver mResolver;
 
-    private Account mTestAccount;
+    private List<Account> mAddedAccounts;
 
     public AccountsTestHelper() {
         // Use context instead of target context because the test package has the permissions needed
@@ -52,12 +56,27 @@
         mContext = context;
         mAccountManager = AccountManager.get(mContext);
         mResolver = mContext.getContentResolver();
+        mAddedAccounts = new ArrayList<>();
+    }
+
+    public void addTestAccount(AccountWithDataSet account) {
+        Account newAccount = new Account(account.name, account.type);
+        assertTrue(mAccountManager.addAccountExplicitly(newAccount, null, null));
+        mAddedAccounts.add(newAccount);
     }
 
     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,43 +85,55 @@
         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);
     }
 
-    public void removeContactsForAccount() {
-        // Not sure if this is necessary or if contacts are automatically cleaned up when the
-        // account is removed.
+    @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(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)
     public void cleanup() {
-        assertNotNull(mTestAccount);
-
         // Note that we don't need to cleanup up the contact data associated with the account.
         // CP2 will eventually do that automatically so as long as we're using unique account
         // names we should be safe. Note that cleanup is not done synchronously when the account
         // 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);
-        mTestAccount = null;
+        for (Account account : mAddedAccounts) {
+            mAccountManager.removeAccountExplicitly(account);
+        }
+        mAddedAccounts.clear();
     }
 
-    private AccountWithDataSet convertTestAccount() {
-        return new AccountWithDataSet(mTestAccount.name, mTestAccount.type, null);
+    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+    public static void removeAccountsWithPrefix(Context context, String prefix) {
+        final AccountManager accountManager =
+                (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
+        final Account[] accounts = accountManager.getAccountsByType(TEST_ACCOUNT_TYPE);
+        for (Account account : accounts) {
+            if (account.name.startsWith(prefix)) {
+                accountManager.removeAccountExplicitly(account);
+            }
+        }
+
+
     }
 }
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.
  */
