OSDN Git Service

Fix crash due to reverse selection.
authorSeigo Nonaka <nona@google.com>
Thu, 25 Jun 2015 10:02:17 +0000 (19:02 +0900)
committerSeigo Nonaka <nona@google.com>
Thu, 25 Jun 2015 16:40:49 +0000 (01:40 +0900)
Selection start can be bigger than selection end and this kind
of selection is generated by mouse selection at least from L MR1.

To fix and support SHARE button for this kind of selection,
getSelectedText need to invert selection start and selection end
when the selection start is bigger than selection end.

Bug: 22065979
Change-Id: Ide4ac41e3f59d256033aca004450712ca0bb0f03

core/java/android/widget/TextView.java

index 207605e..dfe373f 100644 (file)
@@ -7562,10 +7562,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
     }
 
     String getSelectedText() {
-        if (hasSelection()) {
-            return String.valueOf(mText.subSequence(getSelectionStart(), getSelectionEnd()));
+        if (!hasSelection()) {
+            return null;
         }
-        return null;
+
+        final int start = getSelectionStart();
+        final int end = getSelectionEnd();
+        return String.valueOf(
+                start > end ? mText.subSequence(end, start) : mText.subSequence(start, end));
     }
 
     /**