Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec7c7ebf authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android (Google) Code Review
Browse files

Merge "API for finding accessibility focus in virtual tree not needed." into jb-dev

parents 9fba9925 45a02e08
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -25344,7 +25344,6 @@ package android.view.accessibility {
  public abstract class AccessibilityNodeProvider {
    ctor public AccessibilityNodeProvider();
    method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
    method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int);
    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int);
    method public boolean performAction(int, int, android.os.Bundle);
  }
+0 −1
Original line number Diff line number Diff line
@@ -25353,7 +25353,6 @@ package android.view.accessibility {
  public abstract class AccessibilityNodeProvider {
    ctor public AccessibilityNodeProvider();
    method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo(int);
    method public android.view.accessibility.AccessibilityNodeInfo findAccessibilityFocus(int);
    method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int);
    method public boolean performAction(int, int, android.os.Bundle);
  }
+4 −2
Original line number Diff line number Diff line
@@ -480,7 +480,10 @@ final class AccessibilityInteractionController {
                        // focus instead fetching all provider nodes to do the search here.
                        AccessibilityNodeProvider provider = host.getAccessibilityNodeProvider();
                        if (provider != null) {
                            focused = provider.findAccessibilityFocus(virtualDescendantId);
                            if (mViewRootImpl.mAccessibilityFocusedVirtualView != null) {
                                focused = AccessibilityNodeInfo.obtain(
                                        mViewRootImpl.mAccessibilityFocusedVirtualView);
                            }
                        } else if (virtualDescendantId == View.NO_ID) {
                            focused = host.createAccessibilityNodeInfo();
                        }
@@ -804,7 +807,6 @@ final class AccessibilityInteractionController {
            if (!(root instanceof ViewGroup)) {
                return;
            }
            ViewGroup rootGroup = (ViewGroup) root;
            HashMap<View, AccessibilityNodeInfo> addedChildren =
                new HashMap<View, AccessibilityNodeInfo>();
            ArrayList<View> children = mTempViewList;
+3 −28
Original line number Diff line number Diff line
@@ -4558,31 +4558,6 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
        if ((event.getEventType() & POPULATING_ACCESSIBILITY_EVENT_TYPES) != 0) {
            dispatchPopulateAccessibilityEvent(event);
        }
        // Intercept accessibility focus events fired by virtual nodes to keep
        // track of accessibility focus position in such nodes.
        final int eventType = event.getEventType();
        switch (eventType) {
            case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
                final long virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
                        event.getSourceNodeId());
                if (virtualNodeId != AccessibilityNodeInfo.UNDEFINED) {
                    ViewRootImpl viewRootImpl = getViewRootImpl();
                    if (viewRootImpl != null) {
                        viewRootImpl.setAccessibilityFocusedHost(this);
                    }
                }
            } break;
            case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
                final long virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
                        event.getSourceNodeId());
                if (virtualNodeId != AccessibilityNodeInfo.UNDEFINED) {
                    ViewRootImpl viewRootImpl = getViewRootImpl();
                    if (viewRootImpl != null) {
                        viewRootImpl.setAccessibilityFocusedHost(null);
                    }
                }
            } break;
        }
        // In the beginning we called #isShown(), so we know that getParent() is not null.
        getParent().requestSendAccessibilityEvent(this, event);
    }
@@ -6311,7 +6286,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
            mPrivateFlags2 |= ACCESSIBILITY_FOCUSED;
            ViewRootImpl viewRootImpl = getViewRootImpl();
            if (viewRootImpl != null) {
                viewRootImpl.setAccessibilityFocusedHost(this);
                viewRootImpl.setAccessibilityFocus(this, null);
            }
            invalidate();
            sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
@@ -6342,7 +6317,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
        if (viewRootImpl != null) {
            View focusHost = viewRootImpl.getAccessibilityFocusedHost();
            if (focusHost != null && ViewRootImpl.isViewDescendantOf(focusHost, this)) {
                viewRootImpl.setAccessibilityFocusedHost(null);
                viewRootImpl.setAccessibilityFocus(null, null);
            }
        }
    }
@@ -7953,7 +7928,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
                // If the window does not have input focus we take away accessibility
                // focus as soon as the user stop hovering over the view.
                if (mAttachInfo != null && !mAttachInfo.mHasWindowFocus) {
                    getViewRootImpl().setAccessibilityFocusedHost(null);
                    getViewRootImpl().setAccessibilityFocus(null, null);
                }
            }
        }
