Merge "Create new SIM contacts import screen." into ub-contactsdialer-h-dev
diff --git a/Android.mk b/Android.mk
index 2ed0e69..a03d671 100644
--- a/Android.mk
+++ b/Android.mk
@@ -23,6 +23,9 @@
     $(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 6144e55..78060a8 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -25,36 +25,6 @@
 
     <!-- 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"
@@ -65,457 +35,5 @@
         android:hardwareAccelerated="true"
         android:supportsRtl="true"
         android:usesCleartextTraffic="false"
-    >
-
-        <!-- 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="false" />
-
-        <!-- 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>
-
-        <activity
-            android:name=".activities.ContactEditorSpringBoardActivity"
-            android:noHistory="true"
-            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" />
-
-        <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/AndroidManifest_common.xml b/AndroidManifest_common.xml
new file mode 100644
index 0000000..c616c1e
--- /dev/null
+++ b/AndroidManifest_common.xml
@@ -0,0 +1,505 @@
+<?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="false" />
+
+        <!-- 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>
+
+        <activity
+            android:name=".activities.ContactEditorSpringBoardActivity"
+            android:noHistory="true"
+            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" />
+
+        <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/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 31fcce2..0000000
--- a/res/drawable-hdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 65997eb..0000000
--- a/res/drawable-mdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 9f37410..0000000
--- a/res/drawable-xhdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 140daef..0000000
--- a/res/drawable-xxhdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png b/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png
deleted file mode 100644
index 6fe9b8c..0000000
--- a/res/drawable-xxxhdpi/ic_link_grey600_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_assistant.xml b/res/drawable/ic_assistant.xml
new file mode 100644
index 0000000..3391beb
--- /dev/null
+++ b/res/drawable/ic_assistant.xml
@@ -0,0 +1,25 @@
+<?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_group_add.xml b/res/drawable/ic_group_add.xml
new file mode 100644
index 0000000..6d8776e
--- /dev/null
+++ b/res/drawable/ic_group_add.xml
@@ -0,0 +1,25 @@
+<?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="M8,10L5,10L5,7L3,7v3L0,10v2h3v3h2v-3h3v-2zM18,11c1.66,0 2.99,-1.34 2.99,-3S19.66,5 18,5c-0.32,0 -0.63,0.05 -0.91,0.14 0.57,0.81 0.9,1.79 0.9,2.86s-0.34,2.04 -0.9,2.86c0.28,0.09 0.59,0.14 0.91,0.14zM13,11c1.66,0 2.99,-1.34 2.99,-3S14.66,5 13,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zM19.62,13.16c0.83,0.73 1.38,1.66 1.38,2.84v2h3v-2c0,-1.54 -2.37,-2.49 -4.38,-2.84zM13,13c-2,0 -6,1 -6,3v2h12v-2c0,-2 -4,-3 -6,-3z"/>
+</vector>
\ No newline at end of file
diff --git a/res/layout-land/contact_editor_fragment.xml b/res/layout-land/contact_editor_fragment.xml
index 6b02462..7f98765 100644
--- a/res/layout-land/contact_editor_fragment.xml
+++ b/res/layout-land/contact_editor_fragment.xml
@@ -44,8 +44,6 @@
                 android:layout_height="wrap_content"
                 android:orientation="vertical">
 
-            <include layout="@layout/editor_all_rawcontacts_accounts_selector" />
-
             <include layout="@layout/editor_account_header" />
 
             <include layout="@layout/contact_editor_fields" />
diff --git a/res/layout/contact_editor_fragment.xml b/res/layout/contact_editor_fragment.xml
index 85c4cf1..690be8c 100644
--- a/res/layout/contact_editor_fragment.xml
+++ b/res/layout/contact_editor_fragment.xml
@@ -39,7 +39,6 @@
             android:focusable="true"
             android:focusableInTouchMode="true"/>
 
-        <include layout="@layout/editor_all_rawcontacts_accounts_selector" />
         <include layout="@layout/editor_account_header" />
 
         <include layout="@layout/contact_editor_fields" />
diff --git a/res/layout/editor_all_rawcontacts_accounts_selector.xml b/res/layout/editor_all_rawcontacts_accounts_selector.xml
deleted file mode 100644
index 5606422..0000000
--- a/res/layout/editor_all_rawcontacts_accounts_selector.xml
+++ /dev/null
@@ -1,59 +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.
--->
-
-<!-- Header at the top of a raw contact editor. This allows users to change the account that
-    the raw contact is saved in. -->
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/all_rawcontacts_accounts_container"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:minHeight="@dimen/editor_min_line_item_height"
-        android:orientation="horizontal"
-        android:visibility="gone" >
-
-    <ImageView
-            android:src="@drawable/ic_link_grey600_drawable_24dp"
-            android:tint="@color/editor_icon_color"
-            style="@style/EditSelectorIconStyle"/>
-
-    <TextView
-            android:id="@+id/rawcontacts_accounts_summary"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_marginStart="@dimen/editor_account_left_margin"
-            android:textSize="16sp"
-            android:singleLine="true"
-            android:layout_weight="1"
-            android:textColor="@color/primary_text_color"
-            android:textAlignment="viewStart"
-            android:layout_gravity="center_vertical"
-            android:gravity="center_vertical"
-            android:ellipsize="end" />
-
-    <ImageView
-            android:src="@drawable/ic_menu_expand_minimized_24dp"
-            android:tint="@color/quantum_black_secondary_text"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical|end"
-            android:layout_alignParentEnd="true"
-            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"/>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index a006761..4082f5f 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -24,9 +24,9 @@
             android:icon="@drawable/ic_menu_filter"
             android:title="@string/contactsList" />
         <item
-            android:id="@+id/nav_find_duplicates"
-            android:icon="@drawable/ic_menu_duplicates"
-            android:title="@string/menu_duplicates"/>
+            android:id="@+id/nav_assistant"
+            android:icon="@drawable/ic_assistant"
+            android:title="@string/menu_assistant"/>
     </group>
 
     <group android:id="@+id/groups">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5ec6f1c..e5d6413 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -899,8 +899,8 @@
     <!-- Text shown in the contacts app while the background process updates contacts after a locale change [CHAR LIMIT=150]-->
     <string name="locale_change_in_progress">Contact list is being updated to reflect the change of language.\n\nPlease wait&#8230;</string>
 
-    <!-- The menu item to open the link/merge duplicates activity. [CHAR LIMIT=20]-->
-    <string name="menu_duplicates">Duplicates</string>
+    <!-- The menu item to open the Google contacts assistant. [CHAR LIMIT=20]-->
+    <string name="menu_assistant">Assistant</string>
 
     <!-- Open drawer content descriptions [CHAR LIMIT=40] -->
     <string name="navigation_drawer_open">Open navigation drawer</string>
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index 83b8f4d..e336e4f 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -42,11 +42,7 @@
         return new DeviceLocalAccountTypeFactory.Default(context);
     }
 
