diff options
author | Justin Klaassen <justinklaassen@google.com> | 2017-09-15 17:58:39 -0400 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2017-09-15 17:58:39 -0400 |
commit | 10d07c88d69cc64f73a069163e7ea5ba2519a099 (patch) | |
tree | 8dbd149eb350320a29c3d10e7ad3201de1c5cbee /android/view/ViewParent.java | |
parent | 677516fb6b6f207d373984757d3d9450474b6b00 (diff) | |
download | android-28-10d07c88d69cc64f73a069163e7ea5ba2519a099.tar.gz |
Import Android SDK Platform PI [4335822]
/google/data/ro/projects/android/fetch_artifact \
--bid 4335822 \
--target sdk_phone_armv7-win_sdk \
sdk-repo-linux-sources-4335822.zip
AndroidVersion.ApiLevel has been modified to appear as 28
Change-Id: Ic8f04be005a71c2b9abeaac754d8da8d6f9a2c32
Diffstat (limited to 'android/view/ViewParent.java')
-rw-r--r-- | android/view/ViewParent.java | 663 |
1 files changed, 663 insertions, 0 deletions
diff --git a/android/view/ViewParent.java b/android/view/ViewParent.java new file mode 100644 index 00000000..572e69b1 --- /dev/null +++ b/android/view/ViewParent.java @@ -0,0 +1,663 @@ +/* + * Copyright (C) 2006 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import android.annotation.NonNull; +import android.graphics.Rect; +import android.os.Bundle; +import android.view.accessibility.AccessibilityEvent; + +/** + * Defines the responsibilities for a class that will be a parent of a View. + * This is the API that a view sees when it wants to interact with its parent. + * + */ +public interface ViewParent { + /** + * Called when something has changed which has invalidated the layout of a + * child of this view parent. This will schedule a layout pass of the view + * tree. + */ + public void requestLayout(); + + /** + * Indicates whether layout was requested on this view parent. + * + * @return true if layout was requested, false otherwise + */ + public boolean isLayoutRequested(); + + /** + * Called when a child wants the view hierarchy to gather and report + * transparent regions to the window compositor. Views that "punch" holes in + * the view hierarchy, such as SurfaceView can use this API to improve + * performance of the system. When no such a view is present in the + * hierarchy, this optimization in unnecessary and might slightly reduce the + * view hierarchy performance. + * + * @param child the view requesting the transparent region computation + * + */ + public void requestTransparentRegion(View child); + + + /** + * The target View has been invalidated, or has had a drawing property changed that + * requires the hierarchy to re-render. + * + * This method is called by the View hierarchy to signal ancestors that a View either needs to + * re-record its drawing commands, or drawing properties have changed. This is how Views + * schedule a drawing traversal. + * + * This signal is generally only dispatched for attached Views, since only they need to draw. + * + * @param child Direct child of this ViewParent containing target + * @param target The view that needs to redraw + */ + default void onDescendantInvalidated(@NonNull View child, @NonNull View target) { + if (getParent() != null) { + // Note: should pass 'this' as default, but can't since we may not be a View + getParent().onDescendantInvalidated(child, target); + } + } + + /** + * All or part of a child is dirty and needs to be redrawn. + * + * @param child The child which is dirty + * @param r The area within the child that is invalid + * + * @deprecated Use {@link #onDescendantInvalidated(View, View)} instead. + */ + @Deprecated + public void invalidateChild(View child, Rect r); + + /** + * All or part of a child is dirty and needs to be redrawn. + * + * <p>The location array is an array of two int values which respectively + * define the left and the top position of the dirty child.</p> + * + * <p>This method must return the parent of this ViewParent if the specified + * rectangle must be invalidated in the parent. If the specified rectangle + * does not require invalidation in the parent or if the parent does not + * exist, this method must return null.</p> + * + * <p>When this method returns a non-null value, the location array must + * have been updated with the left and top coordinates of this ViewParent.</p> + * + * @param location An array of 2 ints containing the left and top + * coordinates of the child to invalidate + * @param r The area within the child that is invalid + * + * @return the parent of this ViewParent or null + * + * @deprecated Use {@link #onDescendantInvalidated(View, View)} instead. + */ + @Deprecated + public ViewParent invalidateChildInParent(int[] location, Rect r); + + /** + * Returns the parent if it exists, or null. + * + * @return a ViewParent or null if this ViewParent does not have a parent + */ + public ViewParent getParent(); + + /** + * Called when a child of this parent wants focus + * + * @param child The child of this ViewParent that wants focus. This view + * will contain the focused view. It is not necessarily the view that + * actually has focus. + * @param focused The view that is a descendant of child that actually has + * focus + */ + public void requestChildFocus(View child, View focused); + + /** + * Tell view hierarchy that the global view attributes need to be + * re-evaluated. + * + * @param child View whose attributes have changed. + */ + public void recomputeViewAttributes(View child); + + /** + * Called when a child of this parent is giving up focus + * + * @param child The view that is giving up focus + */ + public void clearChildFocus(View child); + + /** + * Compute the visible part of a rectangular region defined in terms of a child view's + * coordinates. + * + * <p>Returns the clipped visible part of the rectangle <code>r</code>, defined in the + * <code>child</code>'s local coordinate system. <code>r</code> is modified by this method to + * contain the result, expressed in the global (root) coordinate system.</p> + * + * <p>The resulting rectangle is always axis aligned. If a rotation is applied to a node in the + * View hierarchy, the result is the axis-aligned bounding box of the visible rectangle.</p> + * + * @param child A child View, whose rectangular visible region we want to compute + * @param r The input rectangle, defined in the child coordinate system. Will be overwritten to + * contain the resulting visible rectangle, expressed in global (root) coordinates + * @param offset The input coordinates of a point, defined in the child coordinate system. + * As with the <code>r</code> parameter, this will be overwritten to contain the global (root) + * coordinates of that point. + * A <code>null</code> value is valid (in case you are not interested in this result) + * @return true if the resulting rectangle is not empty, false otherwise + */ + public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset); + + /** + * Find the nearest view in the specified direction that wants to take focus + * + * @param v The view that currently has focus + * @param direction One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT + */ + public View focusSearch(View v, int direction); + + /** + * Find the nearest keyboard navigation cluster in the specified direction. + * This does not actually give focus to that cluster. + * + * @param currentCluster The starting point of the search. Null means the current cluster is not + * found yet + * @param direction Direction to look + * + * @return The nearest keyboard navigation cluster in the specified direction, or null if none + * can be found + */ + View keyboardNavigationClusterSearch(View currentCluster, int direction); + + /** + * Change the z order of the child so it's on top of all other children. + * This ordering change may affect layout, if this container + * uses an order-dependent layout scheme (e.g., LinearLayout). Prior + * to {@link android.os.Build.VERSION_CODES#KITKAT} this + * method should be followed by calls to {@link #requestLayout()} and + * {@link View#invalidate()} on this parent to force the parent to redraw + * with the new child ordering. + * + * @param child The child to bring to the top of the z order + */ + public void bringChildToFront(View child); + + /** + * Tells the parent that a new focusable view has become available. This is + * to handle transitions from the case where there are no focusable views to + * the case where the first focusable view appears. + * + * @param v The view that has become newly focusable + */ + public void focusableViewAvailable(View v); + + /** + * Shows the context menu for the specified view or its ancestors. + * <p> + * In most cases, a subclass does not need to override this. However, if + * the subclass is added directly to the window manager (for example, + * {@link ViewManager#addView(View, android.view.ViewGroup.LayoutParams)}) + * then it should override this and show the context menu. + * + * @param originalView the source view where the context menu was first + * invoked + * @return {@code true} if the context menu was shown, {@code false} + * otherwise + * @see #showContextMenuForChild(View, float, float) + */ + public boolean showContextMenuForChild(View originalView); + + /** + * Shows the context menu for the specified view or its ancestors anchored + * to the specified view-relative coordinate. + * <p> + * In most cases, a subclass does not need to override this. However, if + * the subclass is added directly to the window manager (for example, + * {@link ViewManager#addView(View, android.view.ViewGroup.LayoutParams)}) + * then it should override this and show the context menu. + * <p> + * If a subclass overrides this method it should also override + * {@link #showContextMenuForChild(View)}. + * + * @param originalView the source view where the context menu was first + * invoked + * @param x the X coordinate in pixels relative to the original view to + * which the menu should be anchored, or {@link Float#NaN} to + * disable anchoring + * @param y the Y coordinate in pixels relative to the original view to + * which the menu should be anchored, or {@link Float#NaN} to + * disable anchoring + * @return {@code true} if the context menu was shown, {@code false} + * otherwise + */ + boolean showContextMenuForChild(View originalView, float x, float y); + + /** + * Have the parent populate the specified context menu if it has anything to + * add (and then recurse on its parent). + * + * @param menu The menu to populate + */ + public void createContextMenu(ContextMenu menu); + + /** + * Start an action mode for the specified view with the default type + * {@link ActionMode#TYPE_PRIMARY}. + * + * <p>In most cases, a subclass does not need to override this. However, if the + * subclass is added directly to the window manager (for example, + * {@link ViewManager#addView(View, android.view.ViewGroup.LayoutParams)}) + * then it should override this and start the action mode.</p> + * + * @param originalView The source view where the action mode was first invoked + * @param callback The callback that will handle lifecycle events for the action mode + * @return The new action mode if it was started, null otherwise + * + * @see #startActionModeForChild(View, android.view.ActionMode.Callback, int) + */ + public ActionMode startActionModeForChild(View originalView, ActionMode.Callback callback); + + /** + * Start an action mode of a specific type for the specified view. + * + * <p>In most cases, a subclass does not need to override this. However, if the + * subclass is added directly to the window manager (for example, + * {@link ViewManager#addView(View, android.view.ViewGroup.LayoutParams)}) + * then it should override this and start the action mode.</p> + * + * @param originalView The source view where the action mode was first invoked + * @param callback The callback that will handle lifecycle events for the action mode + * @param type One of {@link ActionMode#TYPE_PRIMARY} or {@link ActionMode#TYPE_FLOATING}. + * @return The new action mode if it was started, null otherwise + */ + public ActionMode startActionModeForChild( + View originalView, ActionMode.Callback callback, int type); + + /** + * This method is called on the parent when a child's drawable state + * has changed. + * + * @param child The child whose drawable state has changed. + */ + public void childDrawableStateChanged(View child); + + /** + * Called when a child does not want this parent and its ancestors to + * intercept touch events with + * {@link ViewGroup#onInterceptTouchEvent(MotionEvent)}. + * + * <p>This parent should pass this call onto its parents. This parent must obey + * this request for the duration of the touch (that is, only clear the flag + * after this parent has received an up or a cancel.</p> + * + * @param disallowIntercept True if the child does not want the parent to + * intercept touch events. + */ + public void requestDisallowInterceptTouchEvent(boolean disallowIntercept); + + /** + * Called when a child of this group wants a particular rectangle to be + * positioned onto the screen. {@link ViewGroup}s overriding this can trust + * that: + * <ul> + * <li>child will be a direct child of this group</li> + * <li>rectangle will be in the child's content coordinates</li> + * </ul> + * + * <p>{@link ViewGroup}s overriding this should uphold the contract:</p> + * <ul> + * <li>nothing will change if the rectangle is already visible</li> + * <li>the view port will be scrolled only just enough to make the + * rectangle visible</li> + * <ul> + * + * @param child The direct child making the request. + * @param rectangle The rectangle in the child's coordinates the child + * wishes to be on the screen. + * @param immediate True to forbid animated or delayed scrolling, + * false otherwise + * @return Whether the group scrolled to handle the operation + */ + public boolean requestChildRectangleOnScreen(View child, Rect rectangle, + boolean immediate); + + /** + * Called by a child to request from its parent to send an {@link AccessibilityEvent}. + * The child has already populated a record for itself in the event and is delegating + * to its parent to send the event. The parent can optionally add a record for itself. + * <p> + * Note: An accessibility event is fired by an individual view which populates the + * event with a record for its state and requests from its parent to perform + * the sending. The parent can optionally add a record for itself before + * dispatching the request to its parent. A parent can also choose not to + * respect the request for sending the event. The accessibility event is sent + * by the topmost view in the view tree.</p> + * + * @param child The child which requests sending the event. + * @param event The event to be sent. + * @return True if the event was sent. + */ + public boolean requestSendAccessibilityEvent(View child, AccessibilityEvent event); + + /** + * Called when a child view now has or no longer is tracking transient state. + * + * <p>"Transient state" is any state that a View might hold that is not expected to + * be reflected in the data model that the View currently presents. This state only + * affects the presentation to the user within the View itself, such as the current + * state of animations in progress or the state of a text selection operation.</p> + * + * <p>Transient state is useful for hinting to other components of the View system + * that a particular view is tracking something complex but encapsulated. + * A <code>ListView</code> for example may acknowledge that list item Views + * with transient state should be preserved within their position or stable item ID + * instead of treating that view as trivially replaceable by the backing adapter. + * This allows adapter implementations to be simpler instead of needing to track + * the state of item view animations in progress such that they could be restored + * in the event of an unexpected recycling and rebinding of attached item views.</p> + * + * <p>This method is called on a parent view when a child view or a view within + * its subtree begins or ends tracking of internal transient state.</p> + * + * @param child Child view whose state has changed + * @param hasTransientState true if this child has transient state + */ + public void childHasTransientStateChanged(View child, boolean hasTransientState); + + /** + * Ask that a new dispatch of {@link View#fitSystemWindows(Rect) + * View.fitSystemWindows(Rect)} be performed. + */ + public void requestFitSystemWindows(); + + /** + * Gets the parent of a given View for accessibility. Since some Views are not + * exposed to the accessibility layer the parent for accessibility is not + * necessarily the direct parent of the View, rather it is a predecessor. + * + * @return The parent or <code>null</code> if no such is found. + */ + public ViewParent getParentForAccessibility(); + + /** + * Notifies a view parent that the accessibility state of one of its + * descendants has changed and that the structure of the subtree is + * different. + * @param child The direct child whose subtree has changed. + * @param source The descendant view that changed. May not be {@code null}. + * @param changeType A bit mask of the types of changes that occurred. One + * or more of: + * <ul> + * <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION} + * <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_SUBTREE} + * <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_TEXT} + * <li>{@link AccessibilityEvent#CONTENT_CHANGE_TYPE_UNDEFINED} + * </ul> + */ + public void notifySubtreeAccessibilityStateChanged( + View child, @NonNull View source, int changeType); + + /** + * Tells if this view parent can resolve the layout direction. + * See {@link View#setLayoutDirection(int)} + * + * @return True if this view parent can resolve the layout direction. + */ + public boolean canResolveLayoutDirection(); + + /** + * Tells if this view parent layout direction is resolved. + * See {@link View#setLayoutDirection(int)} + * + * @return True if this view parent layout direction is resolved. + */ + public boolean isLayoutDirectionResolved(); + + /** + * Return this view parent layout direction. See {@link View#getLayoutDirection()} + * + * @return {@link View#LAYOUT_DIRECTION_RTL} if the layout direction is RTL or returns + * {@link View#LAYOUT_DIRECTION_LTR} if the layout direction is not RTL. + */ + public int getLayoutDirection(); + + /** + * Tells if this view parent can resolve the text direction. + * See {@link View#setTextDirection(int)} + * + * @return True if this view parent can resolve the text direction. + */ + public boolean canResolveTextDirection(); + + /** + * Tells if this view parent text direction is resolved. + * See {@link View#setTextDirection(int)} + * + * @return True if this view parent text direction is resolved. + */ + public boolean isTextDirectionResolved(); + + /** + * Return this view parent text direction. See {@link View#getTextDirection()} + * + * @return the resolved text direction. Returns one of: + * + * {@link View#TEXT_DIRECTION_FIRST_STRONG} + * {@link View#TEXT_DIRECTION_ANY_RTL}, + * {@link View#TEXT_DIRECTION_LTR}, + * {@link View#TEXT_DIRECTION_RTL}, + * {@link View#TEXT_DIRECTION_LOCALE} + */ + public int getTextDirection(); + + /** + * Tells if this view parent can resolve the text alignment. + * See {@link View#setTextAlignment(int)} + * + * @return True if this view parent can resolve the text alignment. + */ + public boolean canResolveTextAlignment(); + + /** + * Tells if this view parent text alignment is resolved. + * See {@link View#setTextAlignment(int)} + * + * @return True if this view parent text alignment is resolved. + */ + public boolean isTextAlignmentResolved(); + + /** + * Return this view parent text alignment. See {@link android.view.View#getTextAlignment()} + * + * @return the resolved text alignment. Returns one of: + * + * {@link View#TEXT_ALIGNMENT_GRAVITY}, + * {@link View#TEXT_ALIGNMENT_CENTER}, + * {@link View#TEXT_ALIGNMENT_TEXT_START}, + * {@link View#TEXT_ALIGNMENT_TEXT_END}, + * {@link View#TEXT_ALIGNMENT_VIEW_START}, + * {@link View#TEXT_ALIGNMENT_VIEW_END} + */ + public int getTextAlignment(); + + /** + * React to a descendant view initiating a nestable scroll operation, claiming the + * nested scroll operation if appropriate. + * + * <p>This method will be called in response to a descendant view invoking + * {@link View#startNestedScroll(int)}. Each parent up the view hierarchy will be + * given an opportunity to respond and claim the nested scrolling operation by returning + * <code>true</code>.</p> + * + * <p>This method may be overridden by ViewParent implementations to indicate when the view + * is willing to support a nested scrolling operation that is about to begin. If it returns + * true, this ViewParent will become the target view's nested scrolling parent for the duration + * of the scroll operation in progress. When the nested scroll is finished this ViewParent + * will receive a call to {@link #onStopNestedScroll(View)}. + * </p> + * + * @param child Direct child of this ViewParent containing target + * @param target View that initiated the nested scroll + * @param nestedScrollAxes Flags consisting of {@link View#SCROLL_AXIS_HORIZONTAL}, + * {@link View#SCROLL_AXIS_VERTICAL} or both + * @return true if this ViewParent accepts the nested scroll operation + */ + public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes); + + /** + * React to the successful claiming of a nested scroll operation. + * + * <p>This method will be called after + * {@link #onStartNestedScroll(View, View, int) onStartNestedScroll} returns true. It offers + * an opportunity for the view and its superclasses to perform initial configuration + * for the nested scroll. Implementations of this method should always call their superclass's + * implementation of this method if one is present.</p> + * + * @param child Direct child of this ViewParent containing target + * @param target View that initiated the nested scroll + * @param nestedScrollAxes Flags consisting of {@link View#SCROLL_AXIS_HORIZONTAL}, + * {@link View#SCROLL_AXIS_VERTICAL} or both + * @see #onStartNestedScroll(View, View, int) + * @see #onStopNestedScroll(View) + */ + public void onNestedScrollAccepted(View child, View target, int nestedScrollAxes); + + /** + * React to a nested scroll operation ending. + * + * <p>Perform cleanup after a nested scrolling operation. + * This method will be called when a nested scroll stops, for example when a nested touch + * scroll ends with a {@link MotionEvent#ACTION_UP} or {@link MotionEvent#ACTION_CANCEL} event. + * Implementations of this method should always call their superclass's implementation of this + * method if one is present.</p> + * + * @param target View that initiated the nested scroll + */ + public void onStopNestedScroll(View target); + + /** + * React to a nested scroll in progress. + * + * <p>This method will be called when the ViewParent's current nested scrolling child view + * dispatches a nested scroll event. To receive calls to this method the ViewParent must have + * previously returned <code>true</code> for a call to + * {@link #onStartNestedScroll(View, View, int)}.</p> + * + * <p>Both the consumed and unconsumed portions of the scroll distance are reported to the + * ViewParent. An implementation may choose to use the consumed portion to match or chase scroll + * position of multiple child elements, for example. The unconsumed portion may be used to + * allow continuous dragging of multiple scrolling or draggable elements, such as scrolling + * a list within a vertical drawer where the drawer begins dragging once the edge of inner + * scrolling content is reached.</p> + * + * @param target The descendent view controlling the nested scroll + * @param dxConsumed Horizontal scroll distance in pixels already consumed by target + * @param dyConsumed Vertical scroll distance in pixels already consumed by target + * @param dxUnconsumed Horizontal scroll distance in pixels not consumed by target + * @param dyUnconsumed Vertical scroll distance in pixels not consumed by target + */ + public void onNestedScroll(View target, int dxConsumed, int dyConsumed, + int dxUnconsumed, int dyUnconsumed); + + /** + * React to a nested scroll in progress before the target view consumes a portion of the scroll. + * + * <p>When working with nested scrolling often the parent view may want an opportunity + * to consume the scroll before the nested scrolling child does. An example of this is a + * drawer that contains a scrollable list. The user will want to be able to scroll the list + * fully into view before the list itself begins scrolling.</p> + * + * <p><code>onNestedPreScroll</code> is called when a nested scrolling child invokes + * {@link View#dispatchNestedPreScroll(int, int, int[], int[])}. The implementation should + * report how any pixels of the scroll reported by dx, dy were consumed in the + * <code>consumed</code> array. Index 0 corresponds to dx and index 1 corresponds to dy. + * This parameter will never be null. Initial values for consumed[0] and consumed[1] + * will always be 0.</p> + * + * @param target View that initiated the nested scroll + * @param dx Horizontal scroll distance in pixels + * @param dy Vertical scroll distance in pixels + * @param consumed Output. The horizontal and vertical scroll distance consumed by this parent + */ + public void onNestedPreScroll(View target, int dx, int dy, int[] consumed); + + /** + * Request a fling from a nested scroll. + * + * <p>This method signifies that a nested scrolling child has detected suitable conditions + * for a fling. Generally this means that a touch scroll has ended with a + * {@link VelocityTracker velocity} in the direction of scrolling that meets or exceeds + * the {@link ViewConfiguration#getScaledMinimumFlingVelocity() minimum fling velocity} + * along a scrollable axis.</p> + * + * <p>If a nested scrolling child view would normally fling but it is at the edge of + * its own content, it can use this method to delegate the fling to its nested scrolling + * parent instead. The parent may optionally consume the fling or observe a child fling.</p> + * + * @param target View that initiated the nested scroll + * @param velocityX Horizontal velocity in pixels per second + * @param velocityY Vertical velocity in pixels per second + * @param consumed true if the child consumed the fling, false otherwise + * @return true if this parent consumed or otherwise reacted to the fling + */ + public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed); + + /** + * React to a nested fling before the target view consumes it. + * + * <p>This method siginfies that a nested scrolling child has detected a fling with the given + * velocity along each axis. Generally this means that a touch scroll has ended with a + * {@link VelocityTracker velocity} in the direction of scrolling that meets or exceeds + * the {@link ViewConfiguration#getScaledMinimumFlingVelocity() minimum fling velocity} + * along a scrollable axis.</p> + * + * <p>If a nested scrolling parent is consuming motion as part of a + * {@link #onNestedPreScroll(View, int, int, int[]) pre-scroll}, it may be appropriate for + * it to also consume the pre-fling to complete that same motion. By returning + * <code>true</code> from this method, the parent indicates that the child should not + * fling its own internal content as well.</p> + * + * @param target View that initiated the nested scroll + * @param velocityX Horizontal velocity in pixels per second + * @param velocityY Vertical velocity in pixels per second + * @return true if this parent consumed the fling ahead of the target view + */ + public boolean onNestedPreFling(View target, float velocityX, float velocityY); + + /** + * React to an accessibility action delegated by a target descendant view before the target + * processes it. + * + * <p>This method may be called by a target descendant view if the target wishes to give + * a view in its parent chain a chance to react to the event before normal processing occurs. + * Most commonly this will be a scroll event such as + * {@link android.view.accessibility.AccessibilityNodeInfo#ACTION_SCROLL_FORWARD}. + * A ViewParent that supports acting as a nested scrolling parent should override this + * method and act accordingly to implement scrolling via accesibility systems.</p> + * + * @param target The target view dispatching this action + * @param action Action being performed; see + * {@link android.view.accessibility.AccessibilityNodeInfo} + * @param arguments Optional action arguments + * @return true if the action was consumed by this ViewParent + */ + public boolean onNestedPrePerformAccessibilityAction(View target, int action, Bundle arguments); +} |