reset to 049af32 with history
diff --git a/res/color/chips_dropdown_text.xml b/res/color/chips_dropdown_subtitle_text.xml
similarity index 90%
rename from res/color/chips_dropdown_text.xml
rename to res/color/chips_dropdown_subtitle_text.xml
index f6addfd..e7b0f3e 100644
--- a/res/color/chips_dropdown_text.xml
+++ b/res/color/chips_dropdown_subtitle_text.xml
@@ -17,7 +17,7 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <item android:state_activated="true" android:color="#212121"/>
+    <item android:state_activated="true" android:color="@android:color/white"/>
     <item android:color="#757575"/>
 
 </selector>
\ No newline at end of file
diff --git a/res/color/chips_dropdown_text.xml b/res/color/chips_dropdown_title_text.xml
similarity index 86%
copy from res/color/chips_dropdown_text.xml
copy to res/color/chips_dropdown_title_text.xml
index f6addfd..7c79390 100644
--- a/res/color/chips_dropdown_text.xml
+++ b/res/color/chips_dropdown_title_text.xml
@@ -17,7 +17,7 @@
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <item android:state_activated="true" android:color="#212121"/>
-    <item android:color="#757575"/>
+    <item android:state_activated="true" android:color="@android:color/white"/>
+    <item android:color="#212121"/>
 
 </selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/chip_background.9.png b/res/drawable-hdpi/chip_background.9.png
deleted file mode 100644
index 3d6d27d..0000000
--- a/res/drawable-hdpi/chip_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/chip_background_invalid.9.png b/res/drawable-hdpi/chip_background_invalid.9.png
deleted file mode 100644
index 204a3c0..0000000
--- a/res/drawable-hdpi/chip_background_invalid.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/chip_background_selected.9.png b/res/drawable-hdpi/chip_background_selected.9.png
deleted file mode 100644
index 1d9b5ee..0000000
--- a/res/drawable-hdpi/chip_background_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/chip_delete.png b/res/drawable-hdpi/chip_delete.png
deleted file mode 100644
index feccc69..0000000
--- a/res/drawable-hdpi/chip_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/chips_popup_background.9.png b/res/drawable-hdpi/chips_popup_background.9.png
deleted file mode 100644
index 060ffad..0000000
--- a/res/drawable-hdpi/chips_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_cancel_wht_24dp.png b/res/drawable-hdpi/ic_cancel_wht_24dp.png
new file mode 100644
index 0000000..7dac7b0
--- /dev/null
+++ b/res/drawable-hdpi/ic_cancel_wht_24dp.png
Binary files differ
diff --git a/res/drawable-mdpi/chip_background.9.png b/res/drawable-mdpi/chip_background.9.png
deleted file mode 100644
index 116f731..0000000
--- a/res/drawable-mdpi/chip_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/chip_background_invalid.9.png b/res/drawable-mdpi/chip_background_invalid.9.png
deleted file mode 100644
index ad349bf..0000000
--- a/res/drawable-mdpi/chip_background_invalid.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/chip_background_selected.9.png b/res/drawable-mdpi/chip_background_selected.9.png
deleted file mode 100644
index ceda86e..0000000
--- a/res/drawable-mdpi/chip_background_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/chip_delete.png b/res/drawable-mdpi/chip_delete.png
deleted file mode 100644
index 294db89..0000000
--- a/res/drawable-mdpi/chip_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/chips_popup_background.9.png b/res/drawable-mdpi/chips_popup_background.9.png
deleted file mode 100644
index 2989590..0000000
--- a/res/drawable-mdpi/chips_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_cancel_wht_24dp.png b/res/drawable-mdpi/ic_cancel_wht_24dp.png
new file mode 100644
index 0000000..48343c9
--- /dev/null
+++ b/res/drawable-mdpi/ic_cancel_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xhdpi/chip_background.9.png b/res/drawable-xhdpi/chip_background.9.png
deleted file mode 100644
index 4fe3fe4..0000000
--- a/res/drawable-xhdpi/chip_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/chip_background_invalid.9.png b/res/drawable-xhdpi/chip_background_invalid.9.png
deleted file mode 100644
index be64165..0000000
--- a/res/drawable-xhdpi/chip_background_invalid.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/chip_background_selected.9.png b/res/drawable-xhdpi/chip_background_selected.9.png
deleted file mode 100644
index 37400f3..0000000
--- a/res/drawable-xhdpi/chip_background_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/chip_delete.png b/res/drawable-xhdpi/chip_delete.png
deleted file mode 100644
index bed6d67..0000000
--- a/res/drawable-xhdpi/chip_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/chips_popup_background.9.png b/res/drawable-xhdpi/chips_popup_background.9.png
deleted file mode 100644
index f8b809a..0000000
--- a/res/drawable-xhdpi/chips_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_cancel_wht_24dp.png b/res/drawable-xhdpi/ic_cancel_wht_24dp.png
new file mode 100644
index 0000000..3dc3615
--- /dev/null
+++ b/res/drawable-xhdpi/ic_cancel_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxhdpi/chip_background.9.png b/res/drawable-xxhdpi/chip_background.9.png
deleted file mode 100644
index d8fff51..0000000
--- a/res/drawable-xxhdpi/chip_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/chip_background_invalid.9.png b/res/drawable-xxhdpi/chip_background_invalid.9.png
deleted file mode 100644
index 4ae403e..0000000
--- a/res/drawable-xxhdpi/chip_background_invalid.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/chip_background_selected.9.png b/res/drawable-xxhdpi/chip_background_selected.9.png
deleted file mode 100644
index 4e0f00e..0000000
--- a/res/drawable-xxhdpi/chip_background_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/chip_delete.png b/res/drawable-xxhdpi/chip_delete.png
deleted file mode 100644
index f6d3196..0000000
--- a/res/drawable-xxhdpi/chip_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/chips_popup_background.9.png b/res/drawable-xxhdpi/chips_popup_background.9.png
deleted file mode 100644
index bb4f281..0000000
--- a/res/drawable-xxhdpi/chips_popup_background.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_cancel_wht_24dp.png b/res/drawable-xxhdpi/ic_cancel_wht_24dp.png
new file mode 100644
index 0000000..2ba1978
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_cancel_wht_24dp.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_cancel_wht_24dp.png b/res/drawable-xxxhdpi/ic_cancel_wht_24dp.png
new file mode 100644
index 0000000..89ad2b5
--- /dev/null
+++ b/res/drawable-xxxhdpi/ic_cancel_wht_24dp.png
Binary files differ
diff --git a/res/layout/chips_autocomplete_recipient_dropdown_item.xml b/res/layout/chips_autocomplete_recipient_dropdown_item.xml
new file mode 100644
index 0000000..d15a97b
--- /dev/null
+++ b/res/layout/chips_autocomplete_recipient_dropdown_item.xml
@@ -0,0 +1,50 @@
+<?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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="@dimen/chip_dropdown_height"
+    android:orientation="vertical">
+
+    <View
+        android:id="@+id/chip_autocomplete_top_divider"
+        style="@style/ChipAutocompleteDividerStyle" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/chips_dropdown_background"
+        style="@style/ChipAutocompleteWrapperStyle">
+
+        <LinearLayout style="@style/ChipTextViewLayoutStyle">
+
+            <TextView style="@style/ChipTitleStyle" />
+
+            <TextView style="@style/ChipSubtitleStyle" />
+
+        </LinearLayout>
+
+        <com.android.ex.chips.CircularImageView style="@style/ChipEndIconStyle" />
+
+    </LinearLayout>
+
+    <View
+        android:id="@+id/chip_autocomplete_bottom_divider"
+        style="@style/ChipAutocompleteDividerStyle" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/chips_recipient_dropdown_item.xml b/res/layout/chips_recipient_dropdown_item.xml
index 52d3007..ffb019b 100644
--- a/res/layout/chips_recipient_dropdown_item.xml
+++ b/res/layout/chips_recipient_dropdown_item.xml
@@ -14,43 +14,22 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="@dimen/chip_dropdown_height"
     android:background="@drawable/chips_dropdown_background"
-    android:padding="16dp" >
+    android:padding="12dp">
 
-    <ImageView
-        android:id="@android:id/icon"
-        style="@style/ChipIconStyle"
-        android:layout_width="48dp"
-        android:layout_height="48dp"
-        android:contentDescription="@null" />
+    <com.android.ex.chips.CircularImageView style="@style/ChipStartIconStyle" />
 
-    <TextView
-        android:id="@android:id/title"
-        style="@style/ChipTitleStyle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="5dp"
-        android:ellipsize="middle"
-        android:singleLine="true"
-        android:textColor="@color/chips_dropdown_text"
-        android:textSize="14sp"
-        android:textStyle="bold" />
+    <LinearLayout style="@style/ChipTextViewLayoutStyle">
 
-    <!-- Use bottom padding instead of margin to workaround RelativeLayout bug. -->
+        <TextView style="@style/ChipTitleStyle" />
 
-    <TextView
-        android:id="@android:id/text1"
-        style="@style/ChipSubtitleStyle"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_alignParentBottom="true"
-        android:ellipsize="middle"
-        android:paddingBottom="5dp"
-        android:singleLine="true"
-        android:textColor="@color/chips_dropdown_text"
-        android:textSize="14sp" />
+        <TextView style="@style/ChipSubtitleStyle" />
 
-</RelativeLayout>
\ No newline at end of file
+    </LinearLayout>
+
+    <ImageView style="@style/ChipDeleteIconStyle" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/copy_chip_dialog_layout.xml b/res/layout/copy_chip_dialog_layout.xml
index f131626..c7cc490 100644
--- a/res/layout/copy_chip_dialog_layout.xml
+++ b/res/layout/copy_chip_dialog_layout.xml
@@ -18,6 +18,6 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:text="@string/copy_email"
-    android:id="@+android:id/button1"
+    android:id="@android:id/button1"
     android:background="@null"
     android:layout_gravity="left"/>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 3ccbcba..40d3e13 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopieer e-posadres"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopieer foonnommer"</string>
-    <string name="done" msgid="2356320650733788862">"Terugkeer"</string>
+    <string name="action_label" msgid="1318401633653605424">"Keer terug"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 0537868..abcbe41 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"የኢሜይል አድራሻ ቅዳ"</string>
     <string name="copy_number" msgid="530057841276106843">"የስልክ ቁጥር ቅዳ"</string>
-    <string name="done" msgid="2356320650733788862">"መልስ"</string>
+    <string name="action_label" msgid="1318401633653605424">"ተመለስ"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 3398641..d9894bb 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"<xliff:g id="COUNT">%1$s</xliff:g>+"</string>
     <string name="copy_email" msgid="7869435992461603532">"نسخ عنوان البريد الإلكتروني"</string>
     <string name="copy_number" msgid="530057841276106843">"نسخ رقم الهاتف"</string>
-    <string name="done" msgid="2356320650733788862">"رجوع"</string>
+    <string name="action_label" msgid="1318401633653605424">"رجوع"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 06ed49e..5a5b6cb 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+ <xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Копиране на имейл адреса"</string>
     <string name="copy_number" msgid="530057841276106843">"Копиране на телефонния номер"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-bn-rWB/strings.xml b/res/values-bn-rWB/strings.xml
new file mode 100644
index 0000000..e8dde0d
--- /dev/null
+++ b/res/values-bn-rWB/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>টি"</string>
+    <string name="copy_email" msgid="7869435992461603532">"ইমেল ঠিকানা অনুলিপি করুন"</string>
+    <string name="copy_number" msgid="530057841276106843">"ফোন নম্বর অনুলিপি করুন"</string>
+    <string name="done" msgid="2356320650733788862">"ফেরত যান"</string>
+</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 77d2196..6f72c7a 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copia l\'adreça electrònica"</string>
     <string name="copy_number" msgid="530057841276106843">"Copia el número de telèfon"</string>
-    <string name="done" msgid="2356320650733788862">"Retorn"</string>
+    <string name="action_label" msgid="1318401633653605424">"Torna"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 212d734..aa869c0 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopírovat e-mailovou adresu"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopírovat telefonní číslo"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 8196fee..f10cfe8 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopiér e-mailadressen"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopiér telefonnummeret"</string>
-    <string name="done" msgid="2356320650733788862">"Tilbage"</string>
+    <string name="action_label" msgid="1318401633653605424">"Tilbage"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index d4c2fe4..44a17fb 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"E-Mail-Adresse kopieren"</string>
     <string name="copy_number" msgid="530057841276106843">"Telefonnummer kopieren"</string>
-    <string name="done" msgid="2356320650733788862">"Eingabe"</string>
+    <string name="action_label" msgid="1318401633653605424">"Zurück"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 51b5ac3..d70d801 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Αντιγραφή διεύθυνσης ηλεκτρονικού ταχυδρομείου"</string>
     <string name="copy_number" msgid="530057841276106843">"Αντιγραφή αριθμού τηλεφώνου"</string>
-    <string name="done" msgid="2356320650733788862">"Πλήκτρο Return"</string>
+    <string name="action_label" msgid="1318401633653605424">"Επιστροφή"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 1ae784b..249e40c 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copy email address"</string>
     <string name="copy_number" msgid="530057841276106843">"Copy phone number"</string>
