Handle back key and outside touch correctly in more suggestions window

Bug: 5385284
Change-Id: Ic0517182d294c79e37c88f1ef30cb4d2917b2800
main
Tadashi G. Takaoka 2011-09-29 14:11:21 +09:00
parent 727672d3fc
commit bfc1d732ac
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())
+ 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();

View File

@ -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);
}