-    public static Fragment getDuplicatesFragment() {
-        return null;
-    }
-
-    public static Fragment getDuplicatesUtilFragment() {
+    public static Fragment getAssistantFragment() {
         return null;
     }
 
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index 3fc3c9d..68b9884 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -20,13 +20,13 @@
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
 import android.content.Intent;
+import android.content.res.Configuration;
 import android.graphics.Color;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.provider.ContactsContract.Intents;
 import android.support.annotation.LayoutRes;
 import android.support.design.widget.NavigationView;
-import android.support.v4.content.ContextCompat;
 import android.support.v4.view.GravityCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
@@ -49,6 +49,8 @@
 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;
@@ -69,8 +71,6 @@
 import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
 import com.android.contacts.list.MultiSelectContactsListFragment;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
 import com.android.contacts.util.SharedPreferenceUtil;
 import com.android.contactsbind.HelpUtils;
 import com.android.contactsbind.ObjectFactory;
@@ -94,7 +94,7 @@
     public enum ContactsView {
         NONE,
         ALL_CONTACTS,
-        DUPLICATES,
+        ASSISTANT,
         GROUP_VIEW,
         ACCOUNT_VIEW,
     }
@@ -223,8 +223,15 @@
         mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
         mToggle = new ContactsActionBarDrawerToggle(this, mDrawer, mToolbar,
                 R.string.navigation_drawer_open, R.string.navigation_drawer_close);
+
         mDrawer.setDrawerListener(mToggle);
-        mToggle.syncState();
+        // Set fallback handler for when drawer is disabled.
+        mToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                onBackPressed();
+            }
+        });
 
         // Set up navigation mode.
         if (savedState != null) {
@@ -246,16 +253,32 @@
         }
     }
 
