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

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

Handle back key and outside touch correctly in more suggestions window

Bug: 5385284
Change-Id: Ic0517182d294c79e37c88f1ef30cb4d2917b2800
parent 727672d3
Loading
Loading
Loading
Loading
+0 −18
Original line number Diff line number Diff line
@@ -163,8 +163,6 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
                - (container.getMeasuredHeight() - container.getPaddingBottom())
                + parentView.getPaddingTop() + mCoordinates[1];

        window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
        window.setOutsideTouchable(true);
        window.setContentView(container);
        window.setWidth(container.getMeasuredWidth());
        window.setHeight(container.getMeasuredHeight());
@@ -220,22 +218,6 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
        }
    };

    @Override
    public boolean dispatchTouchEvent(MotionEvent me) {
        final int index = me.getActionIndex();
        final int id = me.getPointerId(index);
        final PointerTracker tracker = PointerTracker.getPointerTracker(id, this);
        final int x = (int)me.getX(index);
        final int y = (int)me.getY(index);
        final boolean inside = (x >= 0 && x < getWidth() && y >= 0 && y < getHeight());
        if (inside || tracker.isInSlidingKeyInput()) {
            return super.dispatchTouchEvent(me);
        } else {
            dismissMoreKeysPanel();
            return true;
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent me) {
        final int action = me.getAction();
+16 −21
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.graphics.Paint.Align;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Message;
import android.os.SystemClock;
@@ -506,10 +507,22 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
        mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
                .findViewById(R.id.more_suggestions_view);
        mMoreSuggestionsBuilder = new MoreSuggestions.Builder(mMoreSuggestionsView);
        mMoreSuggestionsWindow = new PopupWindow(context);
        mMoreSuggestionsWindow.setWindowLayoutMode(

        final PopupWindow moreWindow = new PopupWindow(context);
        moreWindow.setWindowLayoutMode(
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        mMoreSuggestionsWindow.setBackgroundDrawable(null);
        moreWindow.setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
        moreWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
        moreWindow.setFocusable(true);
        moreWindow.setOutsideTouchable(true);
        moreWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                mKeyboardView.dimEntireKeyboard(false);
            }
        });
        mMoreSuggestionsWindow = moreWindow;

        final Resources res = context.getResources();
        mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset(
                R.dimen.more_suggestions_modal_tolerance);
@@ -517,21 +530,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
                context, mMoreSuggestionsSlidingListener);
    }

    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
@@ -726,8 +724,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
    private boolean dismissMoreSuggestions() {
        if (mMoreSuggestionsWindow.isShowing()) {
            mMoreSuggestionsWindow.dismiss();
            mKeyboardView.dimEntireKeyboard(false);
            mKeyboardView.setOnTouchListener(null);
            return true;
        }
        return false;
@@ -767,7 +763,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
            mOriginX = mLastX;
            mOriginY = mLastY;
            mKeyboardView.dimEntireKeyboard(true);
            mKeyboardView.setOnTouchListener(mMoreSuggestionsCanceller);
            for (int i = 0; i < params.mSuggestionsCountInStrip; i++) {
                mWords.get(i).setPressed(false);
            }