diff options
author | Ruijie Bai <rbai@codeaurora.org> | 2016-05-25 15:21:22 +0800 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-09-01 01:45:32 -0700 |
commit | fe2b8c363c0c79f151419df197afad1dfe318718 (patch) | |
tree | 12ed479f28989da6f34a4dfb8b7c2a24fc15b2ae | |
parent | 1df2ea69cf09d6a187d65b497317b01bfb04e01d (diff) | |
download | android_frameworks_opt_chips-cm-14.0.tar.gz android_frameworks_opt_chips-cm-14.0.tar.bz2 android_frameworks_opt_chips-cm-14.0.zip |
Fix couldn't delete all selected recipientscm-14.0
Rootcase:
Haven't delete remove all span and text.
Solution:
Get all span and remove, delete all text which in the
editable.
Change-Id: I78cf71a6659edcf3be01c3b282a4d29bef791fb1
CRs-Fixed: 1020001
-rw-r--r-- | src/com/android/ex/chips/RecipientEditTextView.java | 98 |
1 files changed, 83 insertions, 15 deletions
diff --git a/src/com/android/ex/chips/RecipientEditTextView.java b/src/com/android/ex/chips/RecipientEditTextView.java index 7af4868..ab9a804 100644 --- a/src/com/android/ex/chips/RecipientEditTextView.java +++ b/src/com/android/ex/chips/RecipientEditTextView.java @@ -208,6 +208,23 @@ public class RecipientEditTextView extends MultiAutoCompleteTextView implements private boolean mAttachedToWindow; + public enum ScreenOrientation { + PORTRAIT, + LANDSCAPE, + } + + private ScreenOrientation mOrientation = ScreenOrientation.PORTRAIT; + + public ScreenOrientation getOrientation() { + return mOrientation; + } + + public void setOrientation(ScreenOrientation orientation) { + mOrientation = orientation; + } + + private boolean mAllSelected = false; + private final Runnable mAddTextWatcher = new Runnable() { @Override public void run() { @@ -501,6 +518,11 @@ public class RecipientEditTextView extends MultiAutoCompleteTextView implements // When selection changes, see if it is inside the chips area. // If so, move the cursor back after the chips again. // Only exception is when we change the selection due to a selected chip. + if (getOrientation() == ScreenOrientation.LANDSCAPE) { + if (getText().length() == end - start) { + mAllSelected = true; + } + } DrawableRecipientChip last = getLastChip(); if (mSelectedChip == null && last != null && start < getSpannable().getSpanEnd(last)) { // Grab the last chip and set the cursor to after it. @@ -2691,23 +2713,69 @@ public class RecipientEditTextView extends MultiAutoCompleteTextView implements // If the item deleted is a space, and the thing before the // space is a chip, delete the entire span. int selStart = getSelectionStart(); - DrawableRecipientChip[] repl = getSpannable().getSpans(selStart, selStart, - DrawableRecipientChip.class); - if (repl.length > 0) { - // There is a chip there! Just remove it. - DrawableRecipientChip toDelete = repl[0]; - Editable editable = getText(); - // Add the separator token. - int deleteStart = editable.getSpanStart(toDelete); - int deleteEnd = editable.getSpanEnd(toDelete) + 1; - if (deleteEnd > editable.length()) { - deleteEnd = editable.length(); + if (getOrientation() == ScreenOrientation.PORTRAIT) { + DrawableRecipientChip[] repl = getSpannable().getSpans(selStart, selStart, + DrawableRecipientChip.class); + if (repl.length > 0) { + // There is a chip there! Just remove it. + DrawableRecipientChip toDelete = repl[0]; + Editable editable = getText(); + // Add the separator token. + int deleteStart = editable.getSpanStart(toDelete); + int deleteEnd = editable.getSpanEnd(toDelete) + 1; + if (deleteEnd > editable.length()) { + deleteEnd = editable.length(); + } + if (!mNoChipMode && mRecipientChipDeletedListener != null) { + mRecipientChipDeletedListener + .onRecipientChipDeleted(toDelete.getEntry()); + } + editable.removeSpan(toDelete); + editable.delete(deleteStart, deleteEnd); } - if (!mNoChipMode && mRecipientChipDeletedListener != null) { - mRecipientChipDeletedListener.onRecipientChipDeleted(toDelete.getEntry()); + } else { + if (mAllSelected) { + DrawableRecipientChip[] repl = getSpannable().getSpans(0, + getText().length(), + DrawableRecipientChip.class); + for (int i = 0; i < repl.length; i++) { + DrawableRecipientChip toDelete = repl[i]; + Editable editable = getText(); + // Add the separator token. + int deleteStart = editable.getSpanStart(toDelete); + int deleteEnd = editable.getSpanEnd(toDelete) + 1; + if (deleteEnd > editable.length()) { + deleteEnd = editable.length(); + } + if (!mNoChipMode && mRecipientChipDeletedListener != null) { + mRecipientChipDeletedListener + .onRecipientChipDeleted(toDelete.getEntry()); + } + editable.removeSpan(toDelete); + editable.delete(deleteStart, deleteEnd); + } + mAllSelected = false; + } else { + DrawableRecipientChip[] repl = getSpannable().getSpans(selStart, selStart, + DrawableRecipientChip.class); + if (repl.length > 0) { + // There is a chip there! Just remove it. + DrawableRecipientChip toDelete = repl[0]; + Editable editable = getText(); + // Add the separator token. + int deleteStart = editable.getSpanStart(toDelete); + int deleteEnd = editable.getSpanEnd(toDelete) + 1; + if (deleteEnd > editable.length()) { + deleteEnd = editable.length(); + } + if (!mNoChipMode && mRecipientChipDeletedListener != null) { + mRecipientChipDeletedListener + .onRecipientChipDeleted(toDelete.getEntry()); + } + editable.removeSpan(toDelete); + editable.delete(deleteStart, deleteEnd); + } } - editable.removeSpan(toDelete); - editable.delete(deleteStart, deleteEnd); } } else if (count > before) { if (mSelectedChip != null |