diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index c268abb89..0749b3f36 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -248,27 +248,29 @@ public class Key { mOn = !mOn; } + public boolean isInside(int x, int y) { + return mKeyboard.isInside(this, x, y); + } + /** - * Detects if a point falls inside this key. + * Detects if a point falls on this key. * @param x the x-coordinate of the point * @param y the y-coordinate of the point - * @return whether or not the point falls inside the key. If the key is attached to an - * edge, it will assume that all points between the key and the edge are considered to be - * inside the key. + * @return whether or not the point falls on the key. If the key is attached to an edge, it will + * assume that all points between the key and the edge are considered to be on the key. */ - public boolean isInside(int x, int y) { - boolean leftEdge = (mEdgeFlags & Keyboard.EDGE_LEFT) > 0; - boolean rightEdge = (mEdgeFlags & Keyboard.EDGE_RIGHT) > 0; - boolean topEdge = (mEdgeFlags & Keyboard.EDGE_TOP) > 0; - boolean bottomEdge = (mEdgeFlags & Keyboard.EDGE_BOTTOM) > 0; - if ((x >= this.mX || (leftEdge && x <= this.mX + this.mWidth)) - && (x < this.mX + this.mWidth || (rightEdge && x >= this.mX)) - && (y >= this.mY || (topEdge && y <= this.mY + this.mHeight)) - && (y < this.mY + this.mHeight || (bottomEdge && y >= this.mY))) { - return true; - } else { - return false; - } + public boolean isOnKey(int x, int y) { + final int flags = mEdgeFlags; + final boolean leftEdge = (flags & Keyboard.EDGE_LEFT) != 0; + final boolean rightEdge = (flags & Keyboard.EDGE_RIGHT) != 0; + final boolean topEdge = (flags & Keyboard.EDGE_TOP) != 0; + final boolean bottomEdge = (flags & Keyboard.EDGE_BOTTOM) != 0; + final int left = this.mX; + final int right = left + this.mWidth; + final int top = this.mY; + final int bottom = top + this.mHeight; + return (x >= left || leftEdge) && (x < right || rightEdge) + && (y >= top || topEdge) && (y < bottom || bottomEdge); } /** diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index aa48292c7..ea0a1f9b9 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -409,6 +409,10 @@ public class Keyboard { } } + public boolean isInside(Key key, int x, int y) { + return key.isOnKey(x, y); + } + /** * Returns the indices of the keys that are closest to the given point. * @param x the x-coordinate of the point diff --git a/java/src/com/android/inputmethod/keyboard/LatinKey.java b/java/src/com/android/inputmethod/keyboard/LatinKey.java deleted file mode 100644 index 1df4227ae..000000000 --- a/java/src/com/android/inputmethod/keyboard/LatinKey.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package com.android.inputmethod.keyboard; - -import android.content.res.Resources; -import android.content.res.XmlResourceParser; - -// TODO: We should remove this class -public class LatinKey extends Key { - public LatinKey(Resources res, Row parent, int x, int y, - XmlResourceParser parser, KeyStyles keyStyles) { - super(res, parent, x, y, parser, keyStyles); - } - - /** - * Overriding this method so that we can reduce the target area for certain keys. - */ - @Override - public boolean isInside(int x, int y) { - boolean result = (mKeyboard instanceof LatinKeyboard) - && ((LatinKeyboard)mKeyboard).isInside(this, x, y); - return result; - } - - boolean isInsideSuper(int x, int y) { - return super.isInside(x, y); - } -} diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java index 934874868..4e337e6d7 100644 --- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java @@ -22,7 +22,6 @@ import com.android.inputmethod.latin.SubtypeSwitcher; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; -import android.content.res.XmlResourceParser; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; @@ -98,12 +97,6 @@ public class LatinKeyboard extends Keyboard { mSpaceKeyIndex = indexOf(CODE_SPACE); } - @Override - protected Key createKeyFromXml(Resources res, Row parent, int x, int y, - XmlResourceParser parser, KeyStyles keyStyles) { - return new LatinKey(res, parent, x, y, parser, keyStyles); - } - /** * @return a key which should be invalidated. */ @@ -264,10 +257,6 @@ public class LatinKeyboard extends Keyboard { return mSpaceDragLastDiff > 0 ? 1 : -1; } - boolean isCurrentlyInSpace() { - return mCurrentlyInSpace; - } - public void setPreferredLetters(int[] frequencies) { mPrefLetterFrequencies = frequencies; mPrefLetter = 0; @@ -289,8 +278,9 @@ public class LatinKeyboard extends Keyboard { * Does the magic of locking the touch gesture into the spacebar when * switching input languages. */ - @SuppressWarnings("unused") - public boolean isInside(LatinKey key, int x, int y) { + @Override + @SuppressWarnings("unused") // SubtypeSwitcher.USE_SPACEBAR_LANGUAGE_SWITCHER is constant + public boolean isInside(Key key, int x, int y) { final int code = key.mCodes[0]; if (code == CODE_SHIFT || code == CODE_DELETE) { y -= key.mHeight / 10; @@ -308,13 +298,13 @@ public class LatinKeyboard extends Keyboard { mSpaceDragLastDiff = diff; return true; } else { - boolean insideSpace = key.isInsideSuper(x, y); - if (insideSpace) { + boolean isOnSpace = key.isOnKey(x, y); + if (isOnSpace) { mCurrentlyInSpace = true; mSpaceDragStartX = x; updateLocaleDrag(0); } - return insideSpace; + return isOnSpace; } } } else if (mPrefLetterFrequencies != null) { @@ -327,16 +317,16 @@ public class LatinKeyboard extends Keyboard { final int[] pref = mPrefLetterFrequencies; if (mPrefLetter > 0) { if (DEBUG_PREFERRED_LETTER) { - if (mPrefLetter == code && !key.isInsideSuper(x, y)) { + if (mPrefLetter == code && !key.isOnKey(x, y)) { Log.d(TAG, "CORRECTED !!!!!!"); } } return mPrefLetter == code; } else { - final boolean inside = key.isInsideSuper(x, y); + final boolean isOnKey = key.isOnKey(x, y); int[] nearby = getNearestKeys(x, y); List nearbyKeys = getKeys(); - if (inside) { + if (isOnKey) { // If it's a preferred letter if (inPrefList(code, pref)) { // Check if its frequency is much lower than a nearby key @@ -386,7 +376,7 @@ public class LatinKeyboard extends Keyboard { } // Didn't find any if (mPrefLetter == 0) { - return inside; + return isOnKey; } else { return mPrefLetter == code; } @@ -396,7 +386,7 @@ public class LatinKeyboard extends Keyboard { // Lock into the spacebar if (mCurrentlyInSpace) return false; - return key.isInsideSuper(x, y); + return key.isOnKey(x, y); } private boolean inPrefList(int code, int[] pref) {