+    public void setDrawerLockMode(boolean enabled) {
+        // Prevent drawer from being opened by sliding from the start of screen.
+        mDrawer.setDrawerLockMode(enabled ? DrawerLayout.LOCK_MODE_UNLOCKED
+                : DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
+
+        // Order of these statements matter.
+        // Display back button and disable drawer indicator.
+        if (enabled) {
+            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
+            mToggle.setDrawerIndicatorEnabled(true);
+        } else {
+            mToggle.setDrawerIndicatorEnabled(false);
+            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+        }
+    }
+
     private void setUpMenu() {
         final Menu menu = mNavigationView.getMenu();
 
-        if (ObjectFactory.getDuplicatesFragment() == null) {
-            menu.removeItem(R.id.nav_find_duplicates);
+        if (ObjectFactory.getAssistantFragment() == null) {
+            menu.removeItem(R.id.nav_assistant);
         } else {
-            final MenuItem findDupMenu = menu.findItem(R.id.nav_find_duplicates);
-            mIdMenuMap.put(R.id.nav_find_duplicates, findDupMenu);
-            if (isDuplicatesView()) {
-                updateMenuSelection(findDupMenu);
+            final MenuItem assistantMenu = menu.findItem(R.id.nav_assistant);
+            mIdMenuMap.put(R.id.nav_assistant, assistantMenu);
+            if (isAssistantView()) {
+                updateMenuSelection(assistantMenu);
             }
         }
 
@@ -306,6 +329,18 @@
         getWindow().setStatusBarColor(Color.TRANSPARENT);
     }
 
+    @Override
+    protected void onPostCreate(Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        mToggle.syncState();
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mToggle.onConfigurationChanged(newConfig);
+    }
+
     // Set up fragment manager to load groups and filters.
     protected void loadGroupsAndFilters() {
         final FragmentManager fragmentManager = getFragmentManager();
@@ -429,8 +464,8 @@
         return mCurrentView == ContactsView.GROUP_VIEW;
     }
 
-    protected boolean isDuplicatesView() {
-        return mCurrentView == ContactsView.DUPLICATES;
+    protected boolean isAssistantView() {
+        return mCurrentView == ContactsView.ASSISTANT;
     }
 
     protected boolean isAllContactsView() {
@@ -442,7 +477,7 @@
     }
 
     public boolean isInSecondLevel() {
-        return isGroupView() || isDuplicatesView();
+        return isGroupView() || isAssistantView();
     }
 
     protected abstract void onGroupMenuItemClicked(long groupId, String title);
@@ -556,9 +591,9 @@
                     HelpUtils.launchHelpAndFeedbackForMainScreen(ContactsDrawerActivity.this);
                 } else if (id == R.id.nav_all_contacts) {
                     switchToAllContacts();
-                } else if (id == R.id.nav_find_duplicates) {
-                    if (!isDuplicatesView()) {
-                        launchFindDuplicates();
+                } else if (id == R.id.nav_assistant) {
+                    if (!isAssistantView()) {
+                        launchAssistant();
                         updateMenuSelection(item);
                     }
                 } else if (item.getIntent() != null) {
@@ -599,7 +634,7 @@
                 mContactListFilterController, AppCompatActivity.RESULT_OK, intent);
     }
 
-    protected abstract void launchFindDuplicates();
+    protected abstract void launchAssistant();
 
     protected abstract DefaultContactBrowseListFragment getAllFragment();
 
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 5022947..1845a52 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -288,9 +288,6 @@
                         } else {
                             startActivityForResult(resultIntent, /* requestCode */ 0);
                         }
-
-                        ImplicitIntentsUtil.startActivityInApp(
-                                ContactEditorActivity.this, resultIntent);
                     }
                     finish();
                 }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 935c66f..5621c1b 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -91,9 +91,11 @@
     private static final String TAG_ALL = "contacts-all";
     private static final String TAG_UNAVAILABLE = "contacts-unavailable";
     private static final String TAG_GROUP_VIEW = "contacts-groups";
