Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5151,9 +5151,6 @@ protected void handleDataChanged() {
* @return the distance between the rectangles
*/
public static int getDistance( Rect source, Rect dest, int direction ) {

// TODO: implement this

int sX, sY; // source x, y
int dX, dY; // dest x, y
switch ( direction ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2196,15 +2196,15 @@ private boolean commonKey( int keyCode, int count, KeyEvent event ) {
handled = resurrectSelectionIfNeeded();
if ( !handled ) {
while ( count-- > 0 ) {
if ( arrowScroll( FOCUS_UP ) ) {
if ( arrowScroll( FOCUS_LEFT ) ) {
handled = true;
} else {
break;
}
}
}
} else if ( event.hasModifiers( KeyEvent.META_ALT_ON ) ) {
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_UP );
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_LEFT );
}
break;

Expand All @@ -2213,27 +2213,27 @@ private boolean commonKey( int keyCode, int count, KeyEvent event ) {
handled = resurrectSelectionIfNeeded();
if ( !handled ) {
while ( count-- > 0 ) {
if ( arrowScroll( FOCUS_DOWN ) ) {
if ( arrowScroll( FOCUS_RIGHT ) ) {
handled = true;
} else {
break;
}
}
}
} else if ( event.hasModifiers( KeyEvent.META_ALT_ON ) ) {
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_DOWN );
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_RIGHT );
}
break;

case KeyEvent.KEYCODE_DPAD_UP:
if ( event.hasNoModifiers() ) {
handled = handleHorizontalFocusWithinListItem( View.FOCUS_UP );
handled = handleVerticalFocusWithinListItem( View.FOCUS_UP );
}
break;

case KeyEvent.KEYCODE_DPAD_DOWN:
if ( event.hasNoModifiers() ) {
handled = handleHorizontalFocusWithinListItem( View.FOCUS_DOWN );
handled = handleVerticalFocusWithinListItem( View.FOCUS_DOWN );
}
break;

Expand All @@ -2252,38 +2252,38 @@ private boolean commonKey( int keyCode, int count, KeyEvent event ) {
case KeyEvent.KEYCODE_SPACE:

if ( event.hasNoModifiers() ) {
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_DOWN );
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_RIGHT );
} else if ( event.hasModifiers( KeyEvent.META_SHIFT_ON ) ) {
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_UP );
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_LEFT );
}
handled = true;
break;

case KeyEvent.KEYCODE_PAGE_UP:
if ( event.hasNoModifiers() ) {
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_UP );
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_LEFT );
} else if ( event.hasModifiers( KeyEvent.META_ALT_ON ) ) {
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_UP );
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_LEFT );
}
break;

case KeyEvent.KEYCODE_PAGE_DOWN:
if ( event.hasNoModifiers() ) {
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_DOWN );
handled = resurrectSelectionIfNeeded() || pageScroll( FOCUS_RIGHT );
} else if ( event.hasModifiers( KeyEvent.META_ALT_ON ) ) {
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_DOWN );
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_RIGHT );
}
break;

case KeyEvent.KEYCODE_MOVE_HOME:
if ( event.hasNoModifiers() ) {
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_UP );
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_LEFT );
}
break;

case KeyEvent.KEYCODE_MOVE_END:
if ( event.hasNoModifiers() ) {
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_DOWN );
handled = resurrectSelectionIfNeeded() || fullScroll( FOCUS_RIGHT );
}
break;

