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

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

The back button key event is delivered correctly

Bug: 5275063
Change-Id: I439ce18665e40dc8b2e40e923e5cabfcae7c81cf
parent a35ea4cb
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -145,13 +145,6 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
        // Nothing to do with.
    }

    private final View.OnTouchListener mMotionEventDelegate = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent me) {
            return MoreSuggestionsView.this.dispatchTouchEvent(me);
        }
    };

    @Override
    public void showMoreKeysPanel(View parentView, Controller controller, int pointX, int pointY,
            PopupWindow window, KeyboardActionListener listener) {
@@ -170,9 +163,7 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
                - (container.getMeasuredHeight() - container.getPaddingBottom())
                + parentView.getPaddingTop() + mCoordinates[1];

        container.setOnTouchListener(mMotionEventDelegate);
        window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
        window.setFocusable(true);
        window.setOutsideTouchable(true);
        window.setContentView(container);
        window.setWidth(container.getMeasuredWidth());
@@ -193,6 +184,7 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {

    @Override
    public boolean dismissMoreKeysPanel() {
        if (mController == null) return false;
        return mController.dismissMoreKeysPanel();
    }

+28 −7
Original line number Diff line number Diff line
@@ -549,6 +549,21 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
                R.dimen.more_suggestions_modal_tolerance);
    }

    private final View.OnTouchListener mMoreSuggestionsCanceller = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent me) {
            if (!mMoreSuggestionsWindow.isShowing()) return false;

            switch (me.getAction()) {
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP:
                return mMoreSuggestionsView.dismissMoreKeysPanel();
            default:
                return true;
            }
        }
    };

    /**
     * A connection back to the input method.
     * @param listener
@@ -764,6 +779,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
        if (mMoreSuggestionsWindow.isShowing()) {
            mMoreSuggestionsWindow.dismiss();
            mKeyboardView.dimEntireKeyboard(false);
            mKeyboardView.setOnTouchListener(null);
            return true;
        }
        return false;
@@ -795,18 +811,22 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
            moreKeysPanel.showMoreKeysPanel(
                    this, mMoreSuggestionsController, pointX, pointY,
                    mMoreSuggestionsWindow, mMoreSuggestionsListener);
            mCheckingIfModalOrSlidingMode = true;
            mMoreSuggestionsMode = MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING;
            mOriginX = mLastX;
            mOriginY = mLastY;
            view.setPressed(false);
            mKeyboardView.dimEntireKeyboard(true);
            mKeyboardView.setOnTouchListener(mMoreSuggestionsCanceller);
            return true;
        }
        return false;
    }

    // Working variables for onLongClick and dispatchTouchEvent.
    private boolean mCheckingIfModalOrSlidingMode;
    private int mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_MODAL_MODE;
    private static final int MORE_SUGGESTIONS_IN_MODAL_MODE = 0;
    private static final int MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING = 1;
    private static final int MORE_SUGGESTIONS_IN_SLIDING_MODE = 2;
    private int mLastX;
    private int mLastY;
    private int mOriginX;
@@ -815,7 +835,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,

    @Override
    public boolean dispatchTouchEvent(MotionEvent me) {
        if (!mMoreSuggestionsWindow.isShowing()) {
        if (!mMoreSuggestionsWindow.isShowing()
                || mMoreSuggestionsMode == MORE_SUGGESTIONS_IN_MODAL_MODE) {
            mLastX = (int)me.getX();
            mLastY = (int)me.getY();
            return super.dispatchTouchEvent(me);
@@ -832,22 +853,22 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
        final int translatedX = moreKeysPanel.translateX(x);
        final int translatedY = moreKeysPanel.translateY(y);

        if (mCheckingIfModalOrSlidingMode) {
        if (mMoreSuggestionsMode == MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING) {
            if (Math.abs(x - mOriginX) >= mMoreSuggestionsModalTolerance
                    || mOriginY - y >= mMoreSuggestionsModalTolerance) {
                // Decided to be in the sliding input mode only when the touch point has been moved
                // upward.
                mCheckingIfModalOrSlidingMode = false;
                mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_SLIDING_MODE;
                tracker.onShowMoreKeysPanel(
                        translatedX, translatedY, SystemClock.uptimeMillis(), moreKeysPanel);
            } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) {
                // Decided to be in the modal input mode
                mCheckingIfModalOrSlidingMode = false;
                mMoreSuggestionsMode = MORE_SUGGESTIONS_IN_MODAL_MODE;
            }
            return true;
        }

        // Process sliding motion events
        // MORE_SUGGESTIONS_IN_SLIDING_MODE
        tracker.processMotionEvent(action, translatedX, translatedY, eventTime, moreKeysPanel);
        return true;
    }