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

Commit c32b2091 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android Git Automerger
Browse files

am 45c4a8df: am ec7c7ebf: Merge "API for finding accessibility focus in...

am 45c4a8df: am ec7c7ebf: Merge "API for finding accessibility focus in virtual tree not needed." into jb-dev

* commit '45c4a8df':
  API for finding accessibility focus in virtual tree not needed.
parents 4fd225ca 45c4a8df
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
@@ -25436,7 +25436,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
@@ -4552,31 +4552,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        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);
    }
@@ -6300,7 +6275,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            mPrivateFlags2 |= ACCESSIBILITY_FOCUSED;
            ViewRootImpl viewRootImpl = getViewRootImpl();
            if (viewRootImpl != null) {
                viewRootImpl.setAccessibilityFocusedHost(this);
                viewRootImpl.setAccessibilityFocus(this, null);
            }
            invalidate();
            sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
@@ -6331,7 +6306,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        if (viewRootImpl != null) {
            View focusHost = viewRootImpl.getAccessibilityFocusedHost();
            if (focusHost != null && ViewRootImpl.isViewDescendantOf(focusHost, this)) {
                viewRootImpl.setAccessibilityFocusedHost(null);
                viewRootImpl.setAccessibilityFocus(null, null);
            }
        }
    }
@@ -7942,7 +7917,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
                // 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
@@ -488,7 +488,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 =
@@ -557,7 +557,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) {
@@ -577,7 +577,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:
@@ -2318,9 +2318,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;
            }
@@ -2497,7 +2494,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) {
@@ -2525,24 +2522,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) {
@@ -2628,7 +2617,7 @@ public final class ViewRootImpl implements ViewParent,

        destroyHardwareRenderer();

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

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

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

                    if (mView != null && mAccessibilityManager.isEnabled()) {
                        if (hasWindowFocus) {
@@ -2981,7 +2970,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();
@@ -4537,29 +4526,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