From bfc1d732ac92fa1bd5b19ad9e7c71ce9a1f9dc00 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 29 Sep 2011 14:11:21 +0900 Subject: [PATCH] Handle back key and outside touch correctly in more suggestions window Bug: 5385284 Change-Id: Ic0517182d294c79e37c88f1ef30cb4d2917b2800 --- .../latin/MoreSuggestionsView.java | 18 --------- .../inputmethod/latin/SuggestionsView.java | 37 ++++++++----------- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java index 5a2eb1632..51f6c040d 100644 --- a/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/MoreSuggestionsView.java @@ -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(); diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java index 9d0e42a18..fe54f4ae1 100644 --- a/java/src/com/android/inputmethod/latin/SuggestionsView.java +++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java @@ -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); }