aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java9
-rw-r--r--java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java2
-rw-r--r--java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/Keyboard.java22
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java12
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSet.java37
-rw-r--r--java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java4
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java2
-rw-r--r--java/src/com/android/inputmethod/latin/Dictionary.java2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java9
-rw-r--r--java/src/com/android/inputmethod/latin/LatinImeLogger.java1
-rw-r--r--java/src/com/android/inputmethod/latin/LocaleUtils.java12
-rw-r--r--java/src/com/android/inputmethod/latin/ResearchLogger.java3
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java4
14 files changed, 81 insertions, 42 deletions
diff --git a/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java b/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
index bf5f20158..a4ff8238c 100644
--- a/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
+++ b/java/src/com/android/inputmethod/compat/InputMethodManagerCompatWrapper.java
@@ -267,12 +267,13 @@ public class InputMethodManagerCompatWrapper {
final InputMethodSubtypeCompatWrapper currentIms = getCurrentInputMethodSubtype();
final List<InputMethodInfoCompatWrapper> imiList = getEnabledInputMethodList();
imiList.remove(myImi);
+ final PackageManager pm = mPackageManager;
Collections.sort(imiList, new Comparator<InputMethodInfoCompatWrapper>() {
@Override
public int compare(InputMethodInfoCompatWrapper imi1,
InputMethodInfoCompatWrapper imi2) {
- final CharSequence imiId1 = imi1.loadLabel(mPackageManager) + "/" + imi1.getId();
- final CharSequence imiId2 = imi2.loadLabel(mPackageManager) + "/" + imi2.getId();
+ final CharSequence imiId1 = imi1.loadLabel(pm) + "/" + imi1.getId();
+ final CharSequence imiId2 = imi2.loadLabel(pm) + "/" + imi2.getId();
return imiId1.toString().compareTo(imiId2.toString());
}
});
@@ -302,6 +303,7 @@ public class InputMethodManagerCompatWrapper {
index++;
}
+ final InputMethodServiceCompatWrapper service = mService;
final OnClickListener buttonListener = new OnClickListener() {
@Override
public void onClick(DialogInterface di, int whichButton) {
@@ -309,10 +311,9 @@ public class InputMethodManagerCompatWrapper {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
| Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mService.startActivity(intent);
+ service.startActivity(intent);
}
};
- final InputMethodServiceCompatWrapper service = mService;
final IBinder token = service.getWindow().getWindow().getAttributes().token;
final OnClickListener selectionListener = new OnClickListener() {
@Override
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index a9e48404a..df55aee94 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -129,7 +129,7 @@ public class SuggestionSpanUtils {
// TODO: Share the implementation for checking typed word validity between the IME
// and the spell checker.
final int flag = (sameAsTyped && !suggestedWords.mTypedWordValid)
- ? ((int)OBJ_FLAG_EASY_CORRECT | (int)OBJ_FLAG_MISSPELLED)
+ ? (OBJ_FLAG_EASY_CORRECT | OBJ_FLAG_MISSPELLED)
: 0;
final Object[] args =
diff --git a/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java b/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java
index 6a0d4dd9e..723ec2862 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionsInfoCompatUtils.java
@@ -24,7 +24,7 @@ public class SuggestionsInfoCompatUtils {
private static final Field FIELD_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = CompatUtils.getField(
SuggestionsInfo.class, "RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS");
private static final Integer OBJ_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS = (Integer) CompatUtils
- .getFieldValue(null, null, FIELD_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS);;
+ .getFieldValue(null, null, FIELD_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS);
private static final int RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS =
OBJ_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS != null
? OBJ_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS : 0;
@@ -34,7 +34,7 @@ public class SuggestionsInfoCompatUtils {
/**
* Returns the flag value of the attributes of the suggestions that can be obtained by
- * {@link #getSuggestionsAttributes}: this tells that the text service thinks
+ * {@link SuggestionsInfo#getSuggestionsAttributes()}: this tells that the text service thinks
* the result suggestions include highly recommended ones.
*/
public static int getValueOf_RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS() {
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index bc48b85ef..67e4e4a96 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -130,6 +130,7 @@ public class Keyboard {
private final HashMap<Integer, Key> mKeyCache = new HashMap<Integer, Key>();
private final ProximityInfo mProximityInfo;
+ private final boolean mProximityCharsCorrectionEnabled;
public Keyboard(Params params) {
mId = params.mId;
@@ -153,6 +154,19 @@ public class Keyboard {
mProximityInfo = new ProximityInfo(params.mId.mLocale.toString(),
params.GRID_WIDTH, params.GRID_HEIGHT, mOccupiedWidth, mOccupiedHeight,
mMostCommonKeyWidth, mMostCommonKeyHeight, mKeys, params.mTouchPositionCorrection);
+ mProximityCharsCorrectionEnabled = params.mProximityCharsCorrectionEnabled;
+ }
+
+ public boolean hasProximityCharsCorrection(int code) {
+ if (!mProximityCharsCorrectionEnabled) {
+ return false;
+ }
+ // Note: The native code has the main keyboard layout only at this moment.
+ // TODO: Figure out how to handle proximity characters information of all layouts.
+ final boolean canAssumeNativeHasProximityCharsInfoOfAllKeys = (
+ mId.mElementId == KeyboardId.ELEMENT_ALPHABET
+ || mId.mElementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED);
+ return canAssumeNativeHasProximityCharsInfoOfAllKeys || Character.isLetter(code);
}
public ProximityInfo getProximityInfo() {
@@ -230,6 +244,8 @@ public class Keyboard {
public int mMostCommonKeyHeight = 0;
public int mMostCommonKeyWidth = 0;
+ public boolean mProximityCharsCorrectionEnabled;
+
public final TouchPositionCorrection mTouchPositionCorrection =
new TouchPositionCorrection();
@@ -647,6 +663,10 @@ public class Keyboard {
mParams.mTouchPositionCorrection.setEnabled(enabled);
}
+ public void setProximityCharsCorrectionEnabled(boolean enabled) {
+ mParams.mProximityCharsCorrectionEnabled = enabled;
+ }
+
public Keyboard build() {
return new Keyboard(mParams);
}
@@ -753,9 +773,9 @@ public class Keyboard {
params.mMaxMoreKeysKeyboardColumn = keyAttr.getInt(
R.styleable.Keyboard_Key_maxMoreKeysColumn, 5);
+ params.mThemeId = keyboardAttr.getInt(R.styleable.Keyboard_themeId, 0);
params.mIconsSet.loadIcons(keyboardAttr);
- params.mThemeId = keyboardAttr.getInt(R.styleable.Keyboard_themeId, 0);
final int resourceId = keyboardAttr.getResourceId(
R.styleable.Keyboard_touchPositionCorrectionData, 0);
params.mTouchPositionCorrection.setEnabled(resourceId != 0);
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
index 16b4eafc9..275aacf36 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardActionListener.java
@@ -42,13 +42,13 @@ public interface KeyboardActionListener {
*
* @param primaryCode this is the code of the key that was pressed
* @param x x-coordinate pixel of touched event. If {@link #onCodeInput} is not called by
- * {@link PointerTracker#onTouchEvent} or so, the value should be
- * {@link #NOT_A_TOUCH_COORDINATE}. If it's called on insertion from the suggestion
- * strip, it should be {@link #SUGGESTION_STRIP_COORDINATE}.
+ * {@link PointerTracker} or so, the value should be {@link #NOT_A_TOUCH_COORDINATE}.
+ * If it's called on insertion from the suggestion strip, it should be
+ * {@link #SUGGESTION_STRIP_COORDINATE}.
* @param y y-coordinate pixel of touched event. If {@link #onCodeInput} is not called by
- * {@link PointerTracker#onTouchEvent} or so, the value should be
- * {@link #NOT_A_TOUCH_COORDINATE}. If it's called on insertion from the suggestion
- * strip, it should be {@link #SUGGESTION_STRIP_COORDINATE}.
+ * {@link PointerTracker} or so, the value should be {@link #NOT_A_TOUCH_COORDINATE}.
+ * If it's called on insertion from the suggestion strip, it should be
+ * {@link #SUGGESTION_STRIP_COORDINATE}.
*/
public void onCodeInput(int primaryCode, int x, int y);
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
index bb11a9b77..1bf2fc04e 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
@@ -28,6 +28,7 @@ import android.view.inputmethod.EditorInfo;
import com.android.inputmethod.compat.EditorInfoCompatUtils;
import com.android.inputmethod.compat.InputTypeCompatUtils;
+import com.android.inputmethod.keyboard.KeyboardSet.Params.ElementParams;
import com.android.inputmethod.latin.LatinIME;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.LocaleUtils;
@@ -53,7 +54,7 @@ public class KeyboardSet {
private static final String TAG = KeyboardSet.class.getSimpleName();
private static final boolean DEBUG_CACHE = LatinImeLogger.sDBG;
- private static final String TAG_KEYBOARD_SET = TAG;
+ private static final String TAG_KEYBOARD_SET = "KeyboardSet";
private static final String TAG_ELEMENT = "Element";
private final Context mContext;
@@ -104,10 +105,14 @@ public class KeyboardSet {
Locale mLocale;
int mOrientation;
int mWidth;
- // KeyboardSet element id to keyboard layout XML id map.
- final HashMap<Integer, Integer> mKeyboardSetElementIdToXmlIdMap =
- new HashMap<Integer, Integer>();
- Params() {}
+ // KeyboardSet element id to element's parameters map.
+ final HashMap<Integer, ElementParams> mKeyboardSetElementIdToParamsMap =
+ new HashMap<Integer, ElementParams>();
+
+ static class ElementParams {
+ int mKeyboardXmlId;
+ boolean mProximityCharsCorrectionEnabled;
+ }
}
public static void clearKeyboardCache() {
@@ -141,20 +146,21 @@ public class KeyboardSet {
break;
}
- Integer keyboardXmlId = mParams.mKeyboardSetElementIdToXmlIdMap.get(keyboardSetElementId);
- if (keyboardXmlId == null) {
- keyboardXmlId = mParams.mKeyboardSetElementIdToXmlIdMap.get(
+ ElementParams elementParams = mParams.mKeyboardSetElementIdToParamsMap.get(
+ keyboardSetElementId);
+ if (elementParams == null) {
+ elementParams = mParams.mKeyboardSetElementIdToParamsMap.get(
KeyboardId.ELEMENT_ALPHABET);
}
final KeyboardId id = getKeyboardId(keyboardSetElementId);
try {
- return getKeyboard(mContext, keyboardXmlId, id);
+ return getKeyboard(mContext, elementParams, id);
} catch (RuntimeException e) {
throw new KeyboardSetException(e, id);
}
}
- private Keyboard getKeyboard(Context context, int keyboardXmlId, KeyboardId id) {
+ private Keyboard getKeyboard(Context context, ElementParams elementParams, KeyboardId id) {
final Resources res = context.getResources();
final SoftReference<Keyboard> ref = sKeyboardCache.get(id);
Keyboard keyboard = (ref == null) ? null : ref.get();
@@ -166,8 +172,10 @@ public class KeyboardSet {
if (id.isAlphabetKeyboard()) {
builder.setAutoGenerate(sKeysCache);
}
- builder.load(keyboardXmlId, id);
+ builder.load(elementParams.mKeyboardXmlId, id);
builder.setTouchPositionCorrectionEnabled(mParams.mTouchPositionCorrectionEnabled);
+ builder.setProximityCharsCorrectionEnabled(
+ elementParams.mProximityCharsCorrectionEnabled);
keyboard = builder.build();
} finally {
LocaleUtils.setSystemLocale(res, savedLocale);
@@ -331,11 +339,14 @@ public class KeyboardSet {
TAG_ELEMENT, parser);
XmlParseUtils.checkEndTag(TAG_ELEMENT, parser);
+ final ElementParams elementParams = new ElementParams();
final int elementName = a.getInt(
R.styleable.KeyboardSet_Element_elementName, 0);
- final int elementKeyboard = a.getResourceId(
+ elementParams.mKeyboardXmlId = a.getResourceId(
R.styleable.KeyboardSet_Element_elementKeyboard, 0);
- mParams.mKeyboardSetElementIdToXmlIdMap.put(elementName, elementKeyboard);
+ elementParams.mProximityCharsCorrectionEnabled = a.getBoolean(
+ R.styleable.KeyboardSet_Element_enableProximityCharsCorrection, false);
+ mParams.mKeyboardSetElementIdToParamsMap.put(elementName, elementParams);
} finally {
a.recycle();
}
diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
index 2495b5472..e60fc9598 100644
--- a/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MoreKeysKeyboardView.java
@@ -47,7 +47,9 @@ public class MoreKeysKeyboardView extends KeyboardView implements MoreKeysPanel
new KeyboardActionListener.Adapter() {
@Override
public void onCodeInput(int primaryCode, int x, int y) {
- mListener.onCodeInput(primaryCode, x, y);
+ // Because a more keys keyboard doesn't need proximity characters correction, we don't
+ // send touch event coordinates.
+ mListener.onCodeInput(primaryCode, NOT_A_TOUCH_COORDINATE, NOT_A_TOUCH_COORDINATE);
}
@Override
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 8ec440500..311d3dc9d 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -252,7 +252,7 @@ public class BinaryDictionaryFileDumper {
* also apply.
*
* @param input the stream to be copied.
- * @param outputFile an outputstream to copy the data to.
+ * @param output an output stream to copy the data to.
*/
private static void checkMagicAndCopyFileTo(final BufferedInputStream input,
final FileOutputStream output) throws FileNotFoundException, IOException {
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index 79bf33850..9d26a2343 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -38,7 +38,7 @@ public abstract class Dictionary {
/**
* Interface to be implemented by classes requesting words to be fetched from the dictionary.
- * @see #getWords(WordComposer, WordCallback)
+ * @see #getWords(WordComposer, WordCallback, ProximityInfo)
*/
public interface WordCallback {
/**
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 86c153958..e6094d9e1 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -68,7 +68,6 @@ import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.keyboard.LatinKeyboardView;
-import com.android.inputmethod.latin.Utils.UsabilityStudyLogUtils;
import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.suggestions.SuggestionsView;
@@ -1318,7 +1317,13 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
if (mSettingsValues.isWordSeparator(primaryCode)) {
didAutoCorrect = handleSeparator(primaryCode, x, y, spaceState);
} else {
- handleCharacter(primaryCode, x, y, spaceState);
+ final Keyboard keyboard = mKeyboardSwitcher.getKeyboard();
+ if (keyboard != null && keyboard.hasProximityCharsCorrection(primaryCode)) {
+ handleCharacter(primaryCode, x, y, spaceState);
+ } else {
+ handleCharacter(primaryCode, NOT_A_TOUCH_COORDINATE, NOT_A_TOUCH_COORDINATE,
+ spaceState);
+ }
}
mExpectingUpdateSelection = true;
mShouldSwitchToLastSubtype = true;
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index 732efadd6..dc0868e7c 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -16,7 +16,6 @@
package com.android.inputmethod.latin;
-import android.content.Context;
import android.content.SharedPreferences;
import android.view.inputmethod.EditorInfo;
diff --git a/java/src/com/android/inputmethod/latin/LocaleUtils.java b/java/src/com/android/inputmethod/latin/LocaleUtils.java
index e05b47cb7..cf60089c5 100644
--- a/java/src/com/android/inputmethod/latin/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/LocaleUtils.java
@@ -168,12 +168,14 @@ public class LocaleUtils {
* @param newLocale the locale to change to.
* @return the old locale.
*/
- public static Locale setSystemLocale(final Resources res, final Locale newLocale) {
+ public static synchronized Locale setSystemLocale(final Resources res, final Locale newLocale) {
final Configuration conf = res.getConfiguration();
- final Locale saveLocale = conf.locale;
- conf.locale = newLocale;
- res.updateConfiguration(conf, res.getDisplayMetrics());
- return saveLocale;
+ final Locale oldLocale = conf.locale;
+ if (newLocale != null && !newLocale.equals(oldLocale)) {
+ conf.locale = newLocale;
+ res.updateConfiguration(conf, res.getDisplayMetrics());
+ }
+ return oldLocale;
}
private static final HashMap<String, Locale> sLocaleCache = new HashMap<String, Locale>();
diff --git a/java/src/com/android/inputmethod/latin/ResearchLogger.java b/java/src/com/android/inputmethod/latin/ResearchLogger.java
index 0694ffe77..570333cb7 100644
--- a/java/src/com/android/inputmethod/latin/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/latin/ResearchLogger.java
@@ -113,6 +113,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
close();
mFile = new File(directory, filename);
+ mFile.setReadable(false, false);
boolean append = true;
if (mFile.exists() && mFile.lastModified() + LOGFILE_PURGE_INTERVAL <
System.currentTimeMillis()) {
@@ -178,8 +179,8 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang
}
if (prefs != null) {
sIsLogging = prefs.getBoolean(PREF_USABILITY_STUDY_MODE, false);
+ prefs.registerOnSharedPreferenceChangeListener(this);
}
- prefs.registerOnSharedPreferenceChangeListener(this);
}
/**
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 555a49ef4..bd8532ebd 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -144,9 +144,7 @@ public class WordComposer {
}
/**
- * Add a new keystroke, with codes[0] containing the pressed key's unicode and the rest of
- * the array containing unicode for adjacent keys, sorted by reducing probability/proximity.
- * @param codes the array of unicode values
+ * Add a new keystroke, with the pressed key's code point with the touch point coordinates.
*/
private void add(int primaryCode, int keyX, int keyY) {
final int newIndex = size();