ArrowKeyMovementMethodpublic class ArrowKeyMovementMethod extends Object implements MovementMethod
Fields Summary |
---|
private static ArrowKeyMovementMethod | sInstance |
Methods Summary |
---|
public boolean | canSelectArbitrarily()
return true;
| private boolean | down(android.widget.TextView widget, Spannable buffer)
boolean cap = (MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_SHIFT_ON) == 1) ||
(MetaKeyKeyListener.getMetaState(buffer,
MetaKeyKeyListener.META_SELECTING) != 0);
boolean alt = MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_ALT_ON) == 1;
Layout layout = widget.getLayout();
if (cap) {
if (alt) {
Selection.extendSelection(buffer, buffer.length());
return true;
} else {
return Selection.extendDown(buffer, layout);
}
} else {
if (alt) {
Selection.setSelection(buffer, buffer.length());
return true;
} else {
return Selection.moveDown(buffer, layout);
}
}
| private boolean | executeDown(android.widget.TextView widget, Spannable buffer, int keyCode)
boolean handled = false;
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
handled |= up(widget, buffer);
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
handled |= down(widget, buffer);
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
handled |= left(widget, buffer);
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
handled |= right(widget, buffer);
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
if (MetaKeyKeyListener.getMetaState(buffer, MetaKeyKeyListener.META_SELECTING) != 0) {
if (widget.showContextMenu()) {
handled = true;
}
}
}
if (handled) {
MetaKeyKeyListener.adjustMetaAfterKeypress(buffer);
MetaKeyKeyListener.resetLockedMeta(buffer);
}
return handled;
| public static MovementMethod | getInstance()
if (sInstance == null)
sInstance = new ArrowKeyMovementMethod();
return sInstance;
| public void | initialize(android.widget.TextView widget, Spannable text)
Selection.setSelection(text, 0);
| private boolean | left(android.widget.TextView widget, Spannable buffer)
boolean cap = (MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_SHIFT_ON) == 1) ||
(MetaKeyKeyListener.getMetaState(buffer,
MetaKeyKeyListener.META_SELECTING) != 0);
boolean alt = MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_ALT_ON) == 1;
Layout layout = widget.getLayout();
if (cap) {
if (alt) {
return Selection.extendToLeftEdge(buffer, layout);
} else {
return Selection.extendLeft(buffer, layout);
}
} else {
if (alt) {
return Selection.moveToLeftEdge(buffer, layout);
} else {
return Selection.moveLeft(buffer, layout);
}
}
| public boolean | onKeyDown(android.widget.TextView widget, Spannable buffer, int keyCode, android.view.KeyEvent event)
if (executeDown(widget, buffer, keyCode)) {
MetaKeyKeyListener.adjustMetaAfterKeypress(buffer);
MetaKeyKeyListener.resetLockedMeta(buffer);
return true;
}
return false;
| public boolean | onKeyOther(android.widget.TextView view, Spannable text, android.view.KeyEvent event)
int code = event.getKeyCode();
if (code != KeyEvent.KEYCODE_UNKNOWN
&& event.getAction() == KeyEvent.ACTION_MULTIPLE) {
int repeat = event.getRepeatCount();
boolean handled = false;
while ((--repeat) > 0) {
handled |= executeDown(view, text, code);
}
return handled;
}
return false;
| public boolean | onKeyUp(android.widget.TextView widget, Spannable buffer, int keyCode, android.view.KeyEvent event)
return false;
| public void | onTakeFocus(android.widget.TextView view, Spannable text, int dir)
if ((dir & (View.FOCUS_FORWARD | View.FOCUS_DOWN)) != 0) {
Layout layout = view.getLayout();
if (layout == null) {
/*
* This shouldn't be null, but do something sensible if it is.
*/
Selection.setSelection(text, text.length());
} else {
/*
* Put the cursor at the end of the first line, which is
* either the last offset if there is only one line, or the
* offset before the first character of the second line
* if there is more than one line.
*/
if (layout.getLineCount() == 1) {
Selection.setSelection(text, text.length());
} else {
Selection.setSelection(text, layout.getLineStart(1) - 1);
}
}
} else {
Selection.setSelection(text, text.length());
}
| public boolean | onTouchEvent(android.widget.TextView widget, Spannable buffer, android.view.MotionEvent event)
int initialScrollX = -1, initialScrollY = -1;
if (event.getAction() == MotionEvent.ACTION_UP) {
initialScrollX = Touch.getInitialScrollX(widget, buffer);
initialScrollY = Touch.getInitialScrollY(widget, buffer);
}
boolean handled = Touch.onTouchEvent(widget, buffer, event);
if (widget.isFocused() && !widget.didTouchFocusSelect()) {
if (event.getAction() == MotionEvent.ACTION_UP) {
// If we have scrolled, then the up shouldn't move the cursor,
// but we do need to make sure the cursor is still visible at
// the current scroll offset to avoid the scroll jumping later
// to show it.
if ((initialScrollY >= 0 && initialScrollY != widget.getScrollY()) ||
(initialScrollX >= 0 && initialScrollX != widget.getScrollX())) {
widget.moveCursorToVisibleOffset();
return true;
}
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
// Clamp the position to inside of the view.
if (x < 0) {
x = 0;
} else if (x >= (widget.getWidth()-widget.getTotalPaddingRight())) {
x = widget.getWidth()-widget.getTotalPaddingRight() - 1;
}
if (y < 0) {
y = 0;
} else if (y >= (widget.getHeight()-widget.getTotalPaddingBottom())) {
y = widget.getHeight()-widget.getTotalPaddingBottom() - 1;
}
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
// XXX should do the same adjust for x as we do for the line.
boolean cap = (MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_SHIFT_ON) == 1) ||
(MetaKeyKeyListener.getMetaState(buffer,
MetaKeyKeyListener.META_SELECTING) != 0);
if (cap) {
Selection.extendSelection(buffer, off);
} else {
Selection.setSelection(buffer, off);
}
MetaKeyKeyListener.adjustMetaAfterKeypress(buffer);
MetaKeyKeyListener.resetLockedMeta(buffer);
return true;
}
}
return handled;
| public boolean | onTrackballEvent(android.widget.TextView widget, Spannable text, android.view.MotionEvent event)
return false;
| private boolean | right(android.widget.TextView widget, Spannable buffer)
boolean cap = (MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_SHIFT_ON) == 1) ||
(MetaKeyKeyListener.getMetaState(buffer,
MetaKeyKeyListener.META_SELECTING) != 0);
boolean alt = MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_ALT_ON) == 1;
Layout layout = widget.getLayout();
if (cap) {
if (alt) {
return Selection.extendToRightEdge(buffer, layout);
} else {
return Selection.extendRight(buffer, layout);
}
} else {
if (alt) {
return Selection.moveToRightEdge(buffer, layout);
} else {
return Selection.moveRight(buffer, layout);
}
}
| private boolean | up(android.widget.TextView widget, Spannable buffer)
boolean cap = (MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_SHIFT_ON) == 1) ||
(MetaKeyKeyListener.getMetaState(buffer,
MetaKeyKeyListener.META_SELECTING) != 0);
boolean alt = MetaKeyKeyListener.getMetaState(buffer,
KeyEvent.META_ALT_ON) == 1;
Layout layout = widget.getLayout();
if (cap) {
if (alt) {
Selection.extendSelection(buffer, 0);
return true;
} else {
return Selection.extendUp(buffer, layout);
}
} else {
if (alt) {
Selection.setSelection(buffer, 0);
return true;
} else {
return Selection.moveUp(buffer, layout);
}
}
|
|