+33 −38
Original line number Diff line number Diff line
@@ -489,7 +489,7 @@ public final class ViewRootImpl implements ViewParent,
                // Keep track of the actual window flags supplied by the client.
                mClientWindowLayoutFlags = attrs.flags;

                setAccessibilityFocusedHost(null);
                setAccessibilityFocus(null, null);

                if (view instanceof RootViewSurfaceTaker) {
                    mSurfaceHolderCallback =
@@ -558,7 +558,7 @@ public final class ViewRootImpl implements ViewParent,
                    mInputChannel = null;
                    mFallbackEventHandler.setView(null);
                    unscheduleTraversals();
                    setAccessibilityFocusedHost(null);
                    setAccessibilityFocus(null, null);
                    throw new RuntimeException("Adding window failed", e);
                } finally {
                    if (restore) {
@@ -578,7 +578,7 @@ public final class ViewRootImpl implements ViewParent,
                    mAdded = false;
                    mFallbackEventHandler.setView(null);
                    unscheduleTraversals();
                    setAccessibilityFocusedHost(null);
                    setAccessibilityFocus(null, null);
                    switch (res) {
                        case WindowManagerImpl.ADD_BAD_APP_TOKEN:
                        case WindowManagerImpl.ADD_BAD_SUBWINDOW_TOKEN:
@@ -2319,9 +2319,6 @@ public final class ViewRootImpl implements ViewParent,
                viewGroup.offsetDescendantRectToMyCoords(mAccessibilityFocusedHost, bounds);
            }
        } else {
            if (mAccessibilityFocusedVirtualView == null) {
                mAccessibilityFocusedVirtualView = provider.findAccessibilityFocus(View.NO_ID);
            }
            if (mAccessibilityFocusedVirtualView == null) {
                return;
            }
@@ -2498,7 +2495,7 @@ public final class ViewRootImpl implements ViewParent,
        return mAccessibilityFocusedVirtualView;
    }

    void setAccessibilityFocusedHost(View host) {
    void setAccessibilityFocus(View view, AccessibilityNodeInfo node) {
        // If we have a virtual view with accessibility focus we need
        // to clear the focus and invalidate the virtual view bounds.
        if (mAccessibilityFocusedVirtualView != null) {
@@ -2526,24 +2523,16 @@ public final class ViewRootImpl implements ViewParent,
                provider.performAction(virtualNodeId,
                        AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS, null);
            }
            focusNode.recycle();
        }
        if (mAccessibilityFocusedHost != null) {
            // Clear accessibility focus in the view.
            mAccessibilityFocusedHost.clearAccessibilityFocusNoCallbacks();
        }

        // Set the new focus host.
        mAccessibilityFocusedHost = host;

        // If the host has a provide find the virtual descendant that has focus.
        if (mAccessibilityFocusedHost != null) {
            AccessibilityNodeProvider provider =
                mAccessibilityFocusedHost.getAccessibilityNodeProvider();
            if (provider != null) {
                mAccessibilityFocusedVirtualView = provider.findAccessibilityFocus(View.NO_ID);
                return;
            }
        }
        // Set the new focus host and node.
        mAccessibilityFocusedHost = view;
        mAccessibilityFocusedVirtualView = node;
    }

    public void requestChildFocus(View child, View focused) {
@@ -2629,7 +2618,7 @@ public final class ViewRootImpl implements ViewParent,

        destroyHardwareRenderer();

        setAccessibilityFocusedHost(null);
        setAccessibilityFocus(null, null);

        mView = null;
        mAttachInfo.mRootView = null;
@@ -2910,7 +2899,7 @@ public final class ViewRootImpl implements ViewParent,
                        mHasHadWindowFocus = true;
                    }

                    setAccessibilityFocusedHost(null);
                    setAccessibilityFocus(null, null);

                    if (mView != null && mAccessibilityManager.isEnabled()) {
                        if (hasWindowFocus) {
@@ -2982,7 +2971,7 @@ public final class ViewRootImpl implements ViewParent,
                invalidateDisplayLists();
            } break;
            case MSG_CLEAR_ACCESSIBILITY_FOCUS_HOST: {
                setAccessibilityFocusedHost(null);
                setAccessibilityFocus(null, null);
            } break;
            case MSG_DISPATCH_DONE_ANIMATING: {
                handleDispatchDoneAnimating();
@@ -4538,29 +4527,35 @@ public final class ViewRootImpl implements ViewParent,
        if (mView == null) {
            return false;
        }
        // Watch for accessibility focus change events from virtual nodes
        // to keep track of accessibility focus being on a virtual node.
        // Intercept accessibility focus events fired by virtual nodes to keep
        // track of accessibility focus position in such nodes.
        final int eventType = event.getEventType();
        switch (eventType) {
            case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
                final long sourceId = event.getSourceNodeId();
                // If the event is not from a virtual node we are not interested.
                final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(sourceId);
                if (virtualViewId == AccessibilityNodeInfo.UNDEFINED) {
                    break;
                final long sourceNodeId = event.getSourceNodeId();
                final int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(
                        sourceNodeId);
                View source = mView.findViewByAccessibilityId(accessibilityViewId);
                if (source != null) {
                    AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
                    if (provider != null) {
                        AccessibilityNodeInfo node = provider.createAccessibilityNodeInfo(
                                AccessibilityNodeInfo.getVirtualDescendantId(sourceNodeId));
                        setAccessibilityFocus(source, node);
                    }
                }
                final int realViewId = AccessibilityNodeInfo.getAccessibilityViewId(sourceId);
                View focusHost = mView.findViewByAccessibilityId(realViewId);
                setAccessibilityFocusedHost(focusHost);
            } break;
            case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
                final long sourceId = event.getSourceNodeId();
                // If the event is not from a virtual node we are not interested.
                final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(sourceId);
                if (virtualViewId == AccessibilityNodeInfo.UNDEFINED) {
                    break;
                final long sourceNodeId = event.getSourceNodeId();
                final int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(
                        sourceNodeId);
                View source = mView.findViewByAccessibilityId(accessibilityViewId);
                if (source != null) {
                    AccessibilityNodeProvider provider = source.getAccessibilityNodeProvider();
                    if (provider != null) {
                        setAccessibilityFocus(null, null);
                    }
                }
                setAccessibilityFocusedHost(null);
            } break;
        }
        mAccessibilityManager.sendAccessibilityEvent(event);
Loading