-    <string name="done" msgid="2356320650733788862">"Return"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 1ae784b..249e40c 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copy email address"</string>
     <string name="copy_number" msgid="530057841276106843">"Copy phone number"</string>
-    <string name="done" msgid="2356320650733788862">"Return"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c63e6cb..a069ed1 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copiar la dirección de correo"</string>
     <string name="copy_number" msgid="530057841276106843">"Copiar el número de teléfono"</string>
-    <string name="done" msgid="2356320650733788862">"Volver"</string>
+    <string name="action_label" msgid="1318401633653605424">"Volver"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 74478a8..a07b70e 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copiar dirección de correo electrónico"</string>
     <string name="copy_number" msgid="530057841276106843">"Copiar número de teléfono"</string>
-    <string name="done" msgid="2356320650733788862">"Intro"</string>
+    <string name="action_label" msgid="1318401633653605424">"Intro"</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index f32e66d..84e76ab 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopeeri e-posti aadress"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopeeri telefoninumber"</string>
-    <string name="done" msgid="2356320650733788862">"Sisestus"</string>
+    <string name="action_label" msgid="1318401633653605424">"Tagasi"</string>
 </resources>
diff --git a/res/values-eu-rPV/strings.xml b/res/values-eu-rPV/strings.xml
new file mode 100644
index 0000000..7af993d
--- /dev/null
+++ b/res/values-eu-rPV/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+    <string name="copy_email" msgid="7869435992461603532">"Kopiatu helbide elektronikoa"</string>
+    <string name="copy_number" msgid="530057841276106843">"Kopiatu telefono-zenbakia"</string>
+    <string name="done" msgid="2356320650733788862">"Itzuli"</string>
+</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index e5b32ba..0e60636 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"کپی آدرس ایمیل"</string>
     <string name="copy_number" msgid="530057841276106843">"کپی شماره تلفن"</string>
-    <string name="done" msgid="2356320650733788862">"بازگشت"</string>
+    <string name="action_label" msgid="1318401633653605424">"بازگشت"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 9893923..0598001 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -19,5 +19,6 @@
     <string name="more_string" msgid="8495478259330621990">"yli <xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopioi sähköpostiosoite"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopioi puhelinnumero"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <!-- no translation found for action_label (1318401633653605424) -->
+    <skip />
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 758f5a8..d5bfefa 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copier l\'adresse de courriel"</string>
     <string name="copy_number" msgid="530057841276106843">"Copier le numéro de téléphone"</string>
-    <string name="done" msgid="2356320650733788862">"Renvoyer"</string>
+    <string name="action_label" msgid="1318401633653605424">"Retour"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 3d13b5f..041705c 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+ <xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copier l\'adresse e-mail"</string>
     <string name="copy_number" msgid="530057841276106843">"Copier le numéro de téléphone"</string>
-    <string name="done" msgid="2356320650733788862">"Entrée"</string>
+    <string name="action_label" msgid="1318401633653605424">"Entrée"</string>
 </resources>
diff --git a/res/values-gl-rGA/strings.xml b/res/values-gl-rGA/strings.xml
new file mode 100644
index 0000000..df992d2
--- /dev/null
+++ b/res/values-gl-rGA/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+    <string name="copy_email" msgid="7869435992461603532">"Copiar enderezo de correo electrónico"</string>
+    <string name="copy_number" msgid="530057841276106843">"Copiar número de teléfono"</string>
+    <string name="done" msgid="2356320650733788862">"Volver"</string>
+</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 8368c0d..482ed9e 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"ईमेल पते की प्रतिलिपि बनाएं"</string>
     <string name="copy_number" msgid="530057841276106843">"फोन नंबर की प्रतिलिपि बनाएं"</string>
-    <string name="done" msgid="2356320650733788862">"वापस लौटें"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 65f2c12..f279b85 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopiranje e-adrese"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopiranje telefonskog broja"</string>
-    <string name="done" msgid="2356320650733788862">"Vrati"</string>
+    <string name="action_label" msgid="1318401633653605424">"Natrag"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a18f811..a04c7f2 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"E-mail cím másolása"</string>
     <string name="copy_number" msgid="530057841276106843">"Telefonszám másolása"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index ca2695c..ec395c2 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Պատճենել էլփոստի հասցեն"</string>
     <string name="copy_number" msgid="530057841276106843">"Պատճենել հեռախոսահամարը"</string>
-    <string name="done" msgid="2356320650733788862">"Վերադառնալ"</string>
+    <string name="action_label" msgid="1318401633653605424">"Վերադառնալ"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 9c1cbe6..468e62e 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Salin alamat email"</string>
     <string name="copy_number" msgid="530057841276106843">"Salin nomor telepon"</string>
-    <string name="done" msgid="2356320650733788862">"Kembali"</string>
+    <string name="action_label" msgid="1318401633653605424">"Kembali"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 3f87ec0..1ffcc15 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copia indirizzo email"</string>
     <string name="copy_number" msgid="530057841276106843">"Copia numero di telefono"</string>
-    <string name="done" msgid="2356320650733788862">"Invio"</string>
+    <string name="action_label" msgid="1318401633653605424">"Invio"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index d7be75a..29eeef6 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"העתק כתובת דוא\"ל"</string>
     <string name="copy_number" msgid="530057841276106843">"העתק מספר טלפון"</string>
-    <string name="done" msgid="2356320650733788862">"חזור"</string>
+    <string name="action_label" msgid="1318401633653605424">"חזור"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 543eb8a..10dcfb5 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"メールアドレスをコピー"</string>
     <string name="copy_number" msgid="530057841276106843">"電話番号をコピー"</string>
-    <string name="done" msgid="2356320650733788862">"戻る"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 9d24e05..47c5922 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"ელფოსტის მისამართის კოპირება"</string>
     <string name="copy_number" msgid="530057841276106843">"ტელეფონის ნომრის კოპირება"</string>
-    <string name="done" msgid="2356320650733788862">"დაბრუნება"</string>
+    <string name="action_label" msgid="1318401633653605424">"დაბრუნება"</string>
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index e51c667..d28b5c8 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"ចម្លង​អាសយដ្ឋាន​អ៊ីមែល"</string>
     <string name="copy_number" msgid="530057841276106843">"ចម្លង​លេខ​ទូរស័ព្ទ"</string>
-    <string name="done" msgid="2356320650733788862">"ត្រឡប់"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-kn-rKA/strings.xml b/res/values-kn-rKA/strings.xml
new file mode 100644
index 0000000..7befc86
--- /dev/null
+++ b/res/values-kn-rKA/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+    <string name="copy_email" msgid="7869435992461603532">"ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ನಕಲಿಸಿ"</string>
+    <string name="copy_number" msgid="530057841276106843">"ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ನಕಲಿಸಿ"</string>
+    <string name="done" msgid="2356320650733788862">"ಹಿಂತಿರುಗು"</string>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index f7884bd..f35bef4 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"<xliff:g id="COUNT">%1$s</xliff:g>명 이상"</string>
     <string name="copy_email" msgid="7869435992461603532">"이메일 주소 복사"</string>
     <string name="copy_number" msgid="530057841276106843">"전화번호 복사"</string>
-    <string name="done" msgid="2356320650733788862">"입력"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 44912af..b8bf5d6 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"ສຳເນົາທີ່ຢູ່ອີເມວ"</string>
     <string name="copy_number" msgid="530057841276106843">"ສຳເນົາເບີໂທລະສັບ"</string>
-    <string name="done" msgid="2356320650733788862">"ກັບຄືນ"</string>
+    <string name="action_label" msgid="1318401633653605424">"ກັບຄືນ"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index e85eba3..7efcf7e 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+ <xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopijuoti el. pašto adresą"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopijuoti telefono numerį"</string>
-    <string name="done" msgid="2356320650733788862">"Grįžti"</string>
+    <string name="action_label" msgid="1318401633653605424">"Grįžti"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index f06e4fc..c71e70d 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"Vairāk nekā <xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopēt e-pasta adresi"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopēt tālruņa numuru"</string>
-    <string name="done" msgid="2356320650733788862">"Iev. taust."</string>
+    <string name="action_label" msgid="1318401633653605424">"Atgriezties"</string>
 </resources>
diff --git a/res/values-ml-rKL/strings.xml b/res/values-ml-rKL/strings.xml
new file mode 100644
index 0000000..3bd6d8d
--- /dev/null
+++ b/res/values-ml-rKL/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"<xliff:g id="COUNT">%1$s</xliff:g> എണ്ണം കൂടി"</string>
+    <string name="copy_email" msgid="7869435992461603532">"ഇമെയിൽ വിലാസം പകർത്തുക"</string>
+    <string name="copy_number" msgid="530057841276106843">"ഫോൺ നമ്പർ പകർത്തുക"</string>
+    <string name="done" msgid="2356320650733788862">"മടങ്ങുക"</string>
+</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 89923c3..38d8e81 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Имэйл хаяг хуулах"</string>
     <string name="copy_number" msgid="530057841276106843">"Утасны дугаар хуулах"</string>
-    <string name="done" msgid="2356320650733788862">"Оруулах"</string>
+    <string name="action_label" msgid="1318401633653605424">"Оруулах"</string>
 </resources>
diff --git a/res/values-mr-rMH/strings.xml b/res/values-mr-rMH/strings.xml
new file mode 100644
index 0000000..f7090f5
--- /dev/null
+++ b/res/values-mr-rMH/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+    <string name="copy_email" msgid="7869435992461603532">"ईमेल पत्ता कॉपी करा"</string>
+    <string name="copy_number" msgid="530057841276106843">"फोन नंबर कॉपी करा"</string>
+    <string name="done" msgid="2356320650733788862">"परत"</string>
+</resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 76320f9..04304ed 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Salin alamat e-mel"</string>
     <string name="copy_number" msgid="530057841276106843">"Salin nombor telefon"</string>
-    <string name="done" msgid="2356320650733788862">"Kembali"</string>
+    <string name="action_label" msgid="1318401633653605424">"Kembali"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a71348e..1685653 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopiér e-postadressen"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopiér telefonnummeret"</string>
-    <string name="done" msgid="2356320650733788862">"Gå tilbake"</string>
+    <string name="action_label" msgid="1318401633653605424">"Gå tilbake"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c4289c6..62f678a 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"E-mailadres kopiëren"</string>
     <string name="copy_number" msgid="530057841276106843">"Telefoonnummer kopiëren"</string>
-    <string name="done" msgid="2356320650733788862">"Return"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 8746e48..11fad53 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopiuj adres e-mail"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopiuj numer telefonu"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index fc991b1..5deb592 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copiar endereço de email"</string>
     <string name="copy_number" msgid="530057841276106843">"Copiar número de telefone"</string>
-    <string name="done" msgid="2356320650733788862">"Voltar"</string>
+    <string name="action_label" msgid="1318401633653605424">"Voltar"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 58a23e3..7ea6cb6 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copiar endereço de e-mail"</string>
     <string name="copy_number" msgid="530057841276106843">"Copiar número de telefone"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 6bd8a36..7bb3892 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -19,5 +19,6 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Copiaţi adresa de e-mail"</string>
     <string name="copy_number" msgid="530057841276106843">"Copiaţi numărul de telefon"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <!-- no translation found for action_label (1318401633653605424) -->
+    <skip />
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 0d6a2d7..10dbe75 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"ещё <xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Скопировать адрес эл. почты"</string>
     <string name="copy_number" msgid="530057841276106843">"Скопировать номер телефона"</string>
-    <string name="done" msgid="2356320650733788862">"Назад"</string>
+    <string name="action_label" msgid="1318401633653605424">"Ввод"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 155da99..ee9a063 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopírovať e-mailovú adresu"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopírovať telefónne číslo"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index e9877dd..8fafa7e 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopiranje e-poštnega naslova"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopiranje telefonske številke"</string>
-    <string name="done" msgid="2356320650733788862">"Vračalka"</string>
+    <string name="action_label" msgid="1318401633653605424">"Vračalka"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index fd86a2e..e1ca0af 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Копирај имејл адресу"</string>
     <string name="copy_number" msgid="530057841276106843">"Копирај број телефона"</string>
-    <string name="done" msgid="2356320650733788862">"Врати"</string>
+    <string name="action_label" msgid="1318401633653605424">"Return"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index a2a9f40..3658535 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopiera e-postadress"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopiera telefonnummer"</string>
-    <string name="done" msgid="2356320650733788862">"Retur"</string>
+    <string name="action_label" msgid="1318401633653605424">"Retur"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index edea133..bed1e37 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Nakili anwani ya barua pepe"</string>
     <string name="copy_number" msgid="530057841276106843">"Nakili namba ya simu"</string>
-    <string name="done" msgid="2356320650733788862">"Inayofuata"</string>
+    <string name="action_label" msgid="1318401633653605424">"Rudi"</string>
 </resources>
diff --git a/res/values-sw600dp-land/dimen.xml b/res/values-sw600dp-land/dimen.xml
deleted file mode 100644
index dc3aadf..0000000
--- a/res/values-sw600dp-land/dimen.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="chip_padding">8dip</dimen>
-    <dimen name="chip_height">32dip</dimen>
-    <dimen name="chip_text_size">14sp</dimen>
-</resources>
\ No newline at end of file
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
index 00988a9..5ca5ad9 100644
--- a/res/values-sw600dp/styles.xml
+++ b/res/values-sw600dp/styles.xml
@@ -15,18 +15,7 @@
 -->
 <resources xmlns:tools="http://schemas.android.com/tools"
            xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <style name="RecipientEditTextView" parent="@android:attr/autoCompleteTextViewStyle">
