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

Commit f772cba5 authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Accessibility active window not updated on time.

1. The active window is the one the user is touching or the one
   that has input focus. It has to be made current immediately
   after the user has stopped touching the screen because if the
   user types with the IME he should get a feedback for the
   letter typed in the text view which is in the input focused
   window. Note that we always deliver hover accessibility events
   (they are a result of user touching the screen) so change of
   the active window before all hover accessibility events from
   the touched window are delivered is fine.

bug:7296890

Change-Id: I1ae87c8419e2f19bd8eb68de084c7117c66894bc
parent 7ef38ea9
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -643,6 +643,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
        return mSecurityPolicy.mActiveWindowId;
    }

    void onTouchInteractionEnd() {
        mSecurityPolicy.onTouchInteractionEnd();
    }

    private void switchUser(int userId) {
        synchronized (mLock) {
            // The user switched so we do not need to restore the current user
@@ -2178,16 +2182,24 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                        mActiveWindowId = windowId;
                    }
                } break;
                case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:
                case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT: {
                case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER: {
                    mActiveWindowId = windowId;
                } break;
                case AccessibilityEvent.TYPE_TOUCH_INTERACTION_END: {
                    mActiveWindowId = getFocusedWindowId();
                } break;
            }
        }

        public void onTouchInteractionEnd() {
            // We want to set the active window to be current immediately
            // after the user has stopped touching the screen since if the
            // user types with the IME he should get a feedback for the
            // letter typed in the text view which is in the input focused
            // window. Note that we always deliver hover accessibility events
            // (they are a result of user touching the screen) so change of
            // the active window before all hover accessibility events from
            // the touched window are delivered is fine.
            mActiveWindowId = getFocusedWindowId();
        }

        public int getRetrievalAllowingWindowLocked() {
            return mActiveWindowId;
        }
+5 −0
Original line number Diff line number Diff line
@@ -304,6 +304,7 @@ class TouchExplorer implements EventStreamTransformation {
            mNext.clear();
        }
        mTouchExplorationInProgress = false;
        mAms.onTouchInteractionEnd();
    }

    @Override
@@ -615,6 +616,7 @@ class TouchExplorer implements EventStreamTransformation {
                }
            } break;
            case MotionEvent.ACTION_UP:
                mAms.onTouchInteractionEnd();
                // We know that we do not need the pre-fed gesture points are not
                // needed anymore since the last pointer just went up.
                mStrokeBuffer.clear();
@@ -737,6 +739,7 @@ class TouchExplorer implements EventStreamTransformation {
                 }
            } break;
            case MotionEvent.ACTION_UP: {
                mAms.onTouchInteractionEnd();
                // Announce the end of a new touch interaction.
                sendAccessibilityEvent(
                        AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
@@ -782,6 +785,7 @@ class TouchExplorer implements EventStreamTransformation {
                        AccessibilityEvent.TYPE_TOUCH_INTERACTION_END);
                //$FALL-THROUGH$
            case MotionEvent.ACTION_POINTER_UP: {
                mAms.onTouchInteractionEnd();
                mLongPressingPointerId = -1;
                mLongPressingPointerDeltaX = 0;
                mLongPressingPointerDeltaY = 0;
@@ -819,6 +823,7 @@ class TouchExplorer implements EventStreamTransformation {
                }
            } break;
            case MotionEvent.ACTION_UP: {
                mAms.onTouchInteractionEnd();
                // Announce the end of gesture recognition.
                sendAccessibilityEvent(
                        AccessibilityEvent.TYPE_GESTURE_DETECTION_END);