aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/com/android/inputmethod')
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java14
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java59
-rw-r--r--java/src/com/android/inputmethod/keyboard/PopupPanel.java19
4 files changed, 58 insertions, 39 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index be04b5a52..5fa9b8fc4 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -81,6 +81,7 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
private int mOldPointerCount = 1;
private int mOldKeyIndex;
+ private final boolean mConfigShowMiniKeyboardAtTouchedPoint;
protected KeyDetector mKeyDetector;
// To detect double tap.
@@ -225,6 +226,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
a.recycle();
final Resources res = getResources();
+ mConfigShowMiniKeyboardAtTouchedPoint = res.getBoolean(
+ R.bool.config_show_mini_keyboard_at_touched_point);
final float keyHysteresisDistance = res.getDimension(R.dimen.key_hysteresis_distance);
mKeyDetector = new KeyDetector(keyHysteresisDistance);
@@ -459,7 +462,13 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
mPopupPanel = popupPanel;
mPopupPanelPointerTrackerId = tracker.mPointerId;
- popupPanel.showPopupPanel(this, parentKey, tracker, mPopupWindow);
+ final Keyboard keyboard = getKeyboard();
+ mPopupPanel.setShifted(keyboard.isShiftedOrShiftLocked());
+ final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
+ : parentKey.mX + parentKey.mWidth / 2;
+ final int pointY = parentKey.mY - keyboard.mVerticalGap;
+ popupPanel.showPopupPanel(
+ this, this, pointX, pointY, mPopupWindow, getKeyboardActionListener());
final int translatedX = popupPanel.translateX(tracker.getLastX());
final int translatedY = popupPanel.translateY(tracker.getLastY());
tracker.onShowPopupPanel(translatedX, translatedY, SystemClock.uptimeMillis(), popupPanel);
@@ -486,6 +495,9 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
@Override
public boolean onTouchEvent(MotionEvent me) {
+ if (getKeyboard() == null) {
+ return false;
+ }
return mTouchScreenRegulator.onTouchEvent(me);
}
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index d33cb442b..b61947232 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -63,13 +63,12 @@ public class PointerTracker {
public TimerProxy getTimerProxy();
}
- public interface DrawingProxy {
+ public interface DrawingProxy extends PopupPanel.Controller {
public void invalidateKey(Key key);
public TextView inflateKeyPreviewText();
public void showKeyPreview(int keyIndex, PointerTracker tracker);
public void cancelShowKeyPreview(PointerTracker tracker);
public void dismissKeyPreview(PointerTracker tracker);
- public boolean dismissPopupPanel();
}
public interface TimerProxy {
@@ -284,7 +283,7 @@ public class PointerTracker {
mListener.onCancelInput();
}
- public void setKeyDetectorInner(KeyDetector keyDetector) {
+ private void setKeyDetectorInner(KeyDetector keyDetector) {
mKeyDetector = keyDetector;
mKeyboard = keyDetector.getKeyboard();
mKeys = mKeyboard.mKeys;
diff --git a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
index c3b5825f5..8b8b27b39 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupMiniKeyboardView.java
@@ -36,12 +36,12 @@ import java.util.List;
*/
public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
private final int[] mCoordinates = new int[2];
- private final boolean mConfigShowMiniKeyboardAtTouchedPoint;
private final KeyDetector mKeyDetector;
private final int mVerticalCorrection;
- private LatinKeyboardView mParentKeyboardView;
+ private Controller mController;
+ private KeyboardActionListener mListener;
private int mOriginX;
private int mOriginY;
@@ -101,30 +101,29 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
public void cancelKeyTimers() {}
};
- private final KeyboardActionListener mListner = new KeyboardActionListener() {
+ private final KeyboardActionListener mMiniKeyboardListener = new KeyboardActionListener() {
@Override
public void onCodeInput(int primaryCode, int[] keyCodes, int x, int y) {
- mParentKeyboardView.getKeyboardActionListener()
- .onCodeInput(primaryCode, keyCodes, x, y);
+ mListener.onCodeInput(primaryCode, keyCodes, x, y);
}
@Override
public void onTextInput(CharSequence text) {
- mParentKeyboardView.getKeyboardActionListener().onTextInput(text);
+ mListener.onTextInput(text);
}
@Override
public void onCancelInput() {
- mParentKeyboardView.getKeyboardActionListener().onCancelInput();
+ mListener.onCancelInput();
}
@Override
public void onPress(int primaryCode, boolean withSliding) {
- mParentKeyboardView.getKeyboardActionListener().onPress(primaryCode, withSliding);
+ mListener.onPress(primaryCode, withSliding);
}
@Override
public void onRelease(int primaryCode, boolean withSliding) {
- mParentKeyboardView.getKeyboardActionListener().onRelease(primaryCode, withSliding);
+ mListener.onRelease(primaryCode, withSliding);
}
@Override
public boolean onCustomRequest(int requestCode) { return false; }
@@ -144,8 +143,6 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
a.recycle();
final Resources res = context.getResources();
- mConfigShowMiniKeyboardAtTouchedPoint = res.getBoolean(
- R.bool.config_show_mini_keyboard_at_touched_point);
// Override default ProximityKeyDetector.
mKeyDetector = new MiniKeyboardKeyDetector(res.getDimension(
R.dimen.mini_keyboard_slide_allowance));
@@ -179,7 +176,7 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
@Override
public KeyboardActionListener getKeyboardActionListener() {
- return mListner;
+ return mMiniKeyboardListener;
}
@Override
@@ -200,34 +197,36 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
}
@Override
- public void showPopupPanel(LatinKeyboardView parentKeyboardView, Key parentKey,
- PointerTracker tracker, PopupWindow window) {
- mParentKeyboardView = parentKeyboardView;
+ public void setShifted(boolean shifted) {
+ final MiniKeyboard miniKeyboard = (MiniKeyboard)getKeyboard();
+ if (miniKeyboard.setShifted(shifted)) {
+ invalidateAllKeys();
+ }
+ }
+
+ @Override
+ public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
+ PopupWindow window, KeyboardActionListener listener) {
+ mController = controller;
+ mListener = listener;
final View container = (View)getParent();
final MiniKeyboard miniKeyboard = (MiniKeyboard)getKeyboard();
- final Keyboard parentKeyboard = parentKeyboardView.getKeyboard();
- parentKeyboardView.getLocationInWindow(mCoordinates);
- final int pointX = (mConfigShowMiniKeyboardAtTouchedPoint) ? tracker.getLastX()
- : parentKey.mX + parentKey.mWidth / 2;
- final int pointY = parentKey.mY;
+ parentView.getLocationInWindow(mCoordinates);
final int miniKeyboardLeft = pointX - miniKeyboard.getDefaultCoordX()
- + parentKeyboardView.getPaddingLeft();
+ + parentView.getPaddingLeft();
final int x = wrapUp(Math.max(0, Math.min(miniKeyboardLeft,
- parentKeyboardView.getWidth() - miniKeyboard.mOccupiedWidth))
+ parentView.getWidth() - miniKeyboard.mOccupiedWidth))
- container.getPaddingLeft() + mCoordinates[0],
- container.getMeasuredWidth(), 0, parentKeyboardView.getWidth());
- final int y = pointY - parentKeyboard.mVerticalGap
+ container.getMeasuredWidth(), 0, parentView.getWidth());
+ final int y = pointY
- (container.getMeasuredHeight() - container.getPaddingBottom())
- + parentKeyboardView.getPaddingTop() + mCoordinates[1];
+ + parentView.getPaddingTop() + mCoordinates[1];
- if (miniKeyboard.setShifted(parentKeyboard.isShiftedOrShiftLocked())) {
- invalidateAllKeys();
- }
window.setContentView(container);
window.setWidth(container.getMeasuredWidth());
window.setHeight(container.getMeasuredHeight());
- window.showAtLocation(parentKeyboardView, Gravity.NO_GRAVITY, x, y);
+ window.showAtLocation(parentView, Gravity.NO_GRAVITY, x, y);
mOriginX = x + container.getPaddingLeft() - mCoordinates[0];
mOriginY = y + container.getPaddingTop() - mCoordinates[1];
@@ -243,7 +242,7 @@ public class PopupMiniKeyboardView extends KeyboardView implements PopupPanel {
@Override
public boolean dismissPopupPanel() {
- return mParentKeyboardView.dismissPopupPanel();
+ return mController.dismissPopupPanel();
}
@Override
diff --git a/java/src/com/android/inputmethod/keyboard/PopupPanel.java b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
index db637c50b..5e51fd54a 100644
--- a/java/src/com/android/inputmethod/keyboard/PopupPanel.java
+++ b/java/src/com/android/inputmethod/keyboard/PopupPanel.java
@@ -16,18 +16,27 @@
package com.android.inputmethod.keyboard;
+import android.view.View;
import android.widget.PopupWindow;
public interface PopupPanel extends PointerTracker.KeyEventHandler {
+ public interface Controller {
+ public boolean dismissPopupPanel();
+ }
+
+ public void setShifted(boolean shifted);
+
/**
* Show popup panel.
- * @param parentKeyboardView the parent KeyboardView that has the parent key.
- * @param parentKey the parent key that is the source of this popup panel
- * @param tracker the pointer tracker that pressesd the parent key
+ * @param parentView the parent view of this popup panel
+ * @param controller the controller that can dismiss this popup panel
+ * @param pointX x coordinate of this popup panel
+ * @param pointY y coordinate of this popup panel
* @param window PopupWindow to be used to show this popup panel
+ * @param listener the listener that will receive keyboard action from this popup panel.
*/
- public void showPopupPanel(LatinKeyboardView parentKeyboardView, Key parentKey,
- PointerTracker tracker, PopupWindow window);
+ public void showPopupPanel(View parentView, Controller controller, int pointX, int pointY,
+ PopupWindow window, KeyboardActionListener listener);
/**
* Translate X-coordinate of touch event to the local X-coordinate of this PopupPanel.