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

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

Accessibility should not change input focus behavior.

1. Removed a change in the input focus behavior I forgot
   to take out when submitted the main accessibility focus
   patch. Ugh..

bug:6320098

Change-Id: Id7942e8aac64ba4bf6df7e19f733fa70b368d1bb
parent 427db9b3
Loading
Loading
Loading
Loading
+18 −39
Original line number Diff line number Diff line
@@ -3013,18 +3013,15 @@ public final class ViewRootImpl implements ViewParent,
                // be when the window is first being added, and mFocused isn't
                // set yet.
                final View focused = mView.findFocus();
                if (focused != null) {
                    if (focused.isFocusableInTouchMode()) {
                        return true;
                    }
                if (focused != null && !focused.isFocusableInTouchMode()) {

                    final ViewGroup ancestorToTakeFocus =
                            findAncestorToTakeFocusInTouchMode(focused);
                    if (ancestorToTakeFocus != null) {
                        // there is an ancestor that wants focus after its descendants that
                        // is focusable in touch mode.. give it focus
                        return ancestorToTakeFocus.requestFocus();
                    }
                }
                    } else {
                        // nothing appropriate to have focus in touch mode, clear it out
                        mView.unFocus();
                        mAttachInfo.mTreeObserver.dispatchOnGlobalFocusChange(focused, null);
@@ -3033,6 +3030,8 @@ public final class ViewRootImpl implements ViewParent,
                        return true;
                    }
                }
            }
        }
        return false;
    }

@@ -3061,47 +3060,27 @@ public final class ViewRootImpl implements ViewParent,

    private boolean leaveTouchMode() {
        if (mView != null) {
            boolean inputFocusValid = false;
            if (mView.hasFocus()) {
                // i learned the hard way to not trust mFocusedView :)
                mFocusedView = mView.findFocus();
                if (!(mFocusedView instanceof ViewGroup)) {
                    // some view has focus, let it keep it
                    inputFocusValid = true;
                    return false;
                } else if (((ViewGroup)mFocusedView).getDescendantFocusability() !=
                        ViewGroup.FOCUS_AFTER_DESCENDANTS) {
                    // some view group has focus, and doesn't prefer its children
                    // over itself for focus, so let them keep it.
                    inputFocusValid = true;
                    return false;
                }
            }
            // In accessibility mode we always have a view that has the
            // accessibility focus and input focus follows it, i.e. we
            // try to give input focus to the accessibility focused view.
            if (!AccessibilityManager.getInstance(mView.mContext).isEnabled()) {
                // If the current input focus is not valid, find the best view to give
                // focus to in this brave new non-touch-mode world.
                if (!inputFocusValid) {

            // find the best view to give focus to in this brave new non-touch-mode
            // world
            final View focused = focusSearch(null, View.FOCUS_DOWN);
            if (focused != null) {
                return focused.requestFocus(View.FOCUS_DOWN);
            }
        }
            } else {
                // If the current input focus is not valid clear it but do not
                // give it to another view since the accessibility focus is
                // leading now and the input one follows.
                if (!inputFocusValid) {
                    if (mFocusedView != null) {
                        mView.unFocus();
                        mAttachInfo.mTreeObserver.dispatchOnGlobalFocusChange(mFocusedView, null);
                        mFocusedView = null;
                        mOldFocusedView = null;
                        return true;
                    }
                }
            }
        }
        return false;
    }