diff options
author | Régis Décamps <regisd@google.com> | 2014-08-15 08:11:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-08-15 04:32:23 +0000 |
commit | c609278f2650f8d74ff9c2e3b1546813560438d4 (patch) | |
tree | 307d4dcac0e7c30a5ce9e44383f0aa597c717a8e | |
parent | 5d32b5b6db2b0ef1da94b58aef98597f09917c1b (diff) | |
parent | 219cbfbd7806b17ce10ba2cfb3f0cd45d167d46c (diff) | |
download | android_frameworks_opt_chips-c609278f2650f8d74ff9c2e3b1546813560438d4.tar.gz android_frameworks_opt_chips-c609278f2650f8d74ff9c2e3b1546813560438d4.tar.bz2 android_frameworks_opt_chips-c609278f2650f8d74ff9c2e3b1546813560438d4.zip |
Merge "Allow to paste text or html into a chip" into ub-chips-cranbrook
-rw-r--r-- | src/com/android/ex/chips/RecipientEditTextView.java | 52 | ||||
-rw-r--r-- | tests/src/com/android/ex/chips/ChipsTest.java | 31 |
2 files changed, 69 insertions, 14 deletions
diff --git a/src/com/android/ex/chips/RecipientEditTextView.java b/src/com/android/ex/chips/RecipientEditTextView.java index 085182e..fa9d462 100644 --- a/src/com/android/ex/chips/RecipientEditTextView.java +++ b/src/com/android/ex/chips/RecipientEditTextView.java @@ -2516,23 +2516,47 @@ public class RecipientEditTextView extends MultiAutoCompleteTextView implements /** * 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(); } } diff --git a/tests/src/com/android/ex/chips/ChipsTest.java b/tests/src/com/android/ex/chips/ChipsTest.java index 9116e26..1528d66 100644 --- a/tests/src/com/android/ex/chips/ChipsTest.java +++ b/tests/src/com/android/ex/chips/ChipsTest.java @@ -16,10 +16,13 @@ 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; @@ -844,6 +847,34 @@ public class ChipsTest extends AndroidTestCase { 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()); |