Expand Down Expand Up @@ -2315,15 +2315,16 @@ private boolean commonKey( int keyCode, int count, KeyEvent event ) {
* Scrolls left or right by the number of items currently present on screen.
*
* @param direction
* either {@link View#FOCUS_UP} or {@link View#FOCUS_DOWN}
* either {@link View#FOCUS_LEFT} or {@link View#FOCUS_RIGHT}
* @return whether selection was moved
*/
boolean pageScroll( int direction ) {
int nextPage = -1;
boolean down = false;

if ( direction == FOCUS_UP ) { nextPage = Math.max( 0, mSelectedPosition - getChildCount() - 1 );
} else if ( direction == FOCUS_DOWN ) {
if ( direction == FOCUS_LEFT ) {
nextPage = Math.max( 0, mSelectedPosition - getChildCount() - 1 );
} else if ( direction == FOCUS_RIGHT ) {
nextPage = Math.min( mItemCount - 1, mSelectedPosition + getChildCount() - 1 );
down = true;
}
Expand Down Expand Up @@ -2360,13 +2361,13 @@ boolean pageScroll( int direction ) {
* currently selected item.)
*
* @param direction
* either {@link View#FOCUS_UP} or {@link View#FOCUS_DOWN}
* either {@link View#FOCUS_LEFT} or {@link View#FOCUS_RIGHT}
*
* @return whether selection was moved
*/
boolean fullScroll( int direction ) {
boolean moved = false;
if ( direction == FOCUS_UP ) {
if ( direction == FOCUS_LEFT ) {
if ( mSelectedPosition != 0 ) {
int position = lookForSelectablePosition( 0, true );
if ( position >= 0 ) {
Expand All @@ -2376,7 +2377,7 @@ boolean fullScroll( int direction ) {
}
moved = true;
}
} else if ( direction == FOCUS_DOWN ) {
} else if ( direction == FOCUS_RIGHT ) {
if ( mSelectedPosition < mItemCount - 1 ) {
int position = lookForSelectablePosition( mItemCount - 1, true );
if ( position >= 0 ) {
Expand All @@ -2397,15 +2398,14 @@ boolean fullScroll( int direction ) {
}

/**
* To avoid horizontal focus searches changing the selected item, we manually focus search within the selected item (as
* To avoid vertical focus searches changing the selected item, we manually focus search within the selected item (as
* applicable), and prevent focus from jumping to something within another item.
*
* @param direction
* one of {View.FOCUS_LEFT, View.FOCUS_RIGHT}
* one of {View.FOCUS_UP, View.FOCUS_DOWN}
* @return Whether this consumes the key event.
*/
private boolean handleHorizontalFocusWithinListItem( int direction ) {
// TODO: implement this
private boolean handleVerticalFocusWithinListItem( int direction ) {
if ( direction != View.FOCUS_UP && direction != View.FOCUS_DOWN ) {
throw new IllegalArgumentException( "direction must be one of"
+ " {View.FOCUS_UP, View.FOCUS_DOWN}" );
Expand Down Expand Up @@ -2447,7 +2447,7 @@ private boolean handleHorizontalFocusWithinListItem( int direction ) {
* Scrolls to the next or previous item if possible.
*
* @param direction
* either {@link View#FOCUS_UP} or {@link View#FOCUS_DOWN}
* either {@link View#FOCUS_LEFT} or {@link View#FOCUS_RIGHT}
*
* @return whether selection was moved
*/
Expand All @@ -2469,7 +2469,7 @@ boolean arrowScroll( int direction ) {
* etc.
*
* @param direction
* Either {@link android.view.View#FOCUS_UP} or {@link android.view.View#FOCUS_DOWN}.
* Either {@link android.view.View#FOCUS_LEFT} or {@link android.view.View#FOCUS_RIGHT}.
* @return Whether any scrolling, selection or focus change occured.
*/
private boolean arrowScrollImpl( int direction ) {
Expand Down Expand Up @@ -2510,7 +2510,7 @@ private boolean arrowScrollImpl( int direction ) {
}

if ( amountToScroll > 0 ) {
scrollListItemsBy( ( direction == View.FOCUS_UP ) ? amountToScroll : -amountToScroll );
scrollListItemsBy( ( direction == View.FOCUS_LEFT ) ? amountToScroll : -amountToScroll );
needToRedraw = true;
}

Expand Down Expand Up @@ -2556,7 +2556,7 @@ private boolean arrowScrollImpl( int direction ) {
* The currently selected view (before changing selection). should be <code>null</code> if there was no previous
* selection.
* @param direction
* Either {@link android.view.View#FOCUS_UP} or {@link android.view.View#FOCUS_DOWN}.
* Either {@link android.view.View#FOCUS_LEFT} or {@link android.view.View#FOCUS_RIGHT}.
* @param newSelectedPosition
* The position of the next selection.
* @param newFocusAssigned
Expand All @@ -2580,7 +2580,7 @@ private void handleNewSelectionChange( View selectedView, int direction, int new
final int selectedIndex = mSelectedPosition - mFirstPosition;
final int nextSelectedIndex = newSelectedPosition - mFirstPosition;

if ( direction == View.FOCUS_UP ) {
if ( direction == View.FOCUS_LEFT ) {
leftViewIndex = nextSelectedIndex;
rightViewIndex = selectedIndex;
leftView = getChildAt( leftViewIndex );
Expand Down Expand Up @@ -2689,7 +2689,7 @@ private int getArrowScrollPreviewLength() {
* applicable. The amount is capped at {@link #getMaxScrollAmount()} .
*
* @param direction
* either {@link android.view.View#FOCUS_UP} or {@link android.view.View#FOCUS_DOWN}.
* either {@link android.view.View#FOCUS_LEFT} or {@link android.view.View#FOCUS_RIGHT}.
* @param nextSelectedPosition
* The position of the next selection, or {@link #INVALID_POSITION} if there is no next selectable position
* @return The amount to scroll. Note: this is always positive! Direction needs to be taken into account when actually scrolling.
Expand All @@ -2700,7 +2700,7 @@ private int amountToScroll( int direction, int nextSelectedPosition ) {

final int numChildren = getChildCount();

if ( direction == View.FOCUS_DOWN ) {
if ( direction == View.FOCUS_RIGHT ) {
int indexToMakeVisible = numChildren - 1;
if ( nextSelectedPosition != INVALID_POSITION ) {
indexToMakeVisible = nextSelectedPosition - mFirstPosition;
Expand Down Expand Up @@ -2793,14 +2793,14 @@ public int getAmountToScroll() {

/**
* @param direction
* either {@link android.view.View#FOCUS_UP} or {@link android.view.View#FOCUS_DOWN}.
* either {@link android.view.View#FOCUS_LEFT} or {@link android.view.View#FOCUS_RIGHT}.
* @return The position of the next selectable position of the views that are currently visible, taking into account the fact
* that there might be no selection. Returns {@link #INVALID_POSITION} if there is no selectable view on screen in the
* given direction.
*/
private int lookForSelectablePositionOnScreen( int direction ) {
final int firstPosition = mFirstPosition;
if ( direction == View.FOCUS_DOWN ) {
if ( direction == View.FOCUS_RIGHT ) {
int startPos = ( mSelectedPosition != INVALID_POSITION ) ?
mSelectedPosition + 1 :
firstPosition;
Expand Down Expand Up @@ -2847,7 +2847,7 @@ && getChildAt( pos - firstPosition ).getVisibility() == View.VISIBLE ) {
* an {@link ArrowScrollFocusResult}, otherwise, return null.
*
* @param direction
* either {@link android.view.View#FOCUS_UP} or {@link android.view.View#FOCUS_DOWN}.
* either {@link android.view.View#FOCUS_LEFT} or {@link android.view.View#FOCUS_RIGHT}.
* @return The result if focus has changed, or <code>null</code>.
*/
private ArrowScrollFocusResult arrowScrollFocused( final int direction ) {
Expand All @@ -2857,7 +2857,7 @@ private ArrowScrollFocusResult arrowScrollFocused( final int direction ) {
View oldFocus = selectedView.findFocus();
newFocus = FocusFinder.getInstance().findNextFocus( this, oldFocus, direction );
} else {
if ( direction == View.FOCUS_DOWN ) {
if ( direction == View.FOCUS_RIGHT ) {
final boolean leftFadingEdgeShowing = ( mFirstPosition > 0 );
final int listLeft = mListPadding.left +
( leftFadingEdgeShowing ? getArrowScrollPreviewLength() : 0 );
Expand Down Expand Up @@ -2888,8 +2888,8 @@ private ArrowScrollFocusResult arrowScrollFocused( final int direction ) {
if ( mSelectedPosition != INVALID_POSITION && positionOfNewFocus != mSelectedPosition ) {
final int selectablePosition = lookForSelectablePositionOnScreen( direction );
if ( selectablePosition != INVALID_POSITION &&
( ( direction == View.FOCUS_DOWN && selectablePosition < positionOfNewFocus ) ||
( direction == View.FOCUS_UP && selectablePosition > positionOfNewFocus ) ) ) {
( ( direction == View.FOCUS_RIGHT && selectablePosition < positionOfNewFocus ) ||
( direction == View.FOCUS_LEFT && selectablePosition > positionOfNewFocus ) ) ) {
return null;
}
}
Expand Down Expand Up @@ -2948,7 +2948,7 @@ private boolean isViewAncestorOf( View child, View parent ) {
* Determine how much we need to scroll in order to get newFocus in view.
*
* @param direction
* either {@link android.view.View#FOCUS_UP} or {@link android.view.View#FOCUS_DOWN}.
* either {@link android.view.View#FOCUS_LEFT} or {@link android.view.View#FOCUS_RIGHT}.
* @param newFocus
* The view that would take focus.
* @param positionOfNewFocus
Expand All @@ -2959,7 +2959,7 @@ private int amountToScrollToNewFocus( int direction, View newFocus, int position
int amountToScroll = 0;
newFocus.getDrawingRect( mTempRect );
offsetDescendantRectToMyCoords( newFocus, mTempRect );
if ( direction == View.FOCUS_UP ) {
if ( direction == View.FOCUS_LEFT ) {
if ( mTempRect.left < mListPadding.left ) {
amountToScroll = mListPadding.left - mTempRect.left;
if ( positionOfNewFocus > 0 ) {
Expand Down