-        <item name="android:paddingLeft">8dip</item>
-        <item name="android:paddingRight">4dip</item>
-        <item name="android:inputType">textEmailAddress|textMultiLine</item>
+    <style name="RecipientEditTextView" parent="@style/RecipientEditTextViewBase">
         <item name="android:imeOptions">actionNext</item>
-        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:dropDownVerticalOffset">0dip</item>
-        <item name="android:dropDownHorizontalOffset">-4dip</item>
-        <item name="android:textAlignment" tools:ignore="NewApi">viewStart</item>
-        <item name="android:textDirection" tools:ignore="NewApi">locale</item>
     </style>
 </resources>
diff --git a/res/values-ta-rTN/strings.xml b/res/values-ta-rTN/strings.xml
new file mode 100644
index 0000000..5573731
--- /dev/null
+++ b/res/values-ta-rTN/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+    <string name="copy_email" msgid="7869435992461603532">"மின்னஞ்சல் முகவரியை நகலெடு"</string>
+    <string name="copy_number" msgid="530057841276106843">"மொபைல் எண்ணை நகலெடு"</string>
+    <string name="done" msgid="2356320650733788862">"திரும்பு"</string>
+</resources>
diff --git a/res/values-te-rAP/strings.xml b/res/values-te-rAP/strings.xml
new file mode 100644
index 0000000..8b02426
--- /dev/null
+++ b/res/values-te-rAP/strings.xml
@@ -0,0 +1,23 @@
+<?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 xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
+    <string name="copy_email" msgid="7869435992461603532">"ఇమెయిల్ చిరునామాను కాపీ చేయండి"</string>
+    <string name="copy_number" msgid="530057841276106843">"ఫోన్ నంబర్‌ను కాపీ చేయండి"</string>
+    <string name="done" msgid="2356320650733788862">"తిరిగి వెళ్లు"</string>
+</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index fffafd0..70c3d6b 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"คัดลอกที่อยู่อีเมล"</string>
     <string name="copy_number" msgid="530057841276106843">"คัดลอกหมายเลขโทรศัพท์"</string>
-    <string name="done" msgid="2356320650733788862">"ส่งคืน"</string>
+    <string name="action_label" msgid="1318401633653605424">"เสร็จสิ้น"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index db846ca..69117f1 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopyahin ang email address"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopyahin ang numero ng telepono"</string>
-    <string name="done" msgid="2356320650733788862">"Bumalik"</string>
+    <string name="action_label" msgid="1318401633653605424">"Bumalik"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 1e099a4..b947ca4 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"E-posta adresini kopyala"</string>
     <string name="copy_number" msgid="530057841276106843">"Telefon numarasını kopyala"</string>
-    <string name="done" msgid="2356320650733788862">"Enter"</string>
+    <string name="action_label" msgid="1318401633653605424">"Enter"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 820183e..d1e3829 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Копіювати електронну адресу"</string>
     <string name="copy_number" msgid="530057841276106843">"Копіювати номер телефону"</string>
-    <string name="done" msgid="2356320650733788862">"Return"</string>
+    <string name="action_label" msgid="1318401633653605424">"Назад"</string>
 </resources>
diff --git a/res/values-v17/styles.xml b/res/values-v17/styles.xml
index 03f6ae3..fd47b97 100644
--- a/res/values-v17/styles.xml
+++ b/res/values-v17/styles.xml
@@ -14,16 +14,29 @@
     limitations under the License.
 -->
 <resources>
-    <style name="ChipTitleStyle">
-        <item name="android:layout_toEndOf">@android:id/icon</item>
+    <style name="ChipAutocompleteWrapperStyle">
+        <item name="android:paddingStart">@dimen/chip_wrapper_start_padding</item>
+        <item name="android:paddingTop">@dimen/chip_wrapper_top_padding</item>
+        <item name="android:paddingEnd">@dimen/chip_wrapper_end_padding</item>
+        <item name="android:paddingBottom">@dimen/chip_wrapper_bottom_padding</item>
     </style>
 
-    <style name="ChipSubtitleStyle">
-        <item name="android:layout_toEndOf">@android:id/icon</item>
+    <style name="ChipAutocompleteDividerStyle">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">1px</item>
+        <item name="android:background">@color/autocomplete_divider_color</item>
+        <item name="android:layout_marginStart">@dimen/chip_wrapper_start_padding</item>
     </style>
 
-    <style name="ChipIconStyle">
+    <style name="ChipStartIconStyle" parent="@style/ChipIconBaseStyle">
         <item name="android:layout_marginEnd">@dimen/chip_icon_margin_end</item>
-        <item name="android:layout_alignParentStart">true</item>
+    </style>
+
+    <style name="ChipEndIconStyle" parent="@style/ChipIconBaseStyle">
+        <item name="android:layout_marginStart">@dimen/chip_icon_margin_end</item>
+    </style>
+
+    <style name="ChipDeleteIconStyle" parent="@style/ChipDeleteIconBaseStyle">
+        <item name="android:paddingStart">8dp</item>
     </style>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f42d837..6fb8763 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Sao chép địa chỉ email"</string>
     <string name="copy_number" msgid="530057841276106843">"Sao chép số điện thoại"</string>
-    <string name="done" msgid="2356320650733788862">"Quay lại"</string>
+    <string name="action_label" msgid="1318401633653605424">"Quay lại"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 2283f75..dc4d1b7 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"复制电子邮件地址"</string>
     <string name="copy_number" msgid="530057841276106843">"复制电话号码"</string>
-    <string name="done" msgid="2356320650733788862">"上一步"</string>
+    <string name="action_label" msgid="1318401633653605424">"回车"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 31a122a..05ee1f9 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g> 人"</string>
     <string name="copy_email" msgid="7869435992461603532">"複製電郵地址"</string>
     <string name="copy_number" msgid="530057841276106843">"複製電話號碼"</string>
-    <string name="done" msgid="2356320650733788862">"Return 鍵"</string>
+    <string name="action_label" msgid="1318401633653605424">"返回"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 62d71cf..356fb0b 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g> 人"</string>
     <string name="copy_email" msgid="7869435992461603532">"複製電子郵件地址"</string>
     <string name="copy_number" msgid="530057841276106843">"複製電話號碼"</string>
-    <string name="done" msgid="2356320650733788862">"返回"</string>
+    <string name="action_label" msgid="1318401633653605424">"返回"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 9ae03ed..1d2463e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -19,5 +19,5 @@
     <string name="more_string" msgid="8495478259330621990">"+<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="copy_email" msgid="7869435992461603532">"Kopisha ikheli le-imeyli"</string>
     <string name="copy_number" msgid="530057841276106843">"Kopisha inombolo yefoni"</string>
-    <string name="done" msgid="2356320650733788862">"Buyela"</string>
+    <string name="action_label" msgid="1318401633653605424">"Buyela"</string>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 8b6347c..5bdfd0f 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -20,4 +20,10 @@
     <color name="chips_dropdown_background_activated">#4285f4</color>
     <color name="chips_dropdown_background_pressed">#ededed</color>
 
+    <color name="autocomplete_divider_color">#cccccc</color>
+
+    <color name="chip_background">#f6f6f6</color>
+    <color name="chip_background_selected">#4285f4</color>
+    <color name="chip_background_invalid">#db4437</color>
+
 </resources>
\ No newline at end of file
diff --git a/res/values/dimen.xml b/res/values/dimen.xml
index 60049df..042021d 100644
--- a/res/values/dimen.xml
+++ b/res/values/dimen.xml
@@ -15,10 +15,24 @@
 -->
 
 <resources>
-    <dimen name="chip_padding">3dip</dimen>
-    <dimen name="chip_height">36dip</dimen>
+    <!-- override default padding values, -1dp if it's not set to override -->
+    <dimen name="chip_padding_start">-1dp</dimen>
+    <dimen name="chip_padding_end">12dp</dimen>
+
+    <!-- chip -->
+    <dimen name="chip_padding">8dp</dimen>
+    <dimen name="chip_height">32dp</dimen>
     <dimen name="chip_text_size">14sp</dimen>
-    <dimen name="line_spacing_extra">4dip</dimen>
+    <dimen name="line_spacing_extra">3dp</dimen>
     <integer name="chips_max_lines">-1</integer>
-    <dimen name="chip_icon_margin_end">16dp</dimen>
+
+    <!-- dropdown -->
+    <dimen name="chip_icon_margin_end">12dp</dimen>
+    <dimen name="chip_dropdown_height">72dp</dimen>
+    <dimen name="chip_custom_divider_height">0.5dp</dimen>
+    <!-- autocomplete dropdown -->
+    <dimen name="chip_wrapper_start_padding">16dp</dimen>
+    <dimen name="chip_wrapper_top_padding">16dp</dimen>
+    <dimen name="chip_wrapper_end_padding">16dp</dimen>
+    <dimen name="chip_wrapper_bottom_padding">16dp</dimen>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3588ec3..d1c9c7f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -25,5 +25,5 @@
     <string name="copy_number">Copy phone number</string>
     <!-- Text displayed in the enter key slot when the recipientedittextview has focus.
          [CHAR LIMIT=12] -->
-    <string name="done">Return</string>
+    <string name="action_label">Return</string>
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 21ca7ed..2e7d6b4 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -15,33 +15,92 @@
 -->
 <resources xmlns:tools="http://schemas.android.com/tools"
            xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <style name="RecipientEditTextView" parent="@android:attr/autoCompleteTextViewStyle">
-        <item name="android:inputType">textEmailAddress|textMultiLine</item>
-        <item name="android:imeOptions">actionNext|flagNoFullscreen</item>
-        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
-        <item name="android:background">@null</item>
-        <item name="android:layout_height">wrap_content</item>
+    <style name="RecipientEditTextViewBase" parent="@android:attr/autoCompleteTextViewStyle">
         <item name="android:layout_width">match_parent</item>
-        <item name="android:dropDownVerticalOffset">-6dip</item>
-        <item name="android:dropDownHorizontalOffset">-16dip</item>
-        <item name="android:dropDownWidth">match_parent</item>
-        <item name="android:minHeight">48dip</item>
-        <item name="android:lineSpacingExtra">@dimen/line_spacing_extra</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:background">@null</item>
+        <item name="android:inputType">textEmailAddress|textMultiLine</item>
+        <item name="android:minHeight">@dimen/chip_height</item>
+        <item name="android:popupBackground">@null</item>
         <item name="android:textAlignment" tools:ignore="NewApi">viewStart</item>
+        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
         <item name="android:textDirection" tools:ignore="NewApi">locale</item>
-        <item name="android:popupBackground">@drawable/chips_popup_background</item>
+    </style>
+
+    <style name="RecipientEditTextView" parent="@style/RecipientEditTextViewBase">
+        <item name="android:imeOptions">actionNext|flagNoFullscreen</item>
+    </style>
+
+    <style name="ChipAutocompleteWrapperStyle">
+        <item name="android:paddingLeft">@dimen/chip_wrapper_start_padding</item>
+        <item name="android:paddingTop">@dimen/chip_wrapper_top_padding</item>
+        <item name="android:paddingRight">@dimen/chip_wrapper_end_padding</item>
+        <item name="android:paddingBottom">@dimen/chip_wrapper_bottom_padding</item>
+    </style>
+
+    <style name="ChipAutocompleteDividerStyle">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">@dimen/chip_custom_divider_height</item>
+        <item name="android:background">@color/autocomplete_divider_color</item>
+        <item name="android:layout_marginLeft">@dimen/chip_wrapper_start_padding</item>
+    </style>
+
+    <style name="ChipTextViewLayoutStyle">
+        <item name="android:layout_width">0dp</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_gravity">center_vertical</item>
+        <item name="android:layout_weight">1</item>
+        <item name="android:orientation">vertical</item>
     </style>
 
     <style name="ChipTitleStyle">
-        <item name="android:layout_toRightOf">@android:id/icon</item>
+        <item name="android:id">@android:id/title</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:ellipsize">middle</item>
+        <item name="android:singleLine">true</item>
+        <item name="android:textAlignment">viewStart</item>
+        <item name="android:textColor">@color/chips_dropdown_title_text</item>
+        <item name="android:textSize">16sp</item>
     </style>
 
     <style name="ChipSubtitleStyle">
-        <item name="android:layout_toRightOf">@android:id/icon</item>
+        <item name="android:id">@android:id/text1</item>
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:ellipsize">middle</item>
+        <item name="android:singleLine">true</item>
+        <item name="android:textAlignment">viewStart</item>
+        <item name="android:textColor">@color/chips_dropdown_subtitle_text</item>
+        <item name="android:textSize">14sp</item>
     </style>
 
-    <style name="ChipIconStyle">
+    <style name="ChipIconBaseStyle">
+        <item name="android:id">@android:id/icon</item>
+        <item name="android:layout_width">40dp</item>
+        <item name="android:layout_height">40dp</item>
+        <item name="android:layout_gravity">center_vertical</item>
+        <item name="android:contentDescription">@null</item>
+    </style>
+
+    <style name="ChipStartIconStyle" parent="@style/ChipIconBaseStyle">
         <item name="android:layout_marginRight">@dimen/chip_icon_margin_end</item>