-    private static final String TAG_DUPLICATES = "contacts-duplicates";
-    private static final String TAG_SECOND_LEVEL = "second-level";
-    // Tag for DuplicatesUtilFragment.java
+    public static final String TAG_ASSISTANT = "contacts-assistant";
+    public static final String TAG_SECOND_LEVEL = "second-level";
+    public static final String TAG_THIRD_LEVEL = "third-level";
+
+    public static final String TAG_DUPLICATES = "DuplicatesFragment";
     public static final String TAG_DUPLICATES_UTIL = "DuplicatesUtilFragment";
 
     private static final String KEY_GROUP_URI = "groupUri";
@@ -626,8 +628,8 @@
             return;
         }
 
-        if (isDuplicatesView()) {
-            switchToAllContacts();
+        if (isAssistantView()) {
+            onBackPressedAssistantView();
             return;
         }
 
@@ -657,6 +659,14 @@
         }
     }
 
+    private void onBackPressedAssistantView() {
+        if (!popThirdLevel()) {
+            switchToAllContacts();
+        } else {
+            setDrawerLockMode(/* enabled */ true);
+        }
+    }
+
     // Returns true if back event is handled in this method.
     private boolean maybeHandleInAllFragment() {
         if (isAllFragmentInSelectionMode()) {
@@ -764,8 +774,8 @@
     }
 
     @Override
-    protected void launchFindDuplicates() {
-        switchView(ContactsView.DUPLICATES);
+    protected void launchAssistant() {
+        switchView(ContactsView.ASSISTANT);
     }
 
     private void switchView(ContactsView contactsView) {
@@ -779,20 +789,14 @@
             }
             transaction.replace(
                     R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
-        } else if (isDuplicatesView()) {
-            Fragment duplicatesFragment = fragmentManager.findFragmentByTag(TAG_DUPLICATES);
-            Fragment duplicatesUtilFragment =
-                    fragmentManager.findFragmentByTag(TAG_DUPLICATES_UTIL);
-            if (duplicatesFragment == null || duplicatesUtilFragment == null) {
-                duplicatesFragment = ObjectFactory.getDuplicatesFragment();
-                duplicatesUtilFragment = ObjectFactory.getDuplicatesUtilFragment();
-                duplicatesUtilFragment.setTargetFragment(duplicatesFragment, /* requestCode */ 0);
+        } else if(isAssistantView()) {
+            Fragment assistantFragment = fragmentManager.findFragmentByTag(TAG_ASSISTANT);
+            if (assistantFragment == null) {
+                assistantFragment = ObjectFactory.getAssistantFragment();
             }
-            transaction.replace(
-                    R.id.contacts_list_container, duplicatesFragment, TAG_DUPLICATES);
-            if (!duplicatesUtilFragment.isAdded()) {
-                transaction.add(duplicatesUtilFragment, TAG_DUPLICATES_UTIL);
-                resetToolBarStatusBarColor();
+            if (assistantFragment != null) {
+                transaction.replace(
+                        R.id.contacts_list_container, assistantFragment, TAG_ASSISTANT);
             }
             resetToolBarStatusBarColor();
         }
@@ -816,6 +820,11 @@
         super.switchToAllContacts();
     }
 
+    private boolean popThirdLevel() {
+        return getFragmentManager().popBackStackImmediate(
+                TAG_THIRD_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+    }
+
     private void popSecondLevel() {
         getFragmentManager().popBackStackImmediate(
                 TAG_SECOND_LEVEL, FragmentManager.POP_BACK_STACK_INCLUSIVE);
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 0542436..48e4bee 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -143,8 +143,6 @@
     private static final String KEY_IS_EDIT = "isEdit";
     private static final String KEY_EXISTING_CONTACT_READY = "existingContactDataReady";
 
-    private static final String KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY = "isReadOnly";
-
     // Phone option menus
     private static final String KEY_SEND_TO_VOICE_MAIL_STATE = "sendToVoicemailState";
     private static final String KEY_ARE_PHONE_OPTIONS_CHANGEABLE = "arePhoneOptionsChangable";
@@ -350,7 +348,6 @@
     protected RawContactDeltaList mState;
     protected int mStatus;
     protected long mRawContactIdToDisplayAlone = -1;
-    protected boolean mRawContactDisplayAloneIsReadOnly = false;
 
     // Whether to show the new contact blank form and if it's corresponding delta is ready.
     protected boolean mHasNewContact;
@@ -497,8 +494,6 @@
             // Read state from savedState. No loading involved here
             mState = savedState.<RawContactDeltaList> getParcelable(KEY_EDIT_STATE);
             mStatus = savedState.getInt(KEY_STATUS);
-            mRawContactDisplayAloneIsReadOnly = savedState.getBoolean(
-                    KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY);
 
             mHasNewContact = savedState.getBoolean(KEY_HAS_NEW_CONTACT);
             mNewContactDataReady = savedState.getBoolean(KEY_NEW_CONTACT_READY);
@@ -629,8 +624,6 @@
         outState.putBoolean(KEY_NEW_CONTACT_READY, mNewContactDataReady);
         outState.putBoolean(KEY_IS_EDIT, mIsEdit);
         outState.putBoolean(KEY_EXISTING_CONTACT_READY, mExistingContactDataReady);
-        outState.putBoolean(KEY_RAW_CONTACT_DISPLAY_ALONE_IS_READ_ONLY,
-                mRawContactDisplayAloneIsReadOnly);
 
         outState.putBoolean(KEY_IS_USER_PROFILE, mIsUserProfile);
 
@@ -780,7 +773,7 @@
         }
 
         // Save menu is invisible when there's only one read only contact in the editor.
-        saveMenu.setVisible(!mRawContactDisplayAloneIsReadOnly);
+        saveMenu.setVisible(!isEditingReadOnlyRawContact());
         if (saveMenu.isVisible()) {
             // Since we're using a custom action layout we have to manually hook up the handler.
             saveMenu.getActionView().setOnClickListener(new View.OnClickListener() {
@@ -1009,6 +1002,16 @@
     }
 
     /**
+     * @return true if the single raw contact we're looking at is read-only.
+     */
+    private boolean isEditingReadOnlyRawContact() {
+        return hasValidState() && mRawContactIdToDisplayAlone > 0
+                && !mState.getByRawContactId(mRawContactIdToDisplayAlone)
+                        .getAccountType(AccountTypeManager.getInstance(mContext))
+                                .areContactsWritable();
+    }
+
+    /**
      * Return true if there are any edits to the current contact which need to
      * be saved.
      */
@@ -1249,6 +1252,7 @@
 
         // Ensure we have some default fields (if the account type does not support a field,
         // ensureKind will not add it, so it is safe to add e.g. Event)
+        RawContactModifier.ensureKindExists(result, accountType, StructuredName.CONTENT_ITEM_TYPE);
         RawContactModifier.ensureKindExists(result, accountType, Phone.CONTENT_ITEM_TYPE);
         RawContactModifier.ensureKindExists(result, accountType, Email.CONTENT_ITEM_TYPE);
         RawContactModifier.ensureKindExists(result, accountType, Organization.CONTENT_ITEM_TYPE);
@@ -1859,13 +1863,6 @@
         getEditorActivity().changePhoto(getPhotoMode());
     }
 
-    @Override
-    public void onRawContactSelected(long rawContactId, boolean isReadOnly) {
-        mRawContactDisplayAloneIsReadOnly = isReadOnly;
-        mRawContactIdToDisplayAlone = rawContactId;
-        bindEditors();
-    }
-
     private int getPhotoMode() {
         return getContent().isWritablePhotoSet() ? PhotoActionPopup.Modes.WRITE_ABLE_PHOTO
                 : PhotoActionPopup.Modes.NO_PHOTO;
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index bbd23d4..d3c7535 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -44,7 +44,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
-import android.widget.BaseAdapter;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListPopupWindow;
@@ -62,8 +61,6 @@
 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.DeviceLocalAccountType;
-import com.android.contacts.common.model.account.SimAccountType;
 import com.android.contacts.common.model.dataitem.CustomDataItem;
 import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.common.util.AccountsListAdapter;
@@ -73,7 +70,6 @@
 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;
@@ -120,76 +116,7 @@
          * Invoked after editors have been bound for the contact.
          */
         public void onEditorsBound();
-
-        /**
-         * Invoked when a rawcontact from linked contacts is selected in editor.
-         */
-        void onRawContactSelected(long rawContactId, boolean isReadOnly);
     }
-
-    /**
-     * Used to list the account info for the given raw contacts list.
-     */
-    private static final class RawContactAccountListAdapter extends BaseAdapter {
-        private final LayoutInflater mInflater;
-        private final Context mContext;
-        private final RawContactDeltaList mRawContactDeltas;
-
-        public RawContactAccountListAdapter(Context context, RawContactDeltaList rawContactDeltas) {
-            mContext = context;
-            mRawContactDeltas = new RawContactDeltaList();
-            for (RawContactDelta rawContactDelta : rawContactDeltas) {
-                if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
-                    mRawContactDeltas.add(rawContactDelta);
-                }
-            }
-            mInflater = LayoutInflater.from(context);
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final View resultView = convertView != null ? convertView
-                    : mInflater.inflate(R.layout.account_selector_list_item, parent, false);
-
-            final RawContactDelta rawContactDelta = mRawContactDeltas.get(position);
-
-            final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
-            final AccountType accountType = rawContactDelta.getRawContactAccountType(mContext);
-            text1.setText(accountType.getDisplayLabel(mContext));
-
-            final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
-            final String accountName = rawContactDelta.getAccountName();
-            if (TextUtils.isEmpty(accountName) || accountType instanceof DeviceLocalAccountType
-                    || accountType instanceof SimAccountType) {
-                text2.setVisibility(View.GONE);
-            } else {
-                // Truncate email addresses in the middle so we don't lose the domain
-                text2.setText(accountName);
-                text2.setEllipsize(TextUtils.TruncateAt.MIDDLE);
-            }
-
-            final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
-            icon.setImageDrawable(accountType.getDisplayIcon(mContext));
-
-            return resultView;
-        }
-
-        @Override
-        public int getCount() {
-            return mRawContactDeltas.size();
-        }
-
-        @Override
-        public RawContactDelta getItem(int position) {
-            return mRawContactDeltas.get(position);
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return getItem(position).getRawContactId();
-        }
-    }
-
     /**
      * Sorts kinds roughly the same as quick contacts; we diverge in the following ways:
      * <ol>
@@ -578,7 +505,6 @@
     }
 
     private void pickRawContactDelta() {
-        // Build the kind section data list map
         vlog("parse: " + mRawContactDeltas.size() + " rawContactDelta(s)");
         for (int j = 0; j < mRawContactDeltas.size(); j++) {
             final RawContactDelta rawContactDelta = mRawContactDeltas.get(j);
@@ -618,15 +544,17 @@
 
         for (int i = 0; i < dataKindSize; i++) {
             final DataKind dataKind = dataKinds.get(i);
-            if (dataKind == null) {
-                vlog("parse: " + i + " " + dataKind.mimeType + " dropped null data kind");
+            // Skip null and un-editable fields.
+            if (dataKind == null || !dataKind.editable) {
+                vlog("parse: " + i +
+                        (dataKind == null ? " dropped null data kind"
+                        : " dropped uneditable mimetype: " + dataKind.mimeType));
                 continue;
             }
             final String mimeType = dataKind.mimeType;
 
             // Skip psuedo mime types
-            if (DataKind.PSEUDO_MIME_TYPE_DISPLAY_NAME.equals(mimeType)
-                    || DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
+            if (DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType)) {
                 vlog("parse: " + i + " " + dataKind.mimeType + " dropped pseudo type");
                 continue;
             }
@@ -777,51 +705,16 @@
                 ? EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(), account)
                 : account.getNameLabel().toString();
 
-        // Either the account header or selector should be shown, not both.
+        addAccountHeader(accountLabel);
+
+        // 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) {
-            if (accounts.size() > 1) {
-                addAccountSelector(mCurrentRawContactDelta, accountLabel);
-            } else {
-                addAccountHeader(accountLabel);
-            }
-        } else {
-            // The raw contact selector should only display linked raw contacts that can be edited
-            // in the full editor (i.e. they are not newly created raw contacts)
-            final RawContactAccountListAdapter adapter =  new RawContactAccountListAdapter(
-                    getContext(), getRawContactDeltaListForSelector(mRawContactDeltas));
-            if (adapter.getCount() > 0 && !mIsEditingReadOnlyRawContactWithNewContact) {
-                addRawContactAccountSelector(accountLabel, adapter);
-            } else {
-                addAccountHeader(accountLabel);
-            }
+        if (mHasNewContact && !mIsUserProfile && accounts.size() > 1) {
+            addAccountSelector(mCurrentRawContactDelta);
         }
     }
 
-    private RawContactDeltaList getRawContactDeltaListForSelector(
-            RawContactDeltaList rawContactDeltas) {
-        // Sort raw contacts so google accounts come first
-        Collections.sort(rawContactDeltas, new RawContactDeltaComparator(getContext()));
-
-        final RawContactDeltaList result = new RawContactDeltaList();
-        for (int i = 0; i < rawContactDeltas.size(); i++) {
-            final RawContactDelta rawContactDelta = rawContactDeltas.get(i);
-            if (rawContactDelta.isVisible() && rawContactDelta.getRawContactId() > 0) {
-                // Only add raw contacts that can be opened in the editor
-                result.add(rawContactDelta);
-            }
-        }
-        // Don't return a list of size 1 that would just open the current raw contact being edited.
-        if (result.size() == 1 && result.get(0).getRawContactAccountType(
-                getContext()).areContactsWritable()) {
-            result.clear();
-            return result;
-        }
-        return result;
-    }
-
     private void addAccountHeader(String accountLabel) {
         mAccountHeaderContainer.setVisibility(View.VISIBLE);
 
@@ -846,8 +739,10 @@
                         selectorTitle));
     }
 
-    private void addAccountSelector(final RawContactDelta rawContactDelta, CharSequence nameLabel) {
-        final View.OnClickListener onClickListener = new View.OnClickListener() {
+    private void addAccountSelector(final RawContactDelta rawContactDelta) {
+        // Add handlers for choosing another account to save to.
+        mAccountHeaderExpanderIcon.setVisibility(View.VISIBLE);
+        mAccountHeaderContainer.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
@@ -877,53 +772,7 @@
                 });
                 popup.show();
             }
-        };
-        setUpAccountSelector(nameLabel.toString(), onClickListener);
-    }
-
-    private void addRawContactAccountSelector(String nameLabel,
-            final RawContactAccountListAdapter adapter) {
-        final View.OnClickListener onClickListener = new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
-                popup.setWidth(mAccountHeaderContainer.getWidth());
-                popup.setAnchorView(mAccountHeaderContainer);
-                popup.setAdapter(adapter);
-                popup.setModal(true);
-                popup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
-                popup.setOnItemClickListener(new AdapterView.OnItemClickListener() {
-                    @Override
-                    public void onItemClick(AdapterView<?> parent, View view, int position,
-                                            long id) {
-                        UiClosables.closeQuietly(popup);
-                        final long rawContactId = adapter.getItemId(position);
-                        // Only switch if it's actually a different raw contact.
-                        if (rawContactId != mCurrentRawContactDelta.getRawContactId()
-                                && mListener != null) {
-                            final RawContactDelta rawContactDelta = adapter.getItem(position);
-                            final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
-                                    getContext());
-                            final AccountType accountType = rawContactDelta.getAccountType(
-                                    accountTypes);
-                            final boolean isReadOnly = !accountType.areContactsWritable();
-                            // Reset state.
-                            mIsExpanded = false;
-                            mListener.onRawContactSelected(rawContactId, isReadOnly);
-                        }
-                    }
-                });
-                popup.show();
-            }
-        };
-        setUpAccountSelector(nameLabel, onClickListener);
-    }
-
-    private void setUpAccountSelector(String nameLabel, OnClickListener listener) {
-        addAccountHeader(nameLabel);
-        // Add handlers for choosing another account to save to.
-        mAccountHeaderExpanderIcon.setVisibility(View.VISIBLE);
-        mAccountHeaderContainer.setOnClickListener(listener);
+        });
     }
 
     private void addPhotoView() {