1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.text.method; 18 19 import android.text.Layout; 20 import android.text.Spannable; 21 import android.view.MotionEvent; 22 import android.view.View; 23 import android.widget.TextView; 24 25 /** 26 * A movement method that interprets movement keys by scrolling the text buffer. 27 */ 28 @android.ravenwood.annotation.RavenwoodKeepWholeClass 29 public class ScrollingMovementMethod extends BaseMovementMethod implements MovementMethod { 30 @Override left(TextView widget, Spannable buffer)31 protected boolean left(TextView widget, Spannable buffer) { 32 return scrollLeft(widget, buffer, 1); 33 } 34 35 @Override right(TextView widget, Spannable buffer)36 protected boolean right(TextView widget, Spannable buffer) { 37 return scrollRight(widget, buffer, 1); 38 } 39 40 @Override up(TextView widget, Spannable buffer)41 protected boolean up(TextView widget, Spannable buffer) { 42 return scrollUp(widget, buffer, 1); 43 } 44 45 @Override down(TextView widget, Spannable buffer)46 protected boolean down(TextView widget, Spannable buffer) { 47 return scrollDown(widget, buffer, 1); 48 } 49 50 @Override pageUp(TextView widget, Spannable buffer)51 protected boolean pageUp(TextView widget, Spannable buffer) { 52 return scrollPageUp(widget, buffer); 53 } 54 55 @Override pageDown(TextView widget, Spannable buffer)56 protected boolean pageDown(TextView widget, Spannable buffer) { 57 return scrollPageDown(widget, buffer); 58 } 59 60 @Override top(TextView widget, Spannable buffer)61 protected boolean top(TextView widget, Spannable buffer) { 62 return scrollTop(widget, buffer); 63 } 64 65 @Override bottom(TextView widget, Spannable buffer)66 protected boolean bottom(TextView widget, Spannable buffer) { 67 return scrollBottom(widget, buffer); 68 } 69 70 @Override lineStart(TextView widget, Spannable buffer)71 protected boolean lineStart(TextView widget, Spannable buffer) { 72 return scrollLineStart(widget, buffer); 73 } 74 75 @Override lineEnd(TextView widget, Spannable buffer)76 protected boolean lineEnd(TextView widget, Spannable buffer) { 77 return scrollLineEnd(widget, buffer); 78 } 79 80 @Override home(TextView widget, Spannable buffer)81 protected boolean home(TextView widget, Spannable buffer) { 82 return top(widget, buffer); 83 } 84 85 @Override end(TextView widget, Spannable buffer)86 protected boolean end(TextView widget, Spannable buffer) { 87 return bottom(widget, buffer); 88 } 89 90 @Override onTouchEvent(TextView widget, Spannable buffer, MotionEvent event)91 public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { 92 return Touch.onTouchEvent(widget, buffer, event); 93 } 94 95 @Override onTakeFocus(TextView widget, Spannable text, int dir)96 public void onTakeFocus(TextView widget, Spannable text, int dir) { 97 Layout layout = widget.getLayout(); 98 99 if (layout != null && (dir & View.FOCUS_FORWARD) != 0) { 100 widget.scrollTo(widget.getScrollX(), 101 layout.getLineTop(0)); 102 } 103 if (layout != null && (dir & View.FOCUS_BACKWARD) != 0) { 104 int padding = widget.getTotalPaddingTop() + 105 widget.getTotalPaddingBottom(); 106 int line = layout.getLineCount() - 1; 107 108 widget.scrollTo(widget.getScrollX(), 109 layout.getLineTop(line+1) - 110 (widget.getHeight() - padding)); 111 } 112 } 113 getInstance()114 public static MovementMethod getInstance() { 115 if (sInstance == null) 116 sInstance = new ScrollingMovementMethod(); 117 118 return sInstance; 119 } 120 121 private static ScrollingMovementMethod sInstance; 122 } 123