Merge "Ensure the selection does not change in setTextAndKeepSelection." into froyo
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 870f512c..dc952e6 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -343,6 +343,7 @@
 
     @Override
     protected void onSelectionChanged(int selStart, int selEnd) {
+        if (mInSetTextAndKeepSelection) return;
         // This code is copied from TextView.onDraw().  That code does not get
         // executed, however, because the WebTextView does not draw, allowing
         // webkit's drawing to show through.
@@ -799,8 +800,14 @@
     /* package */ void setTextAndKeepSelection(String text) {
         mPreChange = text.toString();
         Editable edit = (Editable) getText();
+        int selStart = Selection.getSelectionStart(edit);
+        int selEnd = Selection.getSelectionEnd(edit);
         mInSetTextAndKeepSelection = true;
         edit.replace(0, edit.length(), text);
+        int newLength = edit.length();
+        if (selStart > newLength) selStart = newLength;
+        if (selEnd > newLength) selEnd = newLength;
+        Selection.setSelection(edit, selStart, selEnd);
         mInSetTextAndKeepSelection = false;
         updateCachedTextfield();
     }