-        <item name="android:layout_alignParentLeft">true</item>
+    </style>
+
+    <style name="ChipEndIconStyle" parent="@style/ChipIconBaseStyle">
+        <item name="android:layout_marginLeft">@dimen/chip_icon_margin_end</item>
+    </style>
+
+    <style name="ChipDeleteIconBaseStyle">
+        <item name="android:id">@android:id/icon1</item>
+        <item name="android:layout_width">36dp</item>
+        <item name="android:layout_height">48dp</item>
+        <item name="android:layout_gravity">center_vertical</item>
+        <item name="android:paddingTop">10dp</item>
+        <item name="android:paddingBottom">10dp</item>
+    </style>
+
+    <style name="ChipDeleteIconStyle" parent="@style/ChipDeleteIconBaseStyle">
+        <item name="android:paddingLeft">8dp</item>
     </style>
 </resources>
diff --git a/sample/res/values-bn-rWB/strings.xml b/sample/res/values-bn-rWB/strings.xml
new file mode 100644
index 0000000..6887ab9
--- /dev/null
+++ b/sample/res/values-bn-rWB/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"ইমেল ঠিকানাগুলি"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"ফোন নম্বরগুলি"</string>
+</resources>
diff --git a/sample/res/values-eu-rPV/strings.xml b/sample/res/values-eu-rPV/strings.xml
new file mode 100644
index 0000000..b9f2774
--- /dev/null
+++ b/sample/res/values-eu-rPV/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"Helbide elektronikoak"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"Telefono-zenbakiak"</string>
+</resources>
diff --git a/sample/res/values-gl-rGA/strings.xml b/sample/res/values-gl-rGA/strings.xml
new file mode 100644
index 0000000..4b36d96
--- /dev/null
+++ b/sample/res/values-gl-rGA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"Enderezos de correo electrónico"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"Números de teléfono"</string>
+</resources>
diff --git a/sample/res/values-kn-rKA/strings.xml b/sample/res/values-kn-rKA/strings.xml
new file mode 100644
index 0000000..2f88cdf
--- /dev/null
+++ b/sample/res/values-kn-rKA/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"ಇಮೇಲ್ ವಿಳಾಸಗಳು"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"ಫೋನ್ ಸಂಖ್ಯೆಗಳು"</string>
+</resources>
diff --git a/sample/res/values-ml-rKL/strings.xml b/sample/res/values-ml-rKL/strings.xml
new file mode 100644
index 0000000..94455c1
--- /dev/null
+++ b/sample/res/values-ml-rKL/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"ഇമെയിൽ വിലാസങ്ങൾ"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"ഫോൺ നമ്പറുകൾ"</string>
+</resources>
diff --git a/sample/res/values-mr-rMH/strings.xml b/sample/res/values-mr-rMH/strings.xml
new file mode 100644
index 0000000..60cc160
--- /dev/null
+++ b/sample/res/values-mr-rMH/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"ईमेल पत्ते"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"फोन नंबर"</string>
+</resources>
diff --git a/sample/res/values-ta-rTN/strings.xml b/sample/res/values-ta-rTN/strings.xml
new file mode 100644
index 0000000..5eabd83
--- /dev/null
+++ b/sample/res/values-ta-rTN/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"மின்னஞ்சல் முகவரிகள்"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"தொலைபேசி எண்கள்"</string>
+</resources>
diff --git a/sample/res/values-te-rAP/strings.xml b/sample/res/values-te-rAP/strings.xml
new file mode 100644
index 0000000..50612d4
--- /dev/null
+++ b/sample/res/values-te-rAP/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="email_addresses" msgid="5320415175940315400">"ఇమెయిల్ చిరునామాలు"</string>
+    <string name="phone_numbers" msgid="7836326833170390688">"ఫోన్ నంబర్‌లు"</string>
+</resources>
diff --git a/src/com/android/ex/chips/CircularImageView.java b/src/com/android/ex/chips/CircularImageView.java
new file mode 100644
index 0000000..246cc96
--- /dev/null
+++ b/src/com/android/ex/chips/CircularImageView.java
@@ -0,0 +1,114 @@
+package com.android.ex.chips;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+/**
+ * An ImageView class with a circle mask so that all images are drawn in a
+ * circle instead of a square.
+ */
+public class CircularImageView extends ImageView {
+    private static float circularImageBorder = 1f;
+
+    private final Matrix matrix;
+    private final RectF source;
+    private final RectF destination;
+    private final Paint bitmapPaint;
+    private final Paint borderPaint;
+
+    public CircularImageView(Context context) {
+        this(context, null, 0);
+    }
+
+    public CircularImageView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public CircularImageView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+
+        matrix = new Matrix();
+        source = new RectF();
+        destination = new RectF();
+
+        bitmapPaint = new Paint();
+        bitmapPaint.setAntiAlias(true);
+        bitmapPaint.setFilterBitmap(true);
+        bitmapPaint.setDither(true);
+
+        borderPaint = new Paint();
+        borderPaint.setColor(Color.TRANSPARENT);
+        borderPaint.setStyle(Paint.Style.STROKE);
+        borderPaint.setStrokeWidth(circularImageBorder);
+        borderPaint.setAntiAlias(true);
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        Drawable drawable = getDrawable();
+        BitmapDrawable bitmapDrawable = null;
+        // support state list drawable by getting the current state
+        if (drawable instanceof StateListDrawable) {
+            if (((StateListDrawable) drawable).getCurrent() != null) {
+                bitmapDrawable = (BitmapDrawable) drawable.getCurrent();
+            }
+        } else {
+            bitmapDrawable = (BitmapDrawable) drawable;
+        }
+
+        if (bitmapDrawable == null) {
+            return;
+        }
+        Bitmap bitmap = bitmapDrawable.getBitmap();
+        if (bitmap == null) {
+            return;
+        }
+
+        source.set(0, 0, bitmap.getWidth(), bitmap.getHeight());
+        destination.set(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(),
+                getHeight() - getPaddingBottom());
+
+        drawBitmapWithCircleOnCanvas(bitmap, canvas, source, destination);
+    }
+
+    /**
+     * Given the source bitmap and a canvas, draws the bitmap through a circular
+     * mask. Only draws a circle with diameter equal to the destination width.
+     *
+     * @param bitmap The source bitmap to draw.
+     * @param canvas The canvas to draw it on.
+     * @param source The source bound of the bitmap.
+     * @param dest The destination bound on the canvas.
+     */
+    public void drawBitmapWithCircleOnCanvas(Bitmap bitmap, Canvas canvas,
+                                             RectF source, RectF dest) {
+        // Draw bitmap through shader first.
+        BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
+                Shader.TileMode.CLAMP);
+        matrix.reset();
+
+        // Fit bitmap to bounds.
+        matrix.setRectToRect(source, dest, Matrix.ScaleToFit.FILL);
+
+        shader.setLocalMatrix(matrix);
+        bitmapPaint.setShader(shader);
+        canvas.drawCircle(dest.centerX(), dest.centerY(), dest.width() / 2f,
+                bitmapPaint);
+
+        // Then draw the border.
+        canvas.drawCircle(dest.centerX(), dest.centerY(),
+                dest.width() / 2f - circularImageBorder / 2, borderPaint);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/ex/chips/DropdownChipLayouter.java b/src/com/android/ex/chips/DropdownChipLayouter.java
index 6019b73..f88ea7d 100644
--- a/src/com/android/ex/chips/DropdownChipLayouter.java
+++ b/src/com/android/ex/chips/DropdownChipLayouter.java
@@ -3,7 +3,11 @@
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
+import android.graphics.drawable.StateListDrawable;
 import android.net.Uri;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.IdRes;
+import android.support.annotation.LayoutRes;
 import android.text.TextUtils;
 import android.text.util.Rfc822Tokenizer;
 import android.view.LayoutInflater;
@@ -28,8 +32,13 @@
         SINGLE_RECIPIENT
     }
 
+    public interface ChipDeleteListener {
+        void onChipDelete();
+    }
+
     private final LayoutInflater mInflater;
     private final Context mContext;
+    private ChipDeleteListener mDeleteListener;
     private Query mQuery;
 
     public DropdownChipLayouter(LayoutInflater inflater, Context context) {
@@ -41,6 +50,10 @@
         mQuery = query;
     }
 
+    public void setDeleteListener(ChipDeleteListener listener) {
+        mDeleteListener = listener;
+    }
+
 
     /**
      * Layouts and binds recipient information to the view. If convertView is null, inflates a new
@@ -57,6 +70,15 @@
      */
     public View bindView(View convertView, ViewGroup parent, RecipientEntry entry, int position,
         AdapterType type, String constraint) {
+        return bindView(convertView, parent, entry, position, type, constraint, null);
+    }
+
+    /**
+     * See {@link #bindView(View, ViewGroup, RecipientEntry, int, AdapterType, String)}
+     * @param deleteDrawable
+     */
+    public View bindView(View convertView, ViewGroup parent, RecipientEntry entry, int position,
+            AdapterType type, String constraint, StateListDrawable deleteDrawable) {
         // Default to show all the information
         String displayName = entry.getDisplayName();
         String destination = entry.getDestination();
@@ -84,6 +106,11 @@
                     displayName = null;
                     showImage = false;
                 }
+
+                // For BASE_RECIPIENT set all top dividers except for the first one to be GONE.
+                if (viewHolder.topDivider != null) {
+                    viewHolder.topDivider.setVisibility(position == 0 ? View.VISIBLE : View.GONE);
+                }
                 break;
             case RECIPIENT_ALTERNATES:
                 if (position != 0) {
@@ -101,28 +128,29 @@
         bindTextToView(destination, viewHolder.destinationView);
         bindTextToView(destinationType, viewHolder.destinationTypeView);
         bindIconToView(showImage, entry, viewHolder.imageView, type);
+        bindDrawableToDeleteView(deleteDrawable, viewHolder.deleteView);
 
         return itemView;
     }
 
     /**
-     * Returns a new view with {@link #getItemLayoutResId()}.
+     * Returns a new view with {@link #getItemLayoutResId(AdapterType)}.
      */
-    public View newView() {
-        return mInflater.inflate(getItemLayoutResId(), null);
+    public View newView(AdapterType type) {
+        return mInflater.inflate(getItemLayoutResId(type), null);
     }
 
     /**
      * Returns the same view, or inflates a new one if the given view was null.
      */
     protected View reuseOrInflateView(View convertView, ViewGroup parent, AdapterType type) {
-        int itemLayout = getItemLayoutResId();
+        int itemLayout = getItemLayoutResId(type);
         switch (type) {
             case BASE_RECIPIENT:
             case RECIPIENT_ALTERNATES:
                 break;
             case SINGLE_RECIPIENT:
-                itemLayout = getAlternateItemLayoutResId();
+                itemLayout = getAlternateItemLayoutResId(type);
                 break;
         }
         return convertView != null ? convertView : mInflater.inflate(itemLayout, parent, false);
@@ -186,6 +214,27 @@
         }
     }
 
