summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuijie Bai <rbai@codeaurora.org>2016-05-25 15:21:22 +0800
committerSteve Kondik <steve@cyngn.com>2016-09-01 01:45:32 -0700
commitfe2b8c363c0c79f151419df197afad1dfe318718 (patch)
tree12ed479f28989da6f34a4dfb8b7c2a24fc15b2ae
parent1df2ea69cf09d6a187d65b497317b01bfb04e01d (diff)
downloadandroid_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.java98
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