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

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

am fb68fdb9: Merge "Accessibility should not change input focus behavior." into jb-dev

* commit 'fb68fdb9':
  Accessibility should not change input focus behavior.
parents 52501786 fb68fdb9
Loading
Loading
Loading
Loading
+18 −39
Original line number Diff line number Diff line
@@ -3019,18 +3019,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);
@@ -3039,6 +3036,8 @@ public final class ViewRootImpl implements ViewParent,
                        return true;
                    }
                }
            }
        }
        return false;
    }

@@ -3067,47 +3066,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;
    }