aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardId.java9
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSet.java94
-rw-r--r--java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java34
-rw-r--r--java/src/com/android/inputmethod/latin/LatinImeLogger.java1
4 files changed, 88 insertions, 50 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
index 3b3ff0709..b4172d41e 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java
@@ -73,15 +73,6 @@ public class KeyboardId {
private final int mHashCode;
public KeyboardId(int xmlId, int elementState, Locale locale, int orientation, int width,
- int mode, EditorInfo editorInfo, boolean settingsKeyEnabled,
- boolean clobberSettingsKey, boolean shortcutKeyEnabled, boolean hasShortcutKey) {
- this(xmlId, elementState, locale, orientation, width, mode,
- (editorInfo != null ? editorInfo.inputType : 0),
- (editorInfo != null ? editorInfo.imeOptions : 0),
- settingsKeyEnabled, clobberSettingsKey, shortcutKeyEnabled, hasShortcutKey);
- }
-
- private KeyboardId(int xmlId, int elementState, Locale locale, int orientation, int width,
int mode, int inputType, int imeOptions, boolean settingsKeyEnabled,
boolean clobberSettingsKey, boolean shortcutKeyEnabled, boolean hasShortcutKey) {
this.mLocale = locale;
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
index a28cfa85d..34296fa2a 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSet.java
@@ -17,11 +17,9 @@
package com.android.inputmethod.keyboard;
import android.content.Context;
-import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
-import android.util.DisplayMetrics;
import android.util.Xml;
import android.view.inputmethod.EditorInfo;
@@ -42,9 +40,9 @@ import java.util.Locale;
/**
* This class has a set of {@link KeyboardId}s. Each of them represents a different keyboard
- * specific to a keyboard state, such as alphabet, symbols, and so on. Layouts in the same
- * {@link KeyboardSet} are related to each other.
- * A {@link KeyboardSet} needs to be created for each {@link android.view.inputmethod.EditorInfo}.
+ * specific to a keyboard state, such as alphabet, symbols, and so on. Layouts in the same
+ * {@link KeyboardSet} are related to each other. A {@link KeyboardSet} needs to be created for each
+ * {@link android.view.inputmethod.EditorInfo}.
*/
public class KeyboardSet {
private static final String TAG_KEYBOARD_SET = "KeyboardSet";
@@ -55,56 +53,67 @@ public class KeyboardSet {
public final KeyboardId mSymbolsId;
public final KeyboardId mSymbolsShiftedId;
- KeyboardSet(Builder builder) {
- mAlphabetId = builder.getKeyboardId(false, false);
- mSymbolsId = builder.getKeyboardId(true, false);
- mSymbolsShiftedId = builder.getKeyboardId(true, true);
+ KeyboardSet(Params params) {
+ mAlphabetId = Builder.getKeyboardId(false, false, params);
+ mSymbolsId = Builder.getKeyboardId(true, false, params);
+ mSymbolsShiftedId = Builder.getKeyboardId(true, true, params);
+ }
+
+ private static class Params {
+ int mMode;
+ int mInputTypes;
+ int mImeOptions;
+ boolean mSettingsKeyEnabled;
+ boolean mVoiceKeyEnabled;
+ boolean mVoiceKeyOnMain;
+ boolean mNoSettingsKey;
+ Locale mLocale;
+ int mOrientation;
+ int mWidth;
+ final HashMap<Integer, Integer> mElementKeyboards =
+ new HashMap<Integer, Integer>();
+
+ Params() {}
}
public static class Builder {
private final Resources mResources;
- private final EditorInfo mEditorInfo;
- private final HashMap<Integer, Integer> mElementKeyboards =
- new HashMap<Integer, Integer>();
-
- private final int mMode;
- private final boolean mSettingsKeyEnabled;
- private final boolean mVoiceKeyEnabled;
- private final boolean mVoiceKeyOnMain;
- private final boolean mNoSettingsKey;
- private final Locale mLocale;
- private final Configuration mConf;
- private final DisplayMetrics mMetrics;
+ private final Params mParams = new Params();
public Builder(Context context, EditorInfo editorInfo, SettingsValues settingsValues) {
mResources = context.getResources();
- mEditorInfo = editorInfo;
final SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance();
final String packageName = context.getPackageName();
+ final Params params = mParams;
- mMode = Utils.getKeyboardMode(mEditorInfo);
- mSettingsKeyEnabled = settingsValues.isSettingsKeyEnabled();
+ params.mMode = Utils.getKeyboardMode(editorInfo);
+ if (editorInfo != null) {
+ params.mInputTypes = editorInfo.inputType;
+ params.mImeOptions = editorInfo.imeOptions;
+ }
+ params.mSettingsKeyEnabled = settingsValues.isSettingsKeyEnabled();
@SuppressWarnings("deprecation")
final boolean noMicrophone = Utils.inPrivateImeOptions(
packageName, LatinIME.IME_OPTION_NO_MICROPHONE, editorInfo)
|| Utils.inPrivateImeOptions(
null, LatinIME.IME_OPTION_NO_MICROPHONE_COMPAT, editorInfo);
- mVoiceKeyEnabled = settingsValues.isVoiceKeyEnabled(editorInfo) && !noMicrophone;
- mVoiceKeyOnMain = settingsValues.isVoiceKeyOnMain();
- mNoSettingsKey = Utils.inPrivateImeOptions(
+ params.mVoiceKeyEnabled = settingsValues.isVoiceKeyEnabled(editorInfo) && !noMicrophone;
+ params.mVoiceKeyOnMain = settingsValues.isVoiceKeyOnMain();
+ params.mNoSettingsKey = Utils.inPrivateImeOptions(
packageName, LatinIME.IME_OPTION_NO_SETTINGS_KEY, editorInfo);
final boolean forceAscii = Utils.inPrivateImeOptions(
packageName, LatinIME.IME_OPTION_FORCE_ASCII, editorInfo);
final boolean asciiCapable = subtypeSwitcher.currentSubtypeContainsExtraValueKey(
LatinIME.SUBTYPE_EXTRA_VALUE_ASCII_CAPABLE);
- mLocale = (forceAscii && !asciiCapable) ? Locale.US : subtypeSwitcher.getInputLocale();
- mConf = mResources.getConfiguration();
- mMetrics = mResources.getDisplayMetrics();
+ params.mLocale = (forceAscii && !asciiCapable)
+ ? Locale.US : subtypeSwitcher.getInputLocale();
+ params.mOrientation = mResources.getConfiguration().orientation;
+ params.mWidth = mResources.getDisplayMetrics().widthPixels;
}
public KeyboardSet build() {
- final Locale savedLocale = LocaleUtils.setSystemLocale(mResources, mLocale);
+ final Locale savedLocale = LocaleUtils.setSystemLocale(mResources, mParams.mLocale);
try {
parseKeyboardSet(mResources, R.xml.keyboard_set);
} catch (Exception e) {
@@ -112,16 +121,18 @@ public class KeyboardSet {
} finally {
LocaleUtils.setSystemLocale(mResources, savedLocale);
}
- return new KeyboardSet(this);
+ return new KeyboardSet(mParams);
}
- KeyboardId getKeyboardId(boolean isSymbols, boolean isShift) {
- final int elementState = getElementState(mMode, isSymbols, isShift);
- final int xmlId = mElementKeyboards.get(elementState);
- final boolean hasShortcutKey = mVoiceKeyEnabled && (isSymbols != mVoiceKeyOnMain);
- return new KeyboardId(xmlId, elementState, mLocale, mConf.orientation,
- mMetrics.widthPixels, mMode, mEditorInfo, mSettingsKeyEnabled, mNoSettingsKey,
- mVoiceKeyEnabled, hasShortcutKey);
+ static KeyboardId getKeyboardId(boolean isSymbols, boolean isShift, Params params) {
+ final int elementState = getElementState(params.mMode, isSymbols, isShift);
+ final int xmlId = params.mElementKeyboards.get(elementState);
+ final boolean hasShortcutKey = params.mVoiceKeyEnabled
+ && (isSymbols != params.mVoiceKeyOnMain);
+ return new KeyboardId(xmlId, elementState, params.mLocale, params.mOrientation,
+ params.mWidth, params.mMode, params.mInputTypes, params.mImeOptions,
+ params.mSettingsKeyEnabled, params.mNoSettingsKey, params.mVoiceKeyEnabled,
+ hasShortcutKey);
}
private static int getElementState(int mode, boolean isSymbols, boolean isShift) {
@@ -198,7 +209,7 @@ public class KeyboardSet {
R.styleable.KeyboardSet_Element_elementName, 0);
final int elementKeyboard = a.getResourceId(
R.styleable.KeyboardSet_Element_elementKeyboard, 0);
- mElementKeyboards.put(elementName, elementKeyboard);
+ mParams.mElementKeyboards.put(elementName, elementKeyboard);
} finally {
a.recycle();
}
@@ -208,7 +219,8 @@ public class KeyboardSet {
public static String parseKeyboardLocale(Resources res, int resId)
throws XmlPullParserException, IOException {
final XmlPullParser parser = res.getXml(resId);
- if (parser == null) return "";
+ if (parser == null)
+ return "";
int event;
while ((event = parser.next()) != XmlPullParser.END_DOCUMENT) {
if (event == XmlPullParser.START_TAG) {
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
index 49b8ce76f..c09541f6d 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboardView.java
@@ -21,6 +21,7 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.os.Message;
+import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
@@ -38,9 +39,11 @@ import com.android.inputmethod.deprecated.VoiceProxy;
import com.android.inputmethod.keyboard.PointerTracker.DrawingProxy;
import com.android.inputmethod.keyboard.PointerTracker.TimerProxy;
import com.android.inputmethod.latin.LatinIME;
+import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.StaticInnerHandlerWrapper;
import com.android.inputmethod.latin.Utils;
+import com.android.inputmethod.latin.Utils.UsabilityStudyLogUtils;
import java.util.WeakHashMap;
@@ -62,6 +65,9 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
// Timing constants
private final int mKeyRepeatInterval;
+ // TODO: Kill process when the usability study mode was changed.
+ private static final boolean ENABLE_USABILITY_STUDY_LOG = LatinImeLogger.sUsabilityStudy;
+
// Mini keyboard
private PopupWindow mMoreKeysWindow;
private MoreKeysPanel mMoreKeysPanel;
@@ -513,6 +519,30 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
x = (int)me.getX(index);
y = (int)me.getY(index);
}
+ if (ENABLE_USABILITY_STUDY_LOG) {
+ final String eventTag;
+ switch (action) {
+ case MotionEvent.ACTION_UP:
+ eventTag = "[Up]";
+ break;
+ case MotionEvent.ACTION_DOWN:
+ eventTag = "[Down]";
+ break;
+ case MotionEvent.ACTION_POINTER_UP:
+ eventTag = "[PointerUp]";
+ break;
+ case MotionEvent.ACTION_POINTER_DOWN:
+ eventTag = "[PointerDown]";
+ break;
+ default:
+ eventTag = "[Action" + action + "]";
+ break;
+ }
+ if (!TextUtils.isEmpty(eventTag)) {
+ UsabilityStudyLogUtils.getInstance().write(
+ eventTag + eventTime + "," + id + "," + x + "," + y + "\t\t");
+ }
+ }
if (mKeyTimerHandler.isInKeyRepeat()) {
final PointerTracker tracker = getPointerTracker(id);
@@ -569,6 +599,10 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
py = (int)me.getY(i);
}
tracker.onMoveEvent(px, py, eventTime);
+ if (ENABLE_USABILITY_STUDY_LOG) {
+ UsabilityStudyLogUtils.getInstance().write("[Move]" + eventTime + ","
+ + me.getPointerId(i) + "," + px + "," + py + "\t\t");
+ }
}
} else {
getPointerTracker(id).processMotionEvent(action, x, y, eventTime, this);
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index da5058dd4..6f1adfe71 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -29,6 +29,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
public static boolean sDBG = false;
public static boolean sVISUALDEBUG = false;
+ public static boolean sUsabilityStudy = false;
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {