From 900185d00359661e185c3b328f40a4d572ae03f9 Mon Sep 17 00:00:00 2001 From: James Cook Date: Tue, 10 Mar 2015 09:48:11 -0700 Subject: [PATCH] Handle undo in TextView fields with no cursor This fixes a rare crash in the undo system. In particular, if the TextView did not have a cursor and the first operation was a programmatic insert/append the "old cursor position" would be -1. Attempting to undo would try to restore the cursor to -1 and crash. Test will land separately in CTS. Bug: 19332904 Change-Id: I9aa18c1e3621b99d13ac707e483154382effb81c --- core/java/android/widget/Editor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 0f99e8865ea9..cc445774c246 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -4887,9 +4887,10 @@ public class Editor { text.insert(newTextInsertAt, newText); } } - // Restore the cursor position. + // Restore the cursor position. If there wasn't an old cursor (newCursorPos == -1) then + // don't explicitly set it and rely on SpannableStringBuilder to position it. // TODO: Select all the text that was undone. - if (newCursorPos <= text.length()) { + if (0 <= newCursorPos && newCursorPos <= text.length()) { Selection.setSelection(text, newCursorPos); } } -- 2.11.0