From fb0431b5253346feb38677138e1a0a5458abaf57 Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Thu, 4 Sep 2014 15:03:14 -0700 Subject: [PATCH] Up/down arrow moves to beginning/end of buffer With a hardware keyboard, using up arrow within the top line should move to the beginning of the buffer, to better match desktop text editing expectations, and similarly for down arrow on the last line. This patch implements that behavior. Bug: 17385784 Change-Id: Ia23c23c9cc2462558bca9aaffec7d83e284d55e8 --- core/java/android/text/Selection.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/java/android/text/Selection.java b/core/java/android/text/Selection.java index 679e2ccfa91fc..3222dbf8718e4 100644 --- a/core/java/android/text/Selection.java +++ b/core/java/android/text/Selection.java @@ -116,7 +116,8 @@ public class Selection { /** * Move the cursor to the buffer offset physically above the current - * offset, or return false if the cursor is already on the top line. + * offset, to the beginning if it is on the top line but not at the + * start, or return false if the cursor is already on the top line. */ public static boolean moveUp(Spannable text, Layout layout) { int start = getSelectionStart(text); @@ -149,6 +150,9 @@ public class Selection { setSelection(text, move); return true; + } else if (end != 0) { + setSelection(text, 0); + return true; } } @@ -157,7 +161,9 @@ public class Selection { /** * Move the cursor to the buffer offset physically below the current - * offset, or return false if the cursor is already on the bottom line. + * offset, to the end of the buffer if it is on the bottom line but + * not at the end, or return false if the cursor is already at the + * end of the buffer. */ public static boolean moveDown(Spannable text, Layout layout) { int start = getSelectionStart(text); @@ -190,6 +196,9 @@ public class Selection { setSelection(text, move); return true; + } else if (end != text.length()) { + setSelection(text, text.length()); + return true; } }