Package icyllis.modernui.view

# Class FocusFinder

java.lang.Object
icyllis.modernui.view.FocusFinder

public class FocusFinder extends Object
The algorithm used for finding the next focusable view in a given direction from a view that currently has focus.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `View`
  `findNearestTouchable(ViewGroup root, int x, int y, int direction, int[] deltas)`
  Find the nearest touchable view to the specified view.
  `final View`
  `findNextFocus(ViewGroup root, View focused, int direction)`
  Find the next view to take focus in root's descendants, starting from the view that currently is focused.
  `View`
  `findNextFocusFromRect(ViewGroup root, Rect focusedRect, int direction)`
  Find the next view to take focus in root's descendants, searching from a particular rectangle in root's coordinates.
  `View`
  `findNextKeyboardNavigationCluster(View root, View currentCluster, int direction)`
  Find the root of the next keyboard navigation cluster after the current one.
  `static FocusFinder`
  `getInstance()`
  Get the focus finder for this thread.
  `static void`
  `sort(View[] views, int start, int end, ViewGroup root, boolean isRtl)`
  Public for testing.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Method Details

  - ### getInstance

    public static FocusFinder getInstance()
    Get the focus finder for this thread.

  - ### findNextFocus

    public final View findNextFocus(@NonNull ViewGroup root, @Nullable View focused, int direction)
    Find the next view to take focus in root's descendants, starting from the view that currently is focused.
    Parameters:
      `root` - Contains focused. Cannot be null.
      `focused` - Has focus now.
      `direction` - Direction to look.
    Returns:
      The next focusable view, or null if none exists.

  - ### findNextFocusFromRect

    public View findNextFocusFromRect(@NonNull ViewGroup root, @NonNull Rect focusedRect, int direction)
    Find the next view to take focus in root's descendants, searching from a particular rectangle in root's coordinates.
    Parameters:
      `root` - Contains focusedRect. Cannot be null.
      `focusedRect` - The starting point of the search.
      `direction` - Direction to look.
    Returns:
      The next focusable view, or null if none exists.

  - ### findNextKeyboardNavigationCluster

    public View findNextKeyboardNavigationCluster(@NonNull View root, @Nullable View currentCluster, int direction)
    Find the root of the next keyboard navigation cluster after the current one.
    Parameters:
      `root` - The view tree to look inside. Cannot be null
      `currentCluster` - The starting point of the search. Null means the default cluster
      `direction` - Direction to look
    Returns:
      The next cluster, or null if none exists

  - ### findNearestTouchable

    public View findNearestTouchable(@NonNull ViewGroup root, int x, int y, int direction, int[] deltas)
    Find the nearest touchable view to the specified view.
    Parameters:
      `root` - The root of the tree in which to search
      `x` - X coordinate from which to start the search
      `y` - Y coordinate from which to start the search
      `direction` - Direction to look
      `deltas` - Offset from the invalid input: '<'x, y> to the edge of the nearest view. Note that this array may already be populated with values.
    Returns:
      The nearest touchable view, or null if none exists.

  - ### sort

    public static void sort(View[] views, int start, int end, ViewGroup root, boolean isRtl)
    Public for testing.