Merge "Handle back key and outside touch correctly in more suggestions window"

This commit is contained in:
Tadashi G. Takaoka 2011-09-28 23:41:55 -07:00 committed by Android (Google) Code Review
commit 2087cf508a
2 changed files with 16 additions and 39 deletions

View file

@ -163,8 +163,6 @@ public class MoreSuggestionsView extends KeyboardView implements MoreKeysPanel {
- (container.getMeasuredHeight() - container.getPaddingBottom()) - (container.getMeasuredHeight() - container.getPaddingBottom())
+ parentView.getPaddingTop() + mCoordinates[1]; + parentView.getPaddingTop() + mCoordinates[1];
window.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
window.setOutsideTouchable(true);
window.setContentView(container); window.setContentView(container);
window.setWidth(container.getMeasuredWidth()); window.setWidth(container.getMeasuredWidth());
window.setHeight(container.getMeasuredHeight()); 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 @Override
public boolean onTouchEvent(MotionEvent me) { public boolean onTouchEvent(MotionEvent me) {
final int action = me.getAction(); final int action = me.getAction();

View file

@ -27,6 +27,7 @@ import android.graphics.Paint.Align;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Message; import android.os.Message;
import android.os.SystemClock; import android.os.SystemClock;
@ -506,10 +507,22 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer mMoreSuggestionsView = (MoreSuggestionsView)mMoreSuggestionsContainer
.findViewById(R.id.more_suggestions_view); .findViewById(R.id.more_suggestions_view);
mMoreSuggestionsBuilder = new MoreSuggestions.Builder(mMoreSuggestionsView); 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); 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(); final Resources res = context.getResources();
mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset( mMoreSuggestionsModalTolerance = res.getDimensionPixelOffset(
R.dimen.more_suggestions_modal_tolerance); R.dimen.more_suggestions_modal_tolerance);
@ -517,21 +530,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
context, mMoreSuggestionsSlidingListener); 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. * A connection back to the input method.
* @param listener * @param listener
@ -726,8 +724,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
private boolean dismissMoreSuggestions() { private boolean dismissMoreSuggestions() {
if (mMoreSuggestionsWindow.isShowing()) { if (mMoreSuggestionsWindow.isShowing()) {
mMoreSuggestionsWindow.dismiss(); mMoreSuggestionsWindow.dismiss();
mKeyboardView.dimEntireKeyboard(false);
mKeyboardView.setOnTouchListener(null);
return true; return true;
} }
return false; return false;
@ -767,7 +763,6 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
mOriginX = mLastX; mOriginX = mLastX;
mOriginY = mLastY; mOriginY = mLastY;
mKeyboardView.dimEntireKeyboard(true); mKeyboardView.dimEntireKeyboard(true);
mKeyboardView.setOnTouchListener(mMoreSuggestionsCanceller);
for (int i = 0; i < params.mSuggestionsCountInStrip; i++) { for (int i = 0; i < params.mSuggestionsCountInStrip; i++) {
mWords.get(i).setPressed(false); mWords.get(i).setPressed(false);
} }