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

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

am ddbcce81: Merge "Cannot interact with dialogs when IME is up and on not...

am ddbcce81: Merge "Cannot interact with dialogs when IME is up and on not touch explored popups." into jb-dev

* commit 'ddbcce81':
  Cannot interact with dialogs when IME is up and on not touch explored popups.
parents 72329952 ddbcce81
Loading
Loading
Loading
Loading
+101 −13
Original line number Diff line number Diff line
@@ -138,18 +138,26 @@ final class AccessibilityInteractionController {
    }

    public void findAccessibilityNodeInfoByAccessibilityIdClientThread(
            long accessibilityNodeId, int interactionId,
            long accessibilityNodeId, int windowLeft, int windowTop, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
            long interrogatingTid) {
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_ACCESSIBILITY_ID;
        message.arg1 = flags;

        SomeArgs args = mPool.acquire();
        args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
        args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi3 = interactionId;
        args.arg1 = callback;

        SomeArgs moreArgs = mPool.acquire();
        moreArgs.argi1 = windowLeft;
        moreArgs.argi2 = windowTop;
        args.arg2 = moreArgs;

        message.obj = args;

        // If the interrogation is performed by the same thread as the main UI
        // thread in this process, set the message as a static reference so
        // after this call completes the same thread but in the interrogating
@@ -164,13 +172,21 @@ final class AccessibilityInteractionController {

    private void findAccessibilityNodeInfoByAccessibilityIdUiThread(Message message) {
        final int flags = message.arg1;

        SomeArgs args = (SomeArgs) message.obj;
        final int accessibilityViewId = args.argi1;
        final int virtualDescendantId = args.argi2;
        final int interactionId = args.argi3;
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;

        SomeArgs moreArgs = (SomeArgs) args.arg2;
        mViewRootImpl.mAttachInfo.mActualWindowLeft = moreArgs.argi1;
        mViewRootImpl.mAttachInfo.mActualWindowTop = moreArgs.argi2;

        mPool.release(moreArgs);
        mPool.release(args);

        List<AccessibilityNodeInfo> infos = mTempAccessibilityNodeInfoList;
        infos.clear();
        try {
@@ -200,17 +216,26 @@ final class AccessibilityInteractionController {
    }

    public void findAccessibilityNodeInfoByViewIdClientThread(long accessibilityNodeId,
            int viewId, int interactionId, IAccessibilityInteractionConnectionCallback callback,
            int flags, int interrogatingPid, long interrogatingTid) {
            int viewId, int windowLeft, int windowTop, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
            long interrogatingTid) {
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_VIEW_ID;
        message.arg1 = flags;
        message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);

        SomeArgs args = mPool.acquire();
        args.argi1 = viewId;
        args.argi2 = interactionId;
        args.arg1 = callback;

        SomeArgs moreArgs = mPool.acquire();
        moreArgs.argi1 = windowLeft;
        moreArgs.argi2 = windowTop;
        args.arg2 = moreArgs;

        message.obj = args;

        // If the interrogation is performed by the same thread as the main UI
        // thread in this process, set the message as a static reference so
        // after this call completes the same thread but in the interrogating
@@ -226,12 +251,20 @@ final class AccessibilityInteractionController {
    private void findAccessibilityNodeInfoByViewIdUiThread(Message message) {
        final int flags = message.arg1;
        final int accessibilityViewId = message.arg2;

        SomeArgs args = (SomeArgs) message.obj;
        final int viewId = args.argi1;
        final int interactionId = args.argi2;
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;

        SomeArgs moreArgs = (SomeArgs) args.arg2;
        mViewRootImpl.mAttachInfo.mActualWindowLeft = moreArgs.argi1;
        mViewRootImpl.mAttachInfo.mActualWindowTop = moreArgs.argi2;

        mPool.release(moreArgs);
        mPool.release(args);

        AccessibilityNodeInfo info = null;
        try {
            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
@@ -262,18 +295,27 @@ final class AccessibilityInteractionController {
    }

    public void findAccessibilityNodeInfosByTextClientThread(long accessibilityNodeId,
            String text, int interactionId, IAccessibilityInteractionConnectionCallback callback,
            int flags,  int interrogatingPid, long interrogatingTid) {
            String text, int windowLeft, int windowTop, int interactionId,
            IAccessibilityInteractionConnectionCallback callback, int flags,
            int interrogatingPid, long interrogatingTid) {
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FIND_ACCESSIBLITY_NODE_INFO_BY_TEXT;
        message.arg1 = flags;

        SomeArgs args = mPool.acquire();
        args.arg1 = text;
        args.argi1 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
        args.argi2 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi3 = interactionId;
        args.arg2 = callback;

        SomeArgs moreArgs = mPool.acquire();
        moreArgs.arg1 = callback;
        moreArgs.argi1 = windowLeft;
        moreArgs.argi2 = windowTop;
        args.arg2 = moreArgs;

        message.obj = args;

        // If the interrogation is performed by the same thread as the main UI
        // thread in this process, set the message as a static reference so
        // after this call completes the same thread but in the interrogating
@@ -288,14 +330,22 @@ final class AccessibilityInteractionController {

    private void findAccessibilityNodeInfosByTextUiThread(Message message) {
        final int flags = message.arg1;

        SomeArgs args = (SomeArgs) message.obj;
        final String text = (String) args.arg1;
        final int accessibilityViewId = args.argi1;
        final int virtualDescendantId = args.argi2;
        final int interactionId = args.argi3;

        SomeArgs moreArgs = (SomeArgs) args.arg2;
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg2;
            (IAccessibilityInteractionConnectionCallback) moreArgs.arg1;
        mViewRootImpl.mAttachInfo.mActualWindowLeft = moreArgs.argi1;
        mViewRootImpl.mAttachInfo.mActualWindowTop = moreArgs.argi2;

        mPool.release(moreArgs);
        mPool.release(args);

        List<AccessibilityNodeInfo> infos = null;
        try {
            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
@@ -353,19 +403,27 @@ final class AccessibilityInteractionController {
        }
    }

    public void findFocusClientThread(long accessibilityNodeId, int interactionId, int focusType,
            IAccessibilityInteractionConnectionCallback callback,  int flags, int interogatingPid,
            long interrogatingTid) {
    public void findFocusClientThread(long accessibilityNodeId, int focusType, int windowLeft,
            int windowTop, int interactionId, IAccessibilityInteractionConnectionCallback callback,
            int flags, int interogatingPid, long interrogatingTid) {
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FIND_FOCUS;
        message.arg1 = flags;
        message.arg2 = focusType;

        SomeArgs args = mPool.acquire();
        args.argi1 = interactionId;
        args.argi2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);
        args.argi3 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.arg1 = callback;

        SomeArgs moreArgs = mPool.acquire();
        moreArgs.argi1 = windowLeft;
        moreArgs.argi2 = windowTop;
        args.arg2 = moreArgs;

        message.obj = args;

        // If the interrogation is performed by the same thread as the main UI
        // thread in this process, set the message as a static reference so
        // after this call completes the same thread but in the interrogating
@@ -381,13 +439,21 @@ final class AccessibilityInteractionController {
    private void findFocusUiThread(Message message) {
        final int flags = message.arg1;
        final int focusType = message.arg2;

        SomeArgs args = (SomeArgs) message.obj;
        final int interactionId = args.argi1;
        final int accessibilityViewId = args.argi2;
        final int virtualDescendantId = args.argi3;
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;

        SomeArgs moreArgs = (SomeArgs) args.arg2;
        mViewRootImpl.mAttachInfo.mActualWindowLeft = moreArgs.argi1;
        mViewRootImpl.mAttachInfo.mActualWindowTop = moreArgs.argi2;

        mPool.release(moreArgs);
        mPool.release(args);

        AccessibilityNodeInfo focused = null;
        try {
            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
@@ -440,19 +506,27 @@ final class AccessibilityInteractionController {
        }
    }

    public void focusSearchClientThread(long accessibilityNodeId, int interactionId, int direction,
            IAccessibilityInteractionConnectionCallback callback, int flags, int interogatingPid,
            long interrogatingTid) {
    public void focusSearchClientThread(long accessibilityNodeId, int direction, int windowLeft,
            int windowTop, int interactionId, IAccessibilityInteractionConnectionCallback callback,
            int flags, int interogatingPid, long interrogatingTid) {
        Message message = mHandler.obtainMessage();
        message.what = PrivateHandler.MSG_FOCUS_SEARCH;
        message.arg1 = flags;
        message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);

        SomeArgs args = mPool.acquire();
        args.argi1 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi2 = direction;
        args.argi3 = interactionId;
        args.arg1 = callback;

        SomeArgs moreArgs = mPool.acquire();
        moreArgs.argi1 = windowLeft;
        moreArgs.argi2 = windowTop;
        args.arg2 = moreArgs;

        message.obj = args;

        // If the interrogation is performed by the same thread as the main UI
        // thread in this process, set the message as a static reference so
        // after this call completes the same thread but in the interrogating
@@ -468,13 +542,21 @@ final class AccessibilityInteractionController {
    private void focusSearchUiThread(Message message) {
        final int flags = message.arg1;
        final int accessibilityViewId = message.arg2;

        SomeArgs args = (SomeArgs) message.obj;
        final int virtualDescendantId = args.argi1;
        final int direction = args.argi2;
        final int interactionId = args.argi3;
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;

        SomeArgs moreArgs = (SomeArgs) args.arg2;
        mViewRootImpl.mAttachInfo.mActualWindowLeft = moreArgs.argi1;
        mViewRootImpl.mAttachInfo.mActualWindowTop = moreArgs.argi2;

        mPool.release(moreArgs);
        mPool.release(args);

        AccessibilityNodeInfo next = null;
        try {
            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
@@ -541,13 +623,16 @@ final class AccessibilityInteractionController {
        message.what = PrivateHandler.MSG_PERFORM_ACCESSIBILITY_ACTION;
        message.arg1 = flags;
        message.arg2 = AccessibilityNodeInfo.getAccessibilityViewId(accessibilityNodeId);

        SomeArgs args = mPool.acquire();
        args.argi1 = AccessibilityNodeInfo.getVirtualDescendantId(accessibilityNodeId);
        args.argi2 = action;
        args.argi3 = interactionId;
        args.arg1 = callback;
        args.arg2 = arguments;

        message.obj = args;

        // If the interrogation is performed by the same thread as the main UI
        // thread in this process, set the message as a static reference so
        // after this call completes the same thread but in the interrogating
@@ -563,6 +648,7 @@ final class AccessibilityInteractionController {
    private void perfromAccessibilityActionUiThread(Message message) {
        final int flags = message.arg1;
        final int accessibilityViewId = message.arg2;

        SomeArgs args = (SomeArgs) message.obj;
        final int virtualDescendantId = args.argi1;
        final int action = args.argi2;
@@ -570,7 +656,9 @@ final class AccessibilityInteractionController {
        final IAccessibilityInteractionConnectionCallback callback =
            (IAccessibilityInteractionConnectionCallback) args.arg1;
        Bundle arguments = (Bundle) args.arg2;

        mPool.release(args);

        boolean succeeded = false;
        try {
            if (mViewRootImpl.mView == null || mViewRootImpl.mAttachInfo == null) {
+39 −0
Original line number Diff line number Diff line
@@ -3609,6 +3609,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
                case R.styleable.View_importantForAccessibility:
                    setImportantForAccessibility(a.getInt(attr,
                            IMPORTANT_FOR_ACCESSIBILITY_DEFAULT));
                    break;
            }
        }
@@ -4901,6 +4902,30 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
        }
    }
    /**
     * Returns the delta between the actual and last reported window left.
     *
     * @hide
     */
    public int getActualAndReportedWindowLeftDelta() {
        if (mAttachInfo != null) {
            return mAttachInfo.mActualWindowLeft - mAttachInfo.mWindowLeft; 
        }
        return 0;
    }
    /**
     * Returns the delta between the actual and last reported window top.
     *
     * @hide
     */
    public int getActualAndReportedWindowTopDelta() {
        if (mAttachInfo != null) {
            return mAttachInfo.mActualWindowTop - mAttachInfo.mWindowTop;
        }
        return 0;
    }
    /**
     * Computes whether this view is visible to the user. Such a view is
     * attached, visible, all its predecessors are visible, it is not clipped
@@ -17306,6 +17331,20 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
         */
        int mWindowTop;
        /**
         * Left actual position of this view's window.
         *
         * TODO: This is a workaround for 6623031. Remove when fixed.
         */
        int mActualWindowLeft;
        /**
         * Actual top position of this view's window.
         *
         * TODO: This is a workaround for 6623031. Remove when fixed.
         */
        int mActualWindowTop;
        /**
         * Indicates whether views need to use 32-bit drawing caches
         */
+24 −16
Original line number Diff line number Diff line
@@ -5172,13 +5172,15 @@ public final class ViewRootImpl implements ViewParent,

        @Override
        public void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int flags, int interrogatingPid, long interrogatingTid) {
                int windowLeft, int windowTop, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfoByAccessibilityIdClientThread(accessibilityNodeId,
                        interactionId, callback, flags, interrogatingPid, interrogatingTid);
                            windowLeft, windowTop, interactionId, callback, flags, interrogatingPid,
                            interrogatingTid);
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                try {
@@ -5211,13 +5213,15 @@ public final class ViewRootImpl implements ViewParent,

        @Override
        public void findAccessibilityNodeInfoByViewId(long accessibilityNodeId, int viewId,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int flags, int interrogatingPid, long interrogatingTid) {
                int windowLeft, int windowTop, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfoByViewIdClientThread(accessibilityNodeId, viewId,
                            interactionId, callback, flags, interrogatingPid, interrogatingTid);
                            windowLeft, windowTop, interactionId, callback, flags, interrogatingPid,
                            interrogatingTid);
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                try {
@@ -5230,13 +5234,15 @@ public final class ViewRootImpl implements ViewParent,

        @Override
        public void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text,
                int interactionId, IAccessibilityInteractionConnectionCallback callback,
                int flags, int interrogatingPid, long interrogatingTid) {
                int windowLeft, int windowTop, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findAccessibilityNodeInfosByTextClientThread(accessibilityNodeId, text,
                            interactionId, callback, flags, interrogatingPid, interrogatingTid);
                            windowLeft, windowTop, interactionId, callback, flags, interrogatingPid,
                            interrogatingTid);
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                try {
@@ -5248,14 +5254,15 @@ public final class ViewRootImpl implements ViewParent,
        }

        @Override
        public void findFocus(long accessibilityNodeId, int interactionId, int focusType,
        public void findFocus(long accessibilityNodeId, int focusType, int windowLeft,
                int windowTop, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .findFocusClientThread(accessibilityNodeId, interactionId, focusType,
                            callback, flags, interrogatingPid, interrogatingTid);
                    .findFocusClientThread(accessibilityNodeId, focusType, windowLeft, windowTop,
                            interactionId, callback, flags, interrogatingPid, interrogatingTid);
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                try {
@@ -5267,14 +5274,15 @@ public final class ViewRootImpl implements ViewParent,
        }

        @Override
        public void focusSearch(long accessibilityNodeId, int interactionId, int direction,
        public void focusSearch(long accessibilityNodeId, int direction, int windowLeft,
                int windowTop, int interactionId,
                IAccessibilityInteractionConnectionCallback callback, int flags,
                int interrogatingPid, long interrogatingTid) {
            ViewRootImpl viewRootImpl = mViewRootImpl.get();
            if (viewRootImpl != null && viewRootImpl.mView != null) {
                viewRootImpl.getAccessibilityInteractionController()
                    .focusSearchClientThread(accessibilityNodeId, interactionId, direction,
                            callback, flags, interrogatingPid, interrogatingTid);
                    .focusSearchClientThread(accessibilityNodeId, direction, windowLeft, windowTop,
                            interactionId, callback, flags, interrogatingPid, interrogatingTid);
            } else {
                // We cannot make the call and notify the caller so it does not wait.
                try {
+7 −0
Original line number Diff line number Diff line
@@ -382,6 +382,10 @@ public class AccessibilityNodeInfo implements Parcelable {

    private int mConnectionId = UNDEFINED;

    // TODO: These are a workaround for 6623031. Remove when fixed.
    private int mActualAndReportedWindowLeftDelta;
    private int mActualAndReportedWindowTopDelta;

    /**
     * Hide constructor from clients.
     */
@@ -428,6 +432,8 @@ public class AccessibilityNodeInfo implements Parcelable {
        final int rootAccessibilityViewId =
            (root != null) ? root.getAccessibilityViewId() : UNDEFINED;
        mSourceNodeId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
        mActualAndReportedWindowLeftDelta = root.getActualAndReportedWindowLeftDelta();
        mActualAndReportedWindowTopDelta = root.getActualAndReportedWindowTopDelta();
    }

    /**
@@ -831,6 +837,7 @@ public class AccessibilityNodeInfo implements Parcelable {
    public void setBoundsInScreen(Rect bounds) {
        enforceNotSealed();
        mBoundsInScreen.set(bounds.left, bounds.top, bounds.right, bounds.bottom);
        mBoundsInScreen.offset(mActualAndReportedWindowLeftDelta, mActualAndReportedWindowTopDelta);
    }

    /**
+15 −15
Original line number Diff line number Diff line
@@ -28,25 +28,25 @@ import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
 */
oneway interface IAccessibilityInteractionConnection {

    void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId, int interactionId,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid);
    void findAccessibilityNodeInfoByAccessibilityId(long accessibilityNodeId, int windowLeft,
        int windowTop, int interactionId, IAccessibilityInteractionConnectionCallback callback,
        int flags, int interrogatingPid, long interrogatingTid);

    void findAccessibilityNodeInfoByViewId(long accessibilityNodeId, int id, int interactionId,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid);
    void findAccessibilityNodeInfoByViewId(long accessibilityNodeId, int viewId, int windowLeft,
        int windowTop, int interactionId, IAccessibilityInteractionConnectionCallback callback,
        int flags, int interrogatingPid, long interrogatingTid);

    void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text, int interactionId,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid);
    void findAccessibilityNodeInfosByText(long accessibilityNodeId, String text, int windowLeft,
        int windowTop, int interactionId, IAccessibilityInteractionConnectionCallback callback,
        int flags, int interrogatingPid, long interrogatingTid);

    void findFocus(long accessibilityNodeId, int interactionId, int focusType,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid);
    void findFocus(long accessibilityNodeId, int focusType, int windowLeft, int windowTop,
        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
        int interrogatingPid, long interrogatingTid);

    void focusSearch(long accessibilityNodeId, int interactionId, int direction,
        IAccessibilityInteractionConnectionCallback callback, int flags, int interrogatingPid,
        long interrogatingTid);
    void focusSearch(long accessibilityNodeId, int direction, int windowLeft, int windowTop,
        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
        int interrogatingPid, long interrogatingTid);

    void performAccessibilityAction(long accessibilityNodeId, int action, in Bundle arguments,
        int interactionId, IAccessibilityInteractionConnectionCallback callback, int flags,
Loading