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());