+    protected void bindDrawableToDeleteView(final StateListDrawable drawable, ImageView view) {
+        if (view == null) {
+            return;
+        }
+        if (drawable == null) {
+            view.setVisibility(View.GONE);
+        }
+
+        view.setImageDrawable(drawable);
+        if (mDeleteListener != null) {
+            view.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    if (drawable.getCurrent() != null) {
+                        mDeleteListener.onChipDelete();
+                    }
+                }
+            });
+        }
+    }
+
     protected CharSequence getDestinationType(RecipientEntry entry) {
         return mQuery.getTypeLabel(mContext.getResources(), entry.getDestinationType(),
             entry.getDestinationLabel()).toString().toUpperCase();
@@ -198,8 +247,15 @@
      * (for photo). Ids for those should be available via {@link #getDisplayNameResId()},
      * {@link #getDestinationResId()}, and {@link #getPhotoResId()}.
      */
-    protected int getItemLayoutResId() {
-        return R.layout.chips_recipient_dropdown_item;
+    protected @LayoutRes int getItemLayoutResId(AdapterType type) {
+        switch (type) {
+            case BASE_RECIPIENT:
+                return R.layout.chips_autocomplete_recipient_dropdown_item;
+            case RECIPIENT_ALTERNATES:
+                return R.layout.chips_recipient_dropdown_item;
+            default:
+                return R.layout.chips_recipient_dropdown_item;
+        }
     }
 
     /**
@@ -209,15 +265,22 @@
      * (for photo). Ids for those should be available via {@link #getDisplayNameResId()},
      * {@link #getDestinationResId()}, and {@link #getPhotoResId()}.
      */
-    protected int getAlternateItemLayoutResId() {
-        return R.layout.chips_recipient_dropdown_item;
+    protected @LayoutRes int getAlternateItemLayoutResId(AdapterType type) {
+        switch (type) {
+            case BASE_RECIPIENT:
+                return R.layout.chips_autocomplete_recipient_dropdown_item;
+            case RECIPIENT_ALTERNATES:
+                return R.layout.chips_recipient_dropdown_item;
+            default:
+                return R.layout.chips_recipient_dropdown_item;
+        }
     }
 
     /**
      * Returns a resource ID representing an image which should be shown when ther's no relevant
      * photo is available.
      */
-    protected int getDefaultPhotoResId() {
+    protected @DrawableRes int getDefaultPhotoResId() {
         return R.drawable.ic_contact_picture;
     }
 
@@ -225,7 +288,7 @@
      * Returns an id for TextView in an item View for showing a display name. By default
      * {@link android.R.id#title} is returned.
      */
-    protected int getDisplayNameResId() {
+    protected @IdRes int getDisplayNameResId() {
         return android.R.id.title;
     }
 
@@ -234,7 +297,7 @@
      * (an email address or a phone number).
      * By default {@link android.R.id#text1} is returned.
      */
-    protected int getDestinationResId() {
+    protected @IdRes int getDestinationResId() {
         return android.R.id.text1;
     }
 
@@ -242,7 +305,7 @@
      * Returns an id for TextView in an item View for showing the type of the destination.
      * By default {@link android.R.id#text2} is returned.
      */
-    protected int getDestinationTypeResId() {
+    protected @IdRes int getDestinationTypeResId() {
         return android.R.id.text2;
     }
 
@@ -250,11 +313,17 @@
      * Returns an id for ImageView in an item View for showing photo image for a person. In default
      * {@link android.R.id#icon} is returned.
      */
-    protected int getPhotoResId() {
+    protected @IdRes int getPhotoResId() {
         return android.R.id.icon;
     }
 
     /**
+     * Returns an id for ImageView in an item View for showing the delete button. In default
+     * {@link android.R.id#icon1} is returned.
+     */
+    protected @IdRes int getDeleteResId() { return android.R.id.icon1; }
+
+    /**
      * A holder class the view. Uses the getters in DropdownChipLayouter to find the id of the
      * corresponding views.
      */
@@ -263,12 +332,16 @@
         public final TextView destinationView;
         public final TextView destinationTypeView;
         public final ImageView imageView;
+        public final ImageView deleteView;
+        public final View topDivider;
 
         public ViewHolder(View view) {
             displayNameView = (TextView) view.findViewById(getDisplayNameResId());
             destinationView = (TextView) view.findViewById(getDestinationResId());
             destinationTypeView = (TextView) view.findViewById(getDestinationTypeResId());
             imageView = (ImageView) view.findViewById(getPhotoResId());
+            deleteView = (ImageView) view.findViewById(getDeleteResId());
+            topDivider = view.findViewById(R.id.chip_autocomplete_top_divider);
         }
     }
 }
diff --git a/src/com/android/ex/chips/RecipientAlternatesAdapter.java b/src/com/android/ex/chips/RecipientAlternatesAdapter.java
index d091fa6..6569d36 100644
--- a/src/com/android/ex/chips/RecipientAlternatesAdapter.java
+++ b/src/com/android/ex/chips/RecipientAlternatesAdapter.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.database.MatrixCursor;
+import android.graphics.drawable.StateListDrawable;
 import android.net.Uri;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
@@ -63,6 +64,7 @@
     public static final int QUERY_TYPE_PHONE = 1;
     private final Long mDirectoryId;
     private DropdownChipLayouter mDropdownChipLayouter;
+    private final StateListDrawable mDeleteDrawable;
 
     private static final Map<String, String> sCorrectedPhotoUris = new HashMap<String, String>();
 
@@ -359,6 +361,13 @@
     public RecipientAlternatesAdapter(Context context, long contactId, Long directoryId,
             String lookupKey, long currentId, int queryMode, OnCheckedItemChangedListener listener,
             DropdownChipLayouter dropdownChipLayouter) {
+        this(context, contactId, directoryId, lookupKey, currentId, queryMode, listener,
+                dropdownChipLayouter, null);
+    }
+
+    public RecipientAlternatesAdapter(Context context, long contactId, Long directoryId,
+            String lookupKey, long currentId, int queryMode, OnCheckedItemChangedListener listener,
+            DropdownChipLayouter dropdownChipLayouter, StateListDrawable deleteDrawable) {
         super(context,
                 getCursorForConstruction(context, contactId, directoryId, lookupKey, queryMode), 0);
         mCurrentId = currentId;
@@ -366,6 +375,7 @@
         mCheckedItemChangedListener = listener;
 
         mDropdownChipLayouter = dropdownChipLayouter;
+        mDeleteDrawable = deleteDrawable;
     }
 
     private static Cursor getCursorForConstruction(Context context, long contactId,
@@ -568,7 +578,7 @@
         Cursor cursor = getCursor();
         cursor.moveToPosition(position);
         if (convertView == null) {
-            convertView = mDropdownChipLayouter.newView();
+            convertView = mDropdownChipLayouter.newView(AdapterType.RECIPIENT_ALTERNATES);
         }
         if (cursor.getLong(Queries.Query.DATA_ID) == mCurrentId) {
             mCheckedItemPosition = position;
@@ -586,12 +596,12 @@
         RecipientEntry entry = getRecipientEntry(position);
 
         mDropdownChipLayouter.bindView(view, null, entry, position,
-                AdapterType.RECIPIENT_ALTERNATES, null);
+                AdapterType.RECIPIENT_ALTERNATES, null, mDeleteDrawable);
     }
 
     @Override
     public View newView(Context context, Cursor cursor, ViewGroup parent) {
-        return mDropdownChipLayouter.newView();
+        return mDropdownChipLayouter.newView(AdapterType.RECIPIENT_ALTERNATES);
     }
 
     /*package*/ static interface OnCheckedItemChangedListener {
diff --git a/src/com/android/ex/chips/RecipientEditTextView.java b/src/com/android/ex/chips/RecipientEditTextView.java
index 1f735e7..1780c6e 100644
--- a/src/com/android/ex/chips/RecipientEditTextView.java
+++ b/src/com/android/ex/chips/RecipientEditTextView.java
@@ -40,6 +40,7 @@
 import android.graphics.Shader.TileMode;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.StateListDrawable;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Handler;
@@ -57,7 +58,6 @@
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.text.method.QwertyKeyListener;
-import android.text.style.ImageSpan;
 import android.text.util.Rfc822Token;
 import android.text.util.Rfc822Tokenizer;
 import android.util.AttributeSet;
@@ -91,6 +91,7 @@
 import com.android.ex.chips.RecipientAlternatesAdapter.RecipientMatchCallback;
 import com.android.ex.chips.recipientchip.DrawableRecipientChip;
 import com.android.ex.chips.recipientchip.InvisibleRecipientChip;
+import com.android.ex.chips.recipientchip.ReplacementDrawableSpan;
 import com.android.ex.chips.recipientchip.VisibleRecipientChip;
 
 import java.util.ArrayList;
@@ -110,21 +111,24 @@
 public class RecipientEditTextView extends MultiAutoCompleteTextView implements
         OnItemClickListener, Callback, RecipientAlternatesAdapter.OnCheckedItemChangedListener,
         GestureDetector.OnGestureListener, OnDismissListener, OnClickListener,
-        TextView.OnEditorActionListener {
+        TextView.OnEditorActionListener, DropdownChipLayouter.ChipDeleteListener {
+    private static final String TAG = "RecipientEditTextView";
 
     private static final char COMMIT_CHAR_COMMA = ',';
-
     private static final char COMMIT_CHAR_SEMICOLON = ';';
-
     private static final char COMMIT_CHAR_SPACE = ' ';
-
     private static final String SEPARATOR = String.valueOf(COMMIT_CHAR_COMMA)
             + String.valueOf(COMMIT_CHAR_SPACE);
 
-    private static final String TAG = "RecipientEditTextView";
+    // This pattern comes from android.util.Patterns. It has been tweaked to handle a "1" before
+    // parens, so numbers such as "1 (425) 222-2342" match.
+    private static final Pattern PHONE_PATTERN
+            = Pattern.compile(                                  // sdd = space, dot, or dash
+            "(\\+[0-9]+[\\- \\.]*)?"                    // +<digits><sdd>*
+                    + "(1?[ ]*\\([0-9]+\\)[\\- \\.]*)?"         // 1(<digits>)<sdd>*
+                    + "([0-9][0-9\\- \\.][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
 
     private static final int DISMISS = "dismiss".hashCode();
-
     private static final long DISMISS_DELAY = 300;
 
     // TODO: get correct number/ algorithm from with UX.
@@ -134,6 +138,7 @@
     private static final int MAX_CHIPS_PARSED = 50;
 
     private static int sSelectedTextColor = -1;
+    private static int sExcessTopPadding = -1;
 
     // Resources for displaying chips.
     private Drawable mChipBackground = null;
@@ -141,99 +146,69 @@
     private Drawable mInvalidChipBackground;
     private Drawable mChipBackgroundPressed;
 
+    // Possible attr overrides
     private float mChipHeight;
     private float mChipFontSize;
     private float mLineSpacingExtra;
-    private int mChipPadding;
+    private int mChipTextStartPadding;
+    private int mChipTextEndPadding;
     private final int mTextHeight;
+    private boolean mDisableDelete;
+    private int mMaxLines;
+    private int mActionBarHeight;
 
     /**
      * Enumerator for avatar position. See attr.xml for more details.
      * 0 for end, 1 for start.
      */
     private int mAvatarPosition;
-
     private static final int AVATAR_POSITION_END = 0;
-
     private static final int AVATAR_POSITION_START = 1;
 
-    /**
-     * Enumerator for image span alignment. See attr.xml for more details.
-     * 0 for bottom, 1 for baseline.
-     */
-    private int mImageSpanAlignment;
-
-    private static final int IMAGE_SPAN_ALIGNMENT_BOTTOM = 0;
-
-    private static final int IMAGE_SPAN_ALIGNMENT_BASELINE = 1;
-
-
-    private boolean mDisableDelete;
+    private Paint mWorkPaint = new Paint();
 
     private Tokenizer mTokenizer;
-
     private Validator mValidator;
+    private Handler mHandler;
+    private TextWatcher mTextWatcher;
+    private DropdownChipLayouter mDropdownChipLayouter;
+
+    private ListPopupWindow mAlternatesPopup;
+    private ListPopupWindow mAddressPopup;
+    private View mAlternatePopupAnchor;
+    private OnItemClickListener mAlternatesListener;
 
     private DrawableRecipientChip mSelectedChip;
-
     private Bitmap mDefaultContactPhoto;
-
-    private ImageSpan mMoreChip;
-
+    private ReplacementDrawableSpan mMoreChip;
     private TextView mMoreItem;
 
     // VisibleForTesting
     final ArrayList<String> mPendingChips = new ArrayList<String>();
 
-    private Handler mHandler;
 
     private int mPendingChipsCount = 0;
-
+    private int mCheckedItem;
     private boolean mNoChips = false;
-
-    private ListPopupWindow mAlternatesPopup;
-
-    private ListPopupWindow mAddressPopup;
+    private boolean mShouldShrink = true;
 
     // VisibleForTesting
     ArrayList<DrawableRecipientChip> mTemporaryRecipients;
 
     private ArrayList<DrawableRecipientChip> mRemovedSpans;
 
-    private boolean mShouldShrink = true;
-
     // Chip copy fields.
     private GestureDetector mGestureDetector;
-
     private Dialog mCopyDialog;
-
     private String mCopyAddress;
 
-    /**
-     * Used with {@link #mAlternatesPopup}. Handles clicks to alternate addresses for a
-     * selected chip.
-     */
-    private OnItemClickListener mAlternatesListener;
-
-    private int mCheckedItem;
-
-    private TextWatcher mTextWatcher;
-
     // Obtain the enclosing scroll view, if it exists, so that the view can be
     // scrolled to show the last line of chips content.
     private ScrollView mScrollView;
-
     private boolean mTriedGettingScrollView;
-
     private boolean mDragEnabled = false;
 
-    // This pattern comes from android.util.Patterns. It has been tweaked to handle a "1" before
-    // parens, so numbers such as "1 (425) 222-2342" match.
-    private static final Pattern PHONE_PATTERN
-        = Pattern.compile(                                  // sdd = space, dot, or dash
-                "(\\+[0-9]+[\\- \\.]*)?"                    // +<digits><sdd>*
-                + "(1?[ ]*\\([0-9]+\\)[\\- \\.]*)?"         // 1(<digits>)<sdd>*
-                + "([0-9][0-9\\- \\.][0-9\\- \\.]+[0-9])"); // <digit><digit|sdd>+<digit>
+    private boolean mAttachedToWindow;
 
     private final Runnable mAddTextWatcher = new Runnable() {
         @Override
@@ -265,16 +240,6 @@
 
     };
 
-    private int mMaxLines;
-
-    private static int sExcessTopPadding = -1;
-
-    private int mActionBarHeight;
-
-    private boolean mAttachedToWindow;
-
-    private DropdownChipLayouter mDropdownChipLayouter;
-
     private RecipientEntryItemClickedListener mRecipientEntryItemClickedListener;
 
     public interface RecipientEntryItemClickedListener {
@@ -295,7 +260,9 @@
             sSelectedTextColor = context.getResources().getColor(android.R.color.white);
         }
         mAlternatesPopup = new ListPopupWindow(context);
+        mAlternatesPopup.setBackgroundDrawable(null);
         mAddressPopup = new ListPopupWindow(context);
+        mAddressPopup.setBackgroundDrawable(null);
         mCopyDialog = new Dialog(context);
         mAlternatesListener = new OnItemClickListener() {
             @Override
@@ -348,6 +315,7 @@
 
     public void setDropdownChipLayouter(DropdownChipLayouter dropdownChipLayouter) {
         mDropdownChipLayouter = dropdownChipLayouter;
+        mDropdownChipLayouter.setDeleteListener(this);
     }
 
     public void setRecipientEntryItemClickedListener(RecipientEntryItemClickedListener listener) {
@@ -397,7 +365,7 @@
         }
 
         outAttrs.actionId = EditorInfo.IME_ACTION_DONE;
-        outAttrs.actionLabel = getContext().getString(R.string.done);
+        outAttrs.actionLabel = getContext().getString(R.string.action_label);
         return connection;
     }
 
@@ -636,15 +604,10 @@
     private Bitmap createSelectedChip(RecipientEntry contact, TextPaint paint) {
         paint.setColor(sSelectedTextColor);
         final ChipBitmapContainer bitmapContainer = createChipBitmap(contact, paint,
-                mChipBackgroundPressed);
+                mChipBackgroundPressed, getResources().getColor(R.color.chip_background_selected));
 
         if (bitmapContainer.loadIcon) {
-            if (mDisableDelete) {
-                // Show the avatar instead if we don't want to delete
-                loadAvatarIcon(contact, bitmapContainer, paint);
-            } else {
-                drawIcon(bitmapContainer, ((BitmapDrawable) mChipDelete).getBitmap(), paint);
-            }
+            loadAvatarIcon(contact, bitmapContainer);
         }
 
         return bitmapContainer.bitmap;
@@ -657,61 +620,68 @@
      * @param paint The paint to use to draw the bitmap.
      */
     private Bitmap createUnselectedChip(RecipientEntry contact, TextPaint paint) {
-        Drawable background = getChipBackground(contact);
         paint.setColor(getContext().getResources().getColor(android.R.color.black));
-        ChipBitmapContainer bitmapContainer = createChipBitmap(contact, paint, background);
+        ChipBitmapContainer bitmapContainer = createChipBitmap(contact, paint,
+                getChipBackground(contact), getDefaultChipBackgroundColor(contact));
 
         if (bitmapContainer.loadIcon) {
-            loadAvatarIcon(contact, bitmapContainer, paint);
+            loadAvatarIcon(contact, bitmapContainer);
         }
         return bitmapContainer.bitmap;
     }
 
     private ChipBitmapContainer createChipBitmap(RecipientEntry contact, TextPaint paint,
-            Drawable background) {
+            Drawable overrideBackgroundDrawable, int backgroundColor) {
         final ChipBitmapContainer result = new ChipBitmapContainer();
 
-        if (background == null) {
-            Log.w(TAG, "Unable to draw a background for the chip as it was never set");
-            result.bitmap = Bitmap.createBitmap(
-                    (int) mChipHeight * 2, (int) mChipHeight, Bitmap.Config.ARGB_8888);
-            result.loadIcon = false;
-            return result;
-        }
-
         Rect backgroundPadding = new Rect();
-        background.getPadding(backgroundPadding);
+        if (overrideBackgroundDrawable != null) {
+            overrideBackgroundDrawable.getPadding(backgroundPadding);
+        }
 
         // Ellipsize the text so that it takes AT MOST the entire width of the
         // autocomplete text entry area. Make sure to leave space for padding
         // on the sides.
         int height = (int) mChipHeight;
         // Since the icon is a square, it's width is equal to the maximum height it can be inside
-        // the chip.
-        int iconWidth = height - backgroundPadding.top - backgroundPadding.bottom;
+        // the chip. Don't include iconWidth for invalid contacts.
+        int iconWidth = contact.isValid() ?
+                height - backgroundPadding.top - backgroundPadding.bottom : 0;
         float[] widths = new float[1];
         paint.getTextWidths(" ", widths);
         CharSequence ellipsizedText = ellipsizeText(createChipDisplayText(contact), paint,
                 calculateAvailableWidth() - iconWidth - widths[0] - backgroundPadding.left
-                    - backgroundPadding.right);;
+                - backgroundPadding.right);
         int textWidth = (int) paint.measureText(ellipsizedText, 0, ellipsizedText.length());
 
+        // Chip start padding is the same as the end padding if there is no contact image.
+        final int startPadding = contact.isValid() ? mChipTextStartPadding : mChipTextEndPadding;
         // Make sure there is a minimum chip width so the user can ALWAYS
         // tap a chip without difficulty.
-        int width = Math.max(iconWidth * 2, textWidth + (mChipPadding * 2) + iconWidth
-                + backgroundPadding.left + backgroundPadding.right);
+        int width = Math.max(iconWidth * 2, textWidth + startPadding + mChipTextEndPadding
+                + iconWidth + backgroundPadding.left + backgroundPadding.right);
 
         // Create the background of the chip.
         result.bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
         final Canvas canvas = new Canvas(result.bitmap);
 
-        // Draw the background drawable
-        background.setBounds(0, 0, width, height);
-        background.draw(canvas);
+        // Check if the background drawable is set via attr
+        if (overrideBackgroundDrawable != null) {
+            overrideBackgroundDrawable.setBounds(0, 0, width, height);
+            overrideBackgroundDrawable.draw(canvas);
+        } else {
+            // Draw the default chip background
+            mWorkPaint.reset();
+            mWorkPaint.setColor(backgroundColor);
+            final float radius = height / 2;
+            canvas.drawRoundRect(new RectF(0, 0, width, height), radius, radius,
+                    mWorkPaint);
+        }
+
         // Draw the text vertically aligned
         int textX = shouldPositionAvatarOnRight() ?
-                mChipPadding + backgroundPadding.left :
-                width - backgroundPadding.right - mChipPadding - textWidth;
+                mChipTextEndPadding + backgroundPadding.left :
+                width - backgroundPadding.right - mChipTextEndPadding - textWidth;
         canvas.drawText(ellipsizedText, 0, ellipsizedText.length(),
                 textX, getTextYOffset(height), paint);
 
@@ -729,12 +699,12 @@
     /**
      * Helper function that draws the loaded icon bitmap into the chips bitmap
      */
-    private void drawIcon(ChipBitmapContainer bitMapResult, Bitmap icon, Paint paint) {
+    private void drawIcon(ChipBitmapContainer bitMapResult, Bitmap icon) {
         final Canvas canvas = new Canvas(bitMapResult.bitmap);
         final RectF src = new RectF(0, 0, icon.getWidth(), icon.getHeight());
         final RectF dst = new RectF(bitMapResult.left, bitMapResult.top, bitMapResult.right,
                 bitMapResult.bottom);
-        drawIconOnCanvas(icon, canvas, paint, src, dst);
+        drawIconOnCanvas(icon, canvas, src, dst);
     }
 
     /**
@@ -755,14 +725,13 @@
      * draw an icon for this recipient.
      */
     private void loadAvatarIcon(final RecipientEntry contact,
-            final ChipBitmapContainer bitmapContainer, final Paint paint) {
+            final ChipBitmapContainer bitmapContainer) {
         // Don't draw photos for recipients that have been typed in OR generated on the fly.
         long contactId = contact.getContactId();
         boolean drawPhotos = isPhoneQuery() ?
                 contactId != RecipientEntry.INVALID_CONTACT
                 : (contactId != RecipientEntry.INVALID_CONTACT
-                        && (contactId != RecipientEntry.GENERATED_CONTACT &&
-                                !TextUtils.isEmpty(contact.getDisplayName())));
+                        && contactId != RecipientEntry.GENERATED_CONTACT);
 
         if (drawPhotos) {
             final byte[] origPhotoBytes = contact.getPhotoBytes();
@@ -793,7 +762,7 @@
                     }
 
                     private void tryDrawAndInvalidate(Bitmap icon) {
-                        drawIcon(bitmapContainer, icon, paint);
+                        drawIcon(bitmapContainer, icon);
                         // The caller might originated from a background task. However, if the
                         // background task has already completed, the view might be already drawn
                         // on the UI but the callback would happen on the background thread.
@@ -814,7 +783,7 @@
             } else {
                 final Bitmap icon = BitmapFactory.decodeByteArray(origPhotoBytes, 0,
                         origPhotoBytes.length);
-                drawIcon(bitmapContainer, icon, paint);
+                drawIcon(bitmapContainer, icon);
             }
         }
     }
@@ -827,6 +796,11 @@
         return contact.isValid() ? mChipBackground : mInvalidChipBackground;
     }
 
+    private int getDefaultChipBackgroundColor(RecipientEntry contact) {
+        return getResources().getColor(contact.isValid() ? R.color.chip_background :
+                R.color.chip_background_invalid);
+    }
+
     /**
      * Given a height, returns a Y offset that will draw the text in the middle of the height.
      */
@@ -838,7 +812,7 @@
      * Draws the icon onto the canvas given the source rectangle of the bitmap and the destination
      * rectangle of the canvas.
      */
-    protected void drawIconOnCanvas(Bitmap icon, Canvas canvas, Paint paint, RectF src, RectF dst) {
+    protected void drawIconOnCanvas(Bitmap icon, Canvas canvas, RectF src, RectF dst) {
         final Matrix matrix = new Matrix();
 
         // Draw bitmap through shader first.
@@ -849,32 +823,26 @@
         matrix.setRectToRect(src, dst, Matrix.ScaleToFit.FILL);
 
         shader.setLocalMatrix(matrix);
-        paint.reset();
-        paint.setShader(shader);
-        paint.setAntiAlias(true);
-        paint.setFilterBitmap(true);
-        paint.setDither(true);
-        canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2f, paint);
+        mWorkPaint.reset();
+        mWorkPaint.setShader(shader);
+        mWorkPaint.setAntiAlias(true);
+        mWorkPaint.setFilterBitmap(true);
+        mWorkPaint.setDither(true);
+        canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2f, mWorkPaint);
 
         // Then draw the border.
         final float borderWidth = 1f;
-        paint.reset();
-        paint.setColor(Color.TRANSPARENT);
-        paint.setStyle(Style.STROKE);
-        paint.setStrokeWidth(borderWidth);
-        paint.setAntiAlias(true);
-        canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2f - borderWidth / 2, paint);
+        mWorkPaint.reset();
+        mWorkPaint.setColor(Color.TRANSPARENT);
+        mWorkPaint.setStyle(Style.STROKE);
+        mWorkPaint.setStrokeWidth(borderWidth);
+        mWorkPaint.setAntiAlias(true);
+        canvas.drawCircle(dst.centerX(), dst.centerY(), dst.width() / 2f - borderWidth / 2, mWorkPaint);
 
-        paint.reset();
+        mWorkPaint.reset();
     }
 
-    private DrawableRecipientChip constructChipSpan(RecipientEntry contact, boolean pressed)
-            throws NullPointerException {
-        if (mChipBackground == null) {
-            throw new NullPointerException(
-                    "Unable to render any chips as setChipDimensions was not called.");
-        }
-
+    private DrawableRecipientChip constructChipSpan(RecipientEntry contact, boolean pressed) {
         TextPaint paint = getPaint();
         float defaultSize = paint.getTextSize();
         int defaultColor = paint.getColor();
@@ -890,25 +858,15 @@
         // Pass the full text, un-ellipsized, to the chip.
         Drawable result = new BitmapDrawable(getResources(), tmpBitmap);
         result.setBounds(0, 0, tmpBitmap.getWidth(), tmpBitmap.getHeight());
-        DrawableRecipientChip recipientChip =
-                new VisibleRecipientChip(result, contact, getImageSpanAlignment());
+        VisibleRecipientChip recipientChip =
+                new VisibleRecipientChip(result, contact);
+        recipientChip.setExtraMargin(mLineSpacingExtra);
         // Return text to the original size.
         paint.setTextSize(defaultSize);
         paint.setColor(defaultColor);
         return recipientChip;
     }
 
-    private int getImageSpanAlignment() {
-        switch (mImageSpanAlignment) {
-            case IMAGE_SPAN_ALIGNMENT_BASELINE:
-                return ImageSpan.ALIGN_BASELINE;
-            case IMAGE_SPAN_ALIGNMENT_BOTTOM:
-                return ImageSpan.ALIGN_BOTTOM;
-            default:
-                return ImageSpan.ALIGN_BOTTOM;
-        }
-    }
-
     /**
      * Calculate the bottom of the line the chip will be located on using:
      * 1) which line the chip appears on
@@ -923,12 +881,21 @@
     }
 
     /**
+     * Calculate the offset from bottom of the EditText to top of the provided line.
+     */
+    private int calculateOffsetFromBottomToTop(int line) {
+        return -(int) ((mChipHeight + (2 * mLineSpacingExtra)) * (Math
+                .abs(getLineCount() - line)) + getPaddingBottom());
+    }
+
+    /**
      * Get the max amount of space a chip can take up. The formula takes into
      * account the width of the EditTextView, any view padding, and padding
      * that will be added to the chip.
      */
     private float calculateAvailableWidth() {
-        return getWidth() - getPaddingLeft() - getPaddingRight() - (mChipPadding * 2);
+        return getWidth() - getPaddingLeft() - getPaddingRight() - mChipTextStartPadding
+                - mChipTextEndPadding;
     }
 
 
@@ -938,21 +905,29 @@
         Resources r = getContext().getResources();
 
         mChipBackground = a.getDrawable(R.styleable.RecipientEditTextView_chipBackground);
-        if (mChipBackground == null) {
-            mChipBackground = r.getDrawable(R.drawable.chip_background);
-        }
         mChipBackgroundPressed = a
                 .getDrawable(R.styleable.RecipientEditTextView_chipBackgroundPressed);
-        if (mChipBackgroundPressed == null) {
-            mChipBackgroundPressed = r.getDrawable(R.drawable.chip_background_selected);
-        }
+        mInvalidChipBackground = a
+                .getDrawable(R.styleable.RecipientEditTextView_invalidChipBackground);
         mChipDelete = a.getDrawable(R.styleable.RecipientEditTextView_chipDelete);
         if (mChipDelete == null) {
-            mChipDelete = r.getDrawable(R.drawable.chip_delete);
+            mChipDelete = r.getDrawable(R.drawable.ic_cancel_wht_24dp);
         }
-        mChipPadding = a.getDimensionPixelSize(R.styleable.RecipientEditTextView_chipPadding, -1);
-        if (mChipPadding == -1) {
-            mChipPadding = (int) r.getDimension(R.dimen.chip_padding);
+        mChipTextStartPadding = mChipTextEndPadding
+                = a.getDimensionPixelSize(R.styleable.RecipientEditTextView_chipPadding, -1);
+        if (mChipTextStartPadding == -1) {
+            mChipTextStartPadding = mChipTextEndPadding =
+                    (int) r.getDimension(R.dimen.chip_padding);
+        }
+        // xml-overrides for each individual padding
+        // TODO: add these to attr?
+        int overridePadding = (int) r.getDimension(R.dimen.chip_padding_start);
+        if (overridePadding >= 0) {
+            mChipTextStartPadding = overridePadding;
+        }
+        overridePadding = (int) r.getDimension(R.dimen.chip_padding_end);
+        if (overridePadding >= 0) {
+            mChipTextEndPadding = overridePadding;
         }
 
         mDefaultContactPhoto = BitmapFactory.decodeResource(r, R.drawable.ic_contact_picture);
@@ -967,19 +942,12 @@
         if (mChipFontSize == -1) {
             mChipFontSize = r.getDimension(R.dimen.chip_text_size);
         }
-        mInvalidChipBackground = a
-                .getDrawable(R.styleable.RecipientEditTextView_invalidChipBackground);
-        if (mInvalidChipBackground == null) {
-            mInvalidChipBackground = r.getDrawable(R.drawable.chip_background_invalid);
-        }
         mAvatarPosition =
                 a.getInt(R.styleable.RecipientEditTextView_avatarPosition, AVATAR_POSITION_START);
-        mImageSpanAlignment = a.getInt(R.styleable.RecipientEditTextView_imageSpanAlignment,
-                IMAGE_SPAN_ALIGNMENT_BASELINE);
         mDisableDelete = a.getBoolean(R.styleable.RecipientEditTextView_disableDelete, false);
 
-        mLineSpacingExtra =  r.getDimension(R.dimen.line_spacing_extra);
         mMaxLines = r.getInteger(R.integer.chips_max_lines);
+        mLineSpacingExtra = r.getDimensionPixelOffset(R.dimen.line_spacing_extra);
         TypedValue tv = new TypedValue();
         if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
             mActionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources()
@@ -1659,7 +1627,7 @@
                         commitDefault();
                         mSelectedChip = selectChip(currentChip);
                     } else {
-                        onClick(mSelectedChip, offset, x, y);
+                        onClick(mSelectedChip);
                     }
                 }
                 chipWasSelected = true;
@@ -1681,7 +1649,7 @@
     }
 
     private void showAlternates(final DrawableRecipientChip currentChip,
-            final ListPopupWindow alternatesPopup, final int width) {
+            final ListPopupWindow alternatesPopup) {
         new AsyncTask<Void, Void, ListAdapter>() {
             @Override
             protected ListAdapter doInBackground(final Void... params) {
@@ -1694,18 +1662,13 @@
                     return;
                 }
                 int line = getLayout().getLineForOffset(getChipStart(currentChip));
-                int bottom;
-                if (line == getLineCount() -1) {
-                    bottom = 0;
-                } else {
-                    bottom = -(int) ((mChipHeight + (2 * mLineSpacingExtra)) * (Math
-                            .abs(getLineCount() - 1 - line)));
-                }
+                int bottomOffset = calculateOffsetFromBottomToTop(line);
+
                 // Align the alternates popup with the left side of the View,
                 // regardless of the position of the chip tapped.
-                alternatesPopup.setWidth(width);
-                alternatesPopup.setAnchorView(RecipientEditTextView.this);
-                alternatesPopup.setVerticalOffset(bottom);
+                alternatesPopup.setAnchorView((mAlternatePopupAnchor != null) ?
+                        mAlternatePopupAnchor : RecipientEditTextView.this);
+                alternatesPopup.setVerticalOffset(bottomOffset);
                 alternatesPopup.setAdapter(result);
                 alternatesPopup.setOnItemClickListener(mAlternatesListener);
                 // Clear the checked item.
@@ -1728,12 +1691,23 @@
     private ListAdapter createAlternatesAdapter(DrawableRecipientChip chip) {
         return new RecipientAlternatesAdapter(getContext(), chip.getContactId(),
                 chip.getDirectoryId(), chip.getLookupKey(), chip.getDataId(),
-                getAdapter().getQueryType(), this, mDropdownChipLayouter);
+                getAdapter().getQueryType(), this, mDropdownChipLayouter,
+                constructStateListDeleteDrawable());
     }
 
     private ListAdapter createSingleAddressAdapter(DrawableRecipientChip currentChip) {
         return new SingleRecipientArrayAdapter(getContext(), currentChip.getEntry(),
-                mDropdownChipLayouter);
+                mDropdownChipLayouter, constructStateListDeleteDrawable());
+    }
+
+    private StateListDrawable constructStateListDeleteDrawable() {
+        // Construct the StateListDrawable from deleteDrawable
+        StateListDrawable deleteDrawable = new StateListDrawable();
+        if (!mDisableDelete) {
+            deleteDrawable.addState(new int[]{android.R.attr.state_activated}, mChipDelete);
+        }
+        deleteDrawable.addState(new int[0], null);
+        return deleteDrawable;
     }
 
     @Override
@@ -1856,14 +1830,13 @@
     }
 
     private CharSequence createChip(RecipientEntry entry, boolean pressed) {
-        String displayText = createAddressText(entry);
+        final String displayText = createAddressText(entry);
         if (TextUtils.isEmpty(displayText)) {
             return null;
         }
-        SpannableString chipText = null;
         // Always leave a blank space at the end of a chip.
-        int textLength = displayText.length() - 1;
-        chipText = new SpannableString(displayText);
+        final int textLength = displayText.length() - 1;
+        final SpannableString  chipText = new SpannableString(displayText);
         if (!mNoChips) {
             try {
                 DrawableRecipientChip chip = constructChipSpan(entry, pressed);
@@ -1994,7 +1967,7 @@
     }
 
     // Visible for testing.
-    /* package */ImageSpan getMoreChip() {
+    /* package */ReplacementDrawableSpan getMoreChip() {
         MoreImageSpan[] moreSpans = getSpannable().getSpans(0, getText().length(),
                 MoreImageSpan.class);
         return moreSpans != null && moreSpans.length > 0 ? moreSpans[0] : null;
@@ -2002,12 +1975,12 @@
 
     private MoreImageSpan createMoreSpan(int count) {
         String moreText = String.format(mMoreItem.getText().toString(), count);
-        TextPaint morePaint = new TextPaint(getPaint());
-        morePaint.setTextSize(mMoreItem.getTextSize());
-        morePaint.setColor(mMoreItem.getCurrentTextColor());
-        int width = (int)morePaint.measureText(moreText) + mMoreItem.getPaddingLeft()
+        mWorkPaint.set(getPaint());
+        mWorkPaint.setTextSize(mMoreItem.getTextSize());
+        mWorkPaint.setColor(mMoreItem.getCurrentTextColor());
+        final int width = (int) mWorkPaint.measureText(moreText) + mMoreItem.getPaddingLeft()
                 + mMoreItem.getPaddingRight();
-        int height = getLineHeight();
+        final int height = (int) mChipHeight;
         Bitmap drawable = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
         Canvas canvas = new Canvas(drawable);
         int adjustedHeight = height;
@@ -2015,7 +1988,7 @@
         if (layout != null) {
             adjustedHeight -= layout.getLineDescent(0);
         }
-        canvas.drawText(moreText, 0, moreText.length(), 0, adjustedHeight, morePaint);
+        canvas.drawText(moreText, 0, moreText.length(), 0, adjustedHeight, mWorkPaint);
 
         Drawable result = new BitmapDrawable(getResources(), drawable);
         result.setBounds(0, 0, width, height);
@@ -2071,7 +2044,8 @@
         if (!mShouldShrink) {
             return;
         }
-        ImageSpan[] tempMore = getSpannable().getSpans(0, getText().length(), MoreImageSpan.class);
+        ReplacementDrawableSpan[] tempMore = getSpannable().getSpans(0, getText().length(),
+                MoreImageSpan.class);
         if (tempMore.length > 0) {
             getSpannable().removeSpan(tempMore[0]);
         }
@@ -2219,9 +2193,9 @@
                 scrollLineIntoView(getLayout().getLineForOffset(getChipStart(newChip)));
             }
             if (showAddress) {
-                showAddress(newChip, mAddressPopup, getWidth());
+                showAddress(newChip, mAddressPopup);
             } else {
-                showAlternates(newChip, mAlternatesPopup, getWidth());
+                showAlternates(newChip, mAlternatesPopup);
             }
             setCursorVisible(false);
             return newChip;
@@ -2234,18 +2208,16 @@
                 || (!isPhoneQuery() && contactId == RecipientEntry.GENERATED_CONTACT);
     }
 
-    private void showAddress(final DrawableRecipientChip currentChip, final ListPopupWindow popup,
-            int width) {
+    private void showAddress(final DrawableRecipientChip currentChip, final ListPopupWindow popup) {
         if (!mAttachedToWindow) {
             return;
         }
         int line = getLayout().getLineForOffset(getChipStart(currentChip));
-        int bottom = calculateOffsetFromBottom(line);
+        int bottomOffset = calculateOffsetFromBottomToTop(line);
         // Align the alternates popup with the left side of the View,
         // regardless of the position of the chip tapped.
-        popup.setWidth(width);
-        popup.setAnchorView(this);
-        popup.setVerticalOffset(bottom);
+        popup.setAnchorView((mAlternatePopupAnchor != null) ? mAlternatePopupAnchor : this);
+        popup.setVerticalOffset(bottomOffset);
         popup.setAdapter(createSingleAddressAdapter(currentChip));
         popup.setOnItemClickListener(new OnItemClickListener() {
             @Override
@@ -2294,26 +2266,13 @@
         }
     }
 
-    /**
-     * Return whether a touch event was inside the delete target of
-     * a selected chip. It is in the delete target if:
-     * 1) the x and y points of the event are within the
-     * delete assset.
-     * 2) the point tapped would have caused a cursor to appear
-     * right after the selected chip.
-     * @return boolean
-     */
-    private boolean isInDelete(DrawableRecipientChip chip, int offset, float x, float y) {
-        // Figure out the bounds of this chip and whether or not
-        // the user clicked in the X portion.
-        // TODO: Should x and y be used, or removed?
-        if (mDisableDelete) {
-            return false;
+    @Override
+    public void onChipDelete() {
+        if (mSelectedChip != null) {
+            removeChip(mSelectedChip);
         }
-
-        return chip.isSelected() &&
-                ((mAvatarPosition == AVATAR_POSITION_END && offset == getChipEnd(chip)) ||
-                (mAvatarPosition != AVATAR_POSITION_END && offset == getChipStart(chip)));
+        mAddressPopup.dismiss();
+        mAlternatesPopup.dismiss();
     }
 
     /**
@@ -2387,13 +2346,9 @@
      * event, see if that event was in the delete icon. If so, delete it.
      * Otherwise, unselect the chip.
      */
-    public void onClick(DrawableRecipientChip chip, int offset, float x, float y) {
+    public void onClick(DrawableRecipientChip chip) {
         if (chip.isSelected()) {
-            if (isInDelete(chip, offset, x, y)) {
-                removeChip(chip);
-            } else {
-                clearSelectedChip();
-            }
+            clearSelectedChip();
         }
     }
 
@@ -2541,23 +2496,47 @@
     /**
      * Handles pasting a {@link ClipData} to this {@link RecipientEditTextView}.
      */
-    private void handlePasteClip(ClipData clip) {
+    // Visible for testing.
+    void handlePasteClip(ClipData clip) {
+        if (clip == null) {
+            // Do nothing.
+            return;
+        }
+
+        final ClipDescription clipDesc = clip.getDescription();
+        boolean containsSupportedType = clipDesc.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) ||
+                clipDesc.hasMimeType(ClipDescription.MIMETYPE_TEXT_HTML);
+        if (!containsSupportedType) {
+            return;
+        }
+
         removeTextChangedListener(mTextWatcher);
 
-        if (clip != null && clip.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)){
-            for (int i = 0; i < clip.getItemCount(); i++) {
-                CharSequence paste = clip.getItemAt(i).getText();
-                if (paste != null) {
-                    int start = getSelectionStart();
-                    int end = getSelectionEnd();
-                    Editable editable = getText();
-                    if (start >= 0 && end >= 0 && start != end) {
-                        editable.append(paste, start, end);
-                    } else {
-                        editable.insert(end, paste);
-                    }
-                    handlePasteAndReplace();
+        final ClipDescription clipDescription = clip.getDescription();
+        for (int i = 0; i < clip.getItemCount(); i++) {
+            final String mimeType = clipDescription.getMimeType(i);
+            final boolean supportedType = ClipDescription.MIMETYPE_TEXT_PLAIN.equals(mimeType) ||
+                    ClipDescription.MIMETYPE_TEXT_HTML.equals(mimeType);
+            if (!supportedType) {
+                // Only plain text and html can be pasted.
+                continue;
+            }
+
+            final CharSequence pastedItem = clip.getItemAt(i).getText();
+            if (!TextUtils.isEmpty(pastedItem)) {
+                final Editable editable = getText();
+                final int start = getSelectionStart();
+                final int end = getSelectionEnd();
+                if (start < 0 || end < 1) {
+                    // No selection.
+                    editable.append(pastedItem);
+                } else if (start == end) {
+                    // Insert at position.
+                    editable.insert(start, pastedItem);
+                } else {
+                    editable.append(pastedItem, start, end);
                 }
+                handlePasteAndReplace();
             }
         }
 
@@ -2884,9 +2863,10 @@
      * MoreImageSpan is a simple class created for tracking the existence of a
      * more chip across activity restarts/
      */
-    private class MoreImageSpan extends ImageSpan {
+    private class MoreImageSpan extends ReplacementDrawableSpan {
         public MoreImageSpan(Drawable b) {
             super(b);
+            setExtraMargin(mLineSpacingExtra);
         }
     }
 
@@ -3124,6 +3104,10 @@
         }
     }
 
+    public void setAlternatePopupAnchor(View v) {
+        mAlternatePopupAnchor = v;
+    }
+
     private static class ChipBitmapContainer {
         Bitmap bitmap;
         // information used for positioning the loaded icon
diff --git a/src/com/android/ex/chips/SingleRecipientArrayAdapter.java b/src/com/android/ex/chips/SingleRecipientArrayAdapter.java
index 985953f..f08746e 100644
--- a/src/com/android/ex/chips/SingleRecipientArrayAdapter.java
+++ b/src/com/android/ex/chips/SingleRecipientArrayAdapter.java
@@ -17,6 +17,7 @@
 package com.android.ex.chips;
 
 import android.content.Context;
+import android.graphics.drawable.StateListDrawable;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
@@ -25,19 +26,26 @@
 
 class SingleRecipientArrayAdapter extends ArrayAdapter<RecipientEntry> {
     private final DropdownChipLayouter mDropdownChipLayouter;
+    private final StateListDrawable mDeleteDrawable;
 
     public SingleRecipientArrayAdapter(Context context, RecipientEntry entry,
-            DropdownChipLayouter dropdownChipLayouter) {
-        super(context, dropdownChipLayouter.getAlternateItemLayoutResId(), new RecipientEntry[] {
-            entry
-        });
+        DropdownChipLayouter dropdownChipLayouter) {
+        this(context, entry, dropdownChipLayouter, null);
+    }
+
+    public SingleRecipientArrayAdapter(Context context, RecipientEntry entry,
+            DropdownChipLayouter dropdownChipLayouter, StateListDrawable deleteDrawable) {
+        super(context,
+                dropdownChipLayouter.getAlternateItemLayoutResId(AdapterType.SINGLE_RECIPIENT),
+                new RecipientEntry[] { entry });
 
         mDropdownChipLayouter = dropdownChipLayouter;
+        mDeleteDrawable = deleteDrawable;
     }
 
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         return mDropdownChipLayouter.bindView(convertView, parent, getItem(position), position,
-                AdapterType.SINGLE_RECIPIENT, null);
+                AdapterType.SINGLE_RECIPIENT, null, mDeleteDrawable);
     }
 }
diff --git a/src/com/android/ex/chips/recipientchip/ReplacementDrawableSpan.java b/src/com/android/ex/chips/recipientchip/ReplacementDrawableSpan.java
new file mode 100644
index 0000000..f99b25b
--- /dev/null
+++ b/src/com/android/ex/chips/recipientchip/ReplacementDrawableSpan.java
@@ -0,0 +1,62 @@
+package com.android.ex.chips.recipientchip;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.text.style.ReplacementSpan;
+
+/**
+ * ReplacementSpan that properly draws the drawable that is centered around the text
+ * without changing the default text size or layout.
+ */
+public class ReplacementDrawableSpan extends ReplacementSpan {
+    protected Drawable mDrawable;
+    private final Paint mWorkPaint = new Paint();
+    private float mExtraMargin;
+
+    public ReplacementDrawableSpan(Drawable drawable) {
+        super();
+        mDrawable = drawable;
+    }
+
+    public void setExtraMargin(float margin) {
+        mExtraMargin = margin;
+    }
+
+    private void setupFontMetrics(Paint.FontMetricsInt fm, Paint paint) {
+        mWorkPaint.set(paint);
+        if (fm != null) {
+            mWorkPaint.getFontMetricsInt(fm);
+
+            final Rect bounds = getBounds();
+            final int textHeight = fm.descent - fm.ascent;
+            final int halfMargin = (int) mExtraMargin / 2;
+            fm.ascent = Math.min(fm.top, fm.top + (textHeight - bounds.bottom) / 2) - halfMargin;
+            fm.descent = Math.max(fm.bottom, fm.bottom + (bounds.bottom - textHeight) / 2)
+                    + halfMargin;
+            fm.top = fm.ascent;
+            fm.bottom = fm.descent;
+        }
+    }
+
+    @Override
+    public int getSize(Paint paint, CharSequence text, int i, int i2, Paint.FontMetricsInt fm) {
+        setupFontMetrics(fm, paint);
+        return getBounds().right;
+    }
+
+    @Override
+    public void draw(Canvas canvas, CharSequence charSequence, int start, int end, float x, int top,
+                     int y, int bottom, Paint paint) {
+        canvas.save();
+        int transY = (bottom - mDrawable.getBounds().bottom + top) / 2;
+        canvas.translate(x, transY);
+        mDrawable.draw(canvas);
+        canvas.restore();
+    }
+
+    protected Rect getBounds() {
+        return mDrawable.getBounds();
+    }
+}
diff --git a/src/com/android/ex/chips/recipientchip/VisibleRecipientChip.java b/src/com/android/ex/chips/recipientchip/VisibleRecipientChip.java
index 6d3d27d..23a5a80 100644
--- a/src/com/android/ex/chips/recipientchip/VisibleRecipientChip.java
+++ b/src/com/android/ex/chips/recipientchip/VisibleRecipientChip.java
@@ -19,26 +19,18 @@
 import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
-import android.text.style.DynamicDrawableSpan;
-import android.text.style.ImageSpan;
 
 import com.android.ex.chips.RecipientEntry;
 
 /**
- * VisibleRecipientChip defines an ImageSpan that contains information relevant to a
+ * VisibleRecipientChip defines a ReplacementSpan that contains information relevant to a
  * particular recipient and renders a background asset to go with it.
  */
-public class VisibleRecipientChip extends ImageSpan implements DrawableRecipientChip {
+public class VisibleRecipientChip extends ReplacementDrawableSpan implements DrawableRecipientChip {
     private final SimpleRecipientChip mDelegate;
 
     public VisibleRecipientChip(final Drawable drawable, final RecipientEntry entry) {
-        this(drawable, entry, DynamicDrawableSpan.ALIGN_BOTTOM);
-    }
-
-    public VisibleRecipientChip(final Drawable drawable, final RecipientEntry entry,
-            final int verticalAlignment) {
-        super(drawable, verticalAlignment);
-
+        super(drawable);
         mDelegate = new SimpleRecipientChip(entry);
     }
 
@@ -99,12 +91,12 @@
 
     @Override
     public Rect getBounds() {
-        return getDrawable().getBounds();
+        return super.getBounds();
     }
 
     @Override
     public void draw(final Canvas canvas) {
-        getDrawable().draw(canvas);
+        mDrawable.draw(canvas);
     }
 
     @Override
diff --git a/tests/src/com/android/ex/chips/ChipsTest.java b/tests/src/com/android/ex/chips/ChipsTest.java
index 9116e26..6e48677 100644
--- a/tests/src/com/android/ex/chips/ChipsTest.java
+++ b/tests/src/com/android/ex/chips/ChipsTest.java
@@ -16,22 +16,22 @@
 
 package com.android.ex.chips;
 
+import android.annotation.TargetApi;
+import android.content.ClipData;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.text.Editable;
 import android.text.SpannableStringBuilder;
-import android.text.style.ImageSpan;
 import android.text.util.Rfc822Tokenizer;
 import android.widget.TextView;
 
-import com.android.ex.chips.BaseRecipientAdapter;
-import com.android.ex.chips.RecipientEditTextView;
-import com.android.ex.chips.RecipientEntry;
 import com.android.ex.chips.recipientchip.DrawableRecipientChip;
+import com.android.ex.chips.recipientchip.ReplacementDrawableSpan;
 import com.android.ex.chips.recipientchip.VisibleRecipientChip;
 
 import java.util.regex.Pattern;
@@ -253,7 +253,7 @@
         int thirdStart = mEditable.toString().indexOf(third);
         int thirdEnd = thirdStart + third.trim().length();
         view.createMoreChipPlainText();
-        ImageSpan moreChip = view.getMoreChip();
+        ReplacementDrawableSpan moreChip = view.getMoreChip();
         assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
         assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1);
     }
@@ -280,7 +280,7 @@
         assertEquals(view.countTokens(view.getText()), 100);
         view.handlePendingChips();
         view.createMoreChip();
-        ImageSpan moreChip = view.getMoreChip();
+        ReplacementDrawableSpan moreChip = view.getMoreChip();
         // We show 2 chips then place a more chip.
         int secondStart = view.getText().toString().indexOf(
                 (String) mTokenizer.terminateToken(RecipientEditTextView.CHIP_LIMIT + ""));
@@ -317,7 +317,7 @@
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
         // Find the more chip.
-        ImageSpan moreChip = view.getMoreChip();
+        ReplacementDrawableSpan moreChip = view.getMoreChip();
         assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
         assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1);
 
@@ -407,7 +407,7 @@
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 10]), firstStart);
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 9]), secondStart);
         // Find the more chip.
-        ImageSpan moreChip = view.getMoreChip();
+        ReplacementDrawableSpan moreChip = view.getMoreChip();
         assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
         assertEquals(mEditable.getSpanEnd(moreChip), tenthEnd + 1);
 
@@ -457,7 +457,7 @@
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), firstStart);
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 2]), secondStart);
         // Find the more chip.
-        ImageSpan moreChip = view.getMoreChip();
+        ReplacementDrawableSpan moreChip = view.getMoreChip();
         assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
         assertEquals(mEditable.getSpanEnd(moreChip), thirdEnd + 1);
 
@@ -501,7 +501,7 @@
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 4]), firstStart);
         assertEquals(mEditable.getSpanStart(mMockRecips[mMockRecips.length - 3]), secondStart);
         // Find the more chip.
-        ImageSpan moreChip = view.getMoreChip();
+        ReplacementDrawableSpan moreChip = view.getMoreChip();
         assertEquals(mEditable.getSpanStart(moreChip), thirdStart);
         assertEquals(mEditable.getSpanEnd(moreChip), thirdNextEnd + 1);
 
@@ -844,6 +844,34 @@
         assertEquals(mEditable.toString(), "<user1>, <user2@user.com>, ");
     }
 
+    @TargetApi(16)
+    public void testHandlePasteClip() {
+        MockRecipientEditTextView view = createViewForTesting();
+
+        ClipData clipData = null;
+        mEditable = new SpannableStringBuilder();
+        view.handlePasteClip(clipData);
+        assertEquals("", view.getText().toString());
+
+        clipData = ClipData.newPlainText("user label", "<foo@example.com>");
+        mEditable = new SpannableStringBuilder();
+        view.handlePasteClip(clipData);
+        assertEquals("<foo@example.com>", view.getText().toString());
+
+        clipData = ClipData.newHtmlText("user label",
+                "<bar@example.com>", "<a href=\"mailto:bar@example.com\">email</a>");
+        mEditable = new SpannableStringBuilder();
+        view.handlePasteClip(clipData);
+        assertEquals("<bar@example.com>", view.getText().toString());
+
+        ClipData.Item clipImageData = new ClipData.Item(Uri.parse("content://my/image"));
+        clipData = new ClipData("user label", new String[]{"image/jpeg"}, clipImageData);
+        mEditable = new SpannableStringBuilder();
+        view.handlePasteClip(clipData);
+        assertEquals("", view.getText().toString()
+        );
+    }
+
     public void testGetPastTerminators() {
         MockRecipientEditTextView view = createViewForTesting();
         view.setMoreItem(createTestMoreItem());