blob: b9f5d5f447e3e0241cb0b77985eb1893794780a3 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
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
17package android.text.method;
18
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080019import android.view.MotionEvent;
20import android.text.*;
21import android.widget.TextView;
22import android.view.View;
23
Jeff Brown67b6ab72010-12-17 18:33:02 -080024/**
25 * A movement method that interprets movement keys by scrolling the text buffer.
26 */
27public class ScrollingMovementMethod extends BaseMovementMethod implements MovementMethod {
Jeff Brown67b6ab72010-12-17 18:33:02 -080028 @Override
29 protected boolean left(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080030 return scrollLeft(widget, buffer, 1);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080031 }
32
Jeff Brown67b6ab72010-12-17 18:33:02 -080033 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080034 protected boolean right(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080035 return scrollRight(widget, buffer, 1);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080036 }
37
Jeff Brown67b6ab72010-12-17 18:33:02 -080038 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080039 protected boolean up(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080040 return scrollUp(widget, buffer, 1);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080041 }
42
Jeff Brown67b6ab72010-12-17 18:33:02 -080043 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080044 protected boolean down(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080045 return scrollDown(widget, buffer, 1);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080046 }
47
Jeff Brown67b6ab72010-12-17 18:33:02 -080048 @Override
49 protected boolean pageUp(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080050 return scrollPageUp(widget, buffer);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080051 }
Jeff Brown67b6ab72010-12-17 18:33:02 -080052
53 @Override
54 protected boolean pageDown(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080055 return scrollPageDown(widget, buffer);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080056 }
Jeff Brown67b6ab72010-12-17 18:33:02 -080057
58 @Override
59 protected boolean top(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080060 return scrollTop(widget, buffer);
Jeff Brown67b6ab72010-12-17 18:33:02 -080061 }
62
63 @Override
64 protected boolean bottom(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080065 return scrollBottom(widget, buffer);
Jeff Brown67b6ab72010-12-17 18:33:02 -080066 }
67
68 @Override
69 protected boolean lineStart(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080070 return scrollLineStart(widget, buffer);
Jeff Brown67b6ab72010-12-17 18:33:02 -080071 }
72
73 @Override
74 protected boolean lineEnd(TextView widget, Spannable buffer) {
Jeff Brown8f345672011-02-26 13:29:53 -080075 return scrollLineEnd(widget, buffer);
Jeff Brown67b6ab72010-12-17 18:33:02 -080076 }
77
78 @Override
79 protected boolean home(TextView widget, Spannable buffer) {
80 return top(widget, buffer);
81 }
82
83 @Override
84 protected boolean end(TextView widget, Spannable buffer) {
85 return bottom(widget, buffer);
86 }
87
88 @Override
89 public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080090 return Touch.onTouchEvent(widget, buffer, event);
91 }
92
Jeff Brown67b6ab72010-12-17 18:33:02 -080093 @Override
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080094 public void onTakeFocus(TextView widget, Spannable text, int dir) {
95 Layout layout = widget.getLayout();
96
97 if (layout != null && (dir & View.FOCUS_FORWARD) != 0) {
98 widget.scrollTo(widget.getScrollX(),
99 layout.getLineTop(0));
100 }
101 if (layout != null && (dir & View.FOCUS_BACKWARD) != 0) {
102 int padding = widget.getTotalPaddingTop() +
103 widget.getTotalPaddingBottom();
104 int line = layout.getLineCount() - 1;
105
106 widget.scrollTo(widget.getScrollX(),
107 layout.getLineTop(line+1) -
108 (widget.getHeight() - padding));
109 }
110 }
111
112 public static MovementMethod getInstance() {
113 if (sInstance == null)
114 sInstance = new ScrollingMovementMethod();
115
116 return sInstance;
117 }
118
119 private static ScrollingMovementMethod sInstance;
120}