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

Commit dec599d1 authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Fix overwriting accessibility delegate in setKeyboard

A keyboard accessibility delegate object should be a singleton for
each keyboard view.

Bug: 15437933
Bug: 15419386
Change-Id: Ia70853c644d950ea6130c1f209b89929b1cb1ee5
parent 86a28db7
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -382,7 +382,9 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
        mLanguageOnSpacebarTextSize = keyHeight * mLanguageOnSpacebarTextRatio;

        if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
            if (mAccessibilityDelegate == null) {
                mAccessibilityDelegate = new MainKeyboardAccessibilityDelegate(this, mKeyDetector);
            }
            mAccessibilityDelegate.setKeyboard(keyboard);
        } else {
            mAccessibilityDelegate = null;
+7 −4
Original line number Diff line number Diff line
@@ -77,10 +77,13 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel
            // discarded at {@link InputView#dispatchHoverEvent(MotionEvent)}. Because only a hover
            // event that is on this view is dispatched by the platform, we should use a
            // {@link KeyDetector} that has no sliding allowance and no hysteresis.
            if (mAccessibilityDelegate == null) {
                mKeyDetector = new KeyDetector();
            mAccessibilityDelegate = new MoreKeysKeyboardAccessibilityDelegate(this, mKeyDetector);
                mAccessibilityDelegate = new MoreKeysKeyboardAccessibilityDelegate(
                        this, mKeyDetector);
                mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_keys_keyboard);
                mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_keys_keyboard);
            }
            mAccessibilityDelegate.setKeyboard(keyboard);
        } else {
            mKeyDetector = new MoreKeysDetector(getResources().getDimension(
+13 −4
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
    private OnKeyEventListener mListener = EMPTY_LISTENER;
    private final KeyDetector mKeyDetector = new KeyDetector();
    private final GestureDetector mGestureDetector;
    private final KeyboardAccessibilityDelegate<EmojiPageKeyboardView> mAccessibilityDelegate;
    private KeyboardAccessibilityDelegate<EmojiPageKeyboardView> mAccessibilityDelegate;

    public EmojiPageKeyboardView(final Context context, final AttributeSet attrs) {
        this(context, attrs, R.attr.keyboardViewStyle);
@@ -67,7 +67,6 @@ final class EmojiPageKeyboardView extends KeyboardView implements
        mGestureDetector = new GestureDetector(context, this);
        mGestureDetector.setIsLongpressEnabled(false /* isLongpressEnabled */);
        mHandler = new Handler();
        mAccessibilityDelegate = new KeyboardAccessibilityDelegate<>(this, mKeyDetector);
    }

    public void setOnKeyEventListener(final OnKeyEventListener listener) {
@@ -81,6 +80,14 @@ final class EmojiPageKeyboardView extends KeyboardView implements
    public void setKeyboard(final Keyboard keyboard) {
        super.setKeyboard(keyboard);
        mKeyDetector.setKeyboard(keyboard, 0 /* correctionX */, 0 /* correctionY */);
        if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
            if (mAccessibilityDelegate == null) {
                mAccessibilityDelegate = new KeyboardAccessibilityDelegate<>(this, mKeyDetector);
            }
            mAccessibilityDelegate.setKeyboard(keyboard);
        } else {
            mAccessibilityDelegate = null;
        }
    }

    /**
@@ -88,8 +95,10 @@ final class EmojiPageKeyboardView extends KeyboardView implements
     */
    @Override
    public boolean onHoverEvent(final MotionEvent event) {
        if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
            return mAccessibilityDelegate.onHoverEvent(event);
        final KeyboardAccessibilityDelegate<EmojiPageKeyboardView> accessibilityDelegate =
                mAccessibilityDelegate;
        if (accessibilityDelegate != null) {
            return accessibilityDelegate.onHoverEvent(event);
        }
        return super.onHoverEvent(event);
    }
+11 −3
Original line number Diff line number Diff line
@@ -56,11 +56,19 @@ public final class MoreSuggestionsView extends MoreKeysKeyboardView {
        super.setKeyboard(keyboard);
        // With accessibility mode off, {@link #mAccessibilityDelegate} is set to null at the
        // above {@link MoreKeysKeyboardView#setKeyboard(Keyboard)} call.
        // With accessibility mode on, {@link #mAccessibilityDelegate} is set to a
        // {@link MoreKeysKeyboardAccessibilityDelegate} object at the above
        // {@link MoreKeysKeyboardView#setKeyboard(Keyboard)} call. And the object has to be
        // overwritten by a {@link MoreSuggestionsAccessibilityDelegate} object here.
        if (AccessibilityUtils.getInstance().isAccessibilityEnabled()) {
            mAccessibilityDelegate = new MoreSuggestionsAccessibilityDelegate(this, mKeyDetector);
            if (!(mAccessibilityDelegate instanceof MoreSuggestionsAccessibilityDelegate)) {
                mAccessibilityDelegate = new MoreSuggestionsAccessibilityDelegate(
                        this, mKeyDetector);
                mAccessibilityDelegate.setOpenAnnounce(R.string.spoken_open_more_suggestions);
                mAccessibilityDelegate.setCloseAnnounce(R.string.spoken_close_more_suggestions);
            }
            mAccessibilityDelegate.setKeyboard(keyboard);
        }
    }

    @Override