aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin
diff options
context:
space:
mode:
authorTom Ouyang <ouyang@google.com>2012-12-02 22:49:10 -0800
committerTom Ouyang <ouyang@google.com>2012-12-07 16:34:25 -0800
commitfa2d543785c52f639ad3157c57420f58a199c550 (patch)
treedb90bfc76553bc06dd34ebf7e0fdd6b9c7b7c027 /java/src/com/android/inputmethod/latin
parentc1d6374aed994ac68b010e5118f5256d645192c1 (diff)
downloadlatinime-fa2d543785c52f639ad3157c57420f58a199c550.tar.gz
latinime-fa2d543785c52f639ad3157c57420f58a199c550.tar.xz
latinime-fa2d543785c52f639ad3157c57420f58a199c550.zip
Refactor more keys menu framework (part 1)
Eliminate use of slower popup window for rendering the more keys menu and more suggestions menu. These menus are now drawn directly on the preview placer view. Change-Id: I40638724a6ffde2be4b5d0341d2a5db7ff7be930
Diffstat (limited to 'java/src/com/android/inputmethod/latin')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java9
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java38
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java39
3 files changed, 38 insertions, 48 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 305f38d8c..dcbbfca09 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -1064,12 +1064,13 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
final int suggestionsHeight = (mSuggestionsContainer.getVisibility() == View.GONE) ? 0
: mSuggestionsContainer.getHeight();
final int extraHeight = extractHeight + backingHeight + suggestionsHeight;
- int touchY = extraHeight;
+ int visibleTopY = extraHeight;
// Need to set touchable region only if input view is being shown
if (mainKeyboardView.isShown()) {
if (mSuggestionsContainer.getVisibility() == View.VISIBLE) {
- touchY -= suggestionsHeight;
+ visibleTopY -= suggestionsHeight;
}
+ final int touchY = mainKeyboardView.isShowingMoreKeysPanel() ? 0 : visibleTopY;
final int touchWidth = mainKeyboardView.getWidth();
final int touchHeight = mainKeyboardView.getHeight() + extraHeight
// Extend touchable region below the keyboard.
@@ -1077,8 +1078,8 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION;
outInsets.touchableRegion.set(0, touchY, touchWidth, touchHeight);
}
- outInsets.contentTopInsets = touchY;
- outInsets.visibleTopInsets = touchY;
+ outInsets.contentTopInsets = visibleTopY;
+ outInsets.visibleTopInsets = visibleTopY;
}
@Override
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
index 8cc09f39b..f0017c095 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
@@ -19,10 +19,8 @@ package com.android.inputmethod.latin.suggestions;
import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
-import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
-import android.widget.PopupWindow;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
@@ -148,37 +146,33 @@ public final class MoreSuggestionsView extends KeyboardView implements MoreKeysP
@Override
public void showMoreKeysPanel(final View parentView, final Controller controller,
- final int pointX, final int pointY, final PopupWindow window,
- final KeyboardActionListener listener) {
+ final int pointX, final int pointY, final KeyboardActionListener listener) {
mController = controller;
mListener = listener;
- final View container = (View)getParent();
+ final View container = getContainerView();
final MoreSuggestions pane = (MoreSuggestions)getKeyboard();
final int defaultCoordX = pane.mOccupiedWidth / 2;
// The coordinates of panel's left-top corner in parentView's coordinate system.
final int x = pointX - defaultCoordX - container.getPaddingLeft();
final int y = pointY - container.getMeasuredHeight() + container.getPaddingBottom();
- window.setContentView(container);
- window.setWidth(container.getMeasuredWidth());
- window.setHeight(container.getMeasuredHeight());
parentView.getLocationInWindow(mCoordinates);
- window.showAtLocation(parentView, Gravity.NO_GRAVITY,
- x + CoordinateUtils.x(mCoordinates), y + CoordinateUtils.y(mCoordinates));
+ // Ensure the horizontal position of the panel does not extend past the screen edges.
+ final int maxX = parentView.getMeasuredWidth() - container.getMeasuredWidth();
+ final int panelX = Math.max(0, Math.min(maxX, x + CoordinateUtils.x(mCoordinates)));
+ final int panelY = y + CoordinateUtils.y(mCoordinates);
+ container.setX(panelX);
+ container.setY(panelY);
mOriginX = x + container.getPaddingLeft();
mOriginY = y + container.getPaddingTop();
+ controller.onShowMoreKeysPanel(this);
}
- private boolean mIsDismissing;
-
@Override
public boolean dismissMoreKeysPanel() {
- if (mIsDismissing || mController == null) return false;
- mIsDismissing = true;
- final boolean dismissed = mController.dismissMoreKeysPanel();
- mIsDismissing = false;
- return dismissed;
+ if (mController == null) return false;
+ return mController.onDismissMoreKeysPanel();
}
@Override
@@ -225,4 +219,14 @@ public final class MoreSuggestionsView extends KeyboardView implements MoreKeysP
tracker.processMotionEvent(action, x, y, eventTime, mModalPanelKeyEventHandler);
return true;
}
+
+ @Override
+ public View getContainerView() {
+ return (View)getParent();
+ }
+
+ @Override
+ public boolean isShowingInParent() {
+ return (getContainerView().getParent() != null);
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index e7cb97fc2..9fc2bf987 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -27,7 +27,6 @@ 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.text.Spannable;
@@ -91,7 +90,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
private final View mMoreSuggestionsContainer;
private final MoreSuggestionsView mMoreSuggestionsView;
private final MoreSuggestions.Builder mMoreSuggestionsBuilder;
- private final PopupWindow mMoreSuggestionsWindow;
private final ArrayList<TextView> mWords = CollectionUtils.newArrayList();
private final ArrayList<TextView> mInfos = CollectionUtils.newArrayList();
@@ -641,21 +639,6 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
.findViewById(R.id.more_suggestions_view);
mMoreSuggestionsBuilder = new MoreSuggestions.Builder(mMoreSuggestionsView);
- final PopupWindow moreWindow = new PopupWindow(context);
- moreWindow.setWindowLayoutMode(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- 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);
@@ -738,17 +721,19 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
private final MoreKeysPanel.Controller mMoreSuggestionsController =
new MoreKeysPanel.Controller() {
@Override
- public boolean dismissMoreKeysPanel() {
- return dismissMoreSuggestions();
+ public boolean onDismissMoreKeysPanel() {
+ mKeyboardView.dimEntireKeyboard(false /* dimmed */);
+ return mKeyboardView.onDismissMoreKeysPanel();
+ }
+
+ @Override
+ public void onShowMoreKeysPanel(MoreKeysPanel panel) {
+ mKeyboardView.onShowMoreKeysPanel(panel);
}
};
boolean dismissMoreSuggestions() {
- if (mMoreSuggestionsWindow.isShowing()) {
- mMoreSuggestionsWindow.dismiss();
- return true;
- }
- return false;
+ return mMoreSuggestionsView.dismissMoreKeysPanel();
}
@Override
@@ -780,11 +765,11 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
final int pointX = stripWidth / 2;
final int pointY = -params.mMoreSuggestionsBottomGap;
moreKeysPanel.showMoreKeysPanel(this, mMoreSuggestionsController, pointX, pointY,
- mMoreSuggestionsWindow, mMoreSuggestionsListener);
+ mMoreSuggestionsListener);
mMoreSuggestionsMode = MORE_SUGGESTIONS_CHECKING_MODAL_OR_SLIDING;
mOriginX = mLastX;
mOriginY = mLastY;
- mKeyboardView.dimEntireKeyboard(true);
+ mKeyboardView.dimEntireKeyboard(true /* dimmed */);
for (int i = 0; i < params.mSuggestionsCountInStrip; i++) {
mWords.get(i).setPressed(false);
}
@@ -816,7 +801,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
@Override
public boolean dispatchTouchEvent(final MotionEvent me) {
- if (!mMoreSuggestionsWindow.isShowing()
+ if (!mMoreSuggestionsView.isShowingInParent()
|| mMoreSuggestionsMode == MORE_SUGGESTIONS_IN_MODAL_MODE) {
mLastX = (int)me.getX();
mLastY = (int)me.getY();