log through group level abstractions

For the groups:
- LogGroup.MOTION subfields now deteremined in Utils.writeMotionEvent() rather
  than in LatinKeyboardView.processMotionEvent()
- LogGroup.KEY is now logged throguh LatinIME.onCodeInput() rather than
  Utils.push().  This catches keys more generally, including modifiers, and
  records touch positions for everything.  Removed now-redundant
  Utils.writeBackspace() and Utils.writeChar().
- LogGroup.CORRECTION uses Utils.writeCorrection(), and formats instead of
  leaving this to callers.
- LogGroup.STATE_CHANGE uses Utils.writeStateChange().  Optional fields are
  still left to callers, as this group has more variety.

Formats have changed to incorporate new fields.

Minor housekeeping:

ENABLE_USABILITY_STUDY_LOG constants replaced with variable references, as
the logging feature can be changed in Settings and therefore dynamically
changes.

New log format:

20120322-111203.621+0900        1332382323621   s       [onStartInputView]      com.socialnmobile.dictapps.notepad.color.note   2131624043      147457  1140850694
20120322-111204.912+0900        1332382324912   m       [Down]  2782355 0       243     171     0.5666667       0.895
20120322-111204.975+0900        1332382324975   m       [Move]  2782419 0       240     171     0.6     1.17
20120322-111204.983+0900        1332382324983   m       [Move]  2782428 0       238     171     0.6     1.1899999
20120322-111204.992+0900        1332382324992   m       [Move]  2782437 0       236     171     0.6     1.1899999
20120322-111205.002+0900        1332382325002   m       [Move]  2782446 0       232     170     0.6     1.1899999
20120322-111205.012+0900        1332382325012   m       [Move]  2782456 0       227     169     0.6     1.125
20120322-111205.021+0900        1332382325021   m       [Move]  2782465 0       224     168     0.6     1.125
20120322-111205.031+0900        1332382325031   m       [Move]  2782475 0       221     167     0.6     0.895
20120322-111205.040+0900        1332382325040   m       [Move]  2782483 0       213     164     0.6     0.58
20120322-111205.047+0900        1332382325047   m       [Up]    2782491 0       213     164     0.6     0.58
20120322-111205.052+0900        1332382325052   k       'D'     243     171
20120322-111205.228+0900        1332382325228   m       [Down]  2782622 0       171     71      0.6333334       1.275
20120322-111205.243+0900        1332382325243   m       [Move]  2782677 0       178     69      0.6333334       1.275
20120322-111205.325+0900        1332382325325   m       [Up]    2782750 0       178     69      0.6333334       1.275
20120322-111205.333+0900        1332382325333   k       'e'     171     71
20120322-111205.509+0900        1332382325509   m       [Down]  2782936 0       265     139     0.53333336      0.885
20120322-111205.512+0900        1332382325512   m       [Move]  2782954 0       265     141     0.53333336      1.04
20120322-111205.552+0900        1332382325552   m       [Move]  2782973 0       265     143     0.5666667       1.14
20120322-111205.663+0900        1332382325663   m       [Up]    2783102 0       265     143     0.5666667       1.14
20120322-111205.668+0900        1332382325668   k       'f'     265     139
20120322-111206.140+0900        1332382326140   m       [Down]  2783584 0       348     352     0.53333336      0.675
20120322-111206.206+0900        1332382326206   m       [Move]  2783648 0       348     354     0.5666667       0.73499995
20120322-111206.223+0900        1332382326223   m       [Move]  2783666 0       348     356     0.5666667       0.545
20120322-111206.232+0900        1332382326232   m       [Up]    2783674 0       348     356     0.5666667       0.545
20120322-111206.236+0900        1332382326236   k       ' '     348     352
20120322-111206.245+0900        1332382326245   c       [----]  Def             -1

Bug: 6188932
Change-Id: Iea46a0c683f858b72005b8e81191ef1d70262dca
main
Kurt Partridge 2012-03-22 11:13:33 +09:00
parent 78bf41b89c
commit fdd68f0657
3 changed files with 64 additions and 57 deletions

View File

@ -54,7 +54,6 @@ import com.android.inputmethod.latin.StringUtils;
import com.android.inputmethod.latin.SubtypeUtils;
import com.android.inputmethod.latin.Utils;
import com.android.inputmethod.latin.Utils.UsabilityStudyLogUtils;
import com.android.inputmethod.latin.Utils.UsabilityStudyLogUtils.LogGroup;
import java.util.Locale;
import java.util.WeakHashMap;
@ -70,9 +69,6 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
SuddenJumpingTouchEventHandler.ProcessMotionEvent {
private static final String TAG = LatinKeyboardView.class.getSimpleName();
// TODO: Kill process when the usability study mode was changed.
private static final boolean ENABLE_USABILITY_STUDY_LOG = LatinImeLogger.sUsabilityStudy;
/** Listener for {@link KeyboardActionListener}. */
private KeyboardActionListener mKeyboardActionListener;
@ -672,6 +668,8 @@ public class LatinKeyboardView extends KeyboardView implements PointerTracker.Ke
final int index = me.getActionIndex();
final int id = me.getPointerId(index);
final int x, y;
final float size = me.getSize(index);
final float pressure = me.getPressure(index);
if (mMoreKeysPanel != null && id == mMoreKeysPanelPointerTrackerId) {
x = mMoreKeysPanel.translateX((int)me.getX(index));
y = mMoreKeysPanel.translateY((int)me.getY(index));
@ -679,32 +677,11 @@ 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;
case MotionEvent.ACTION_MOVE: // Skip this as being logged below
eventTag = "";
break;
default:
eventTag = "[Action" + action + "]";
break;
}
if (!TextUtils.isEmpty(eventTag)) {
UsabilityStudyLogUtils.getInstance().write(LogGroup.MOTION_EVENT,
eventTag + eventTime + "," + id + "," + x + "," + y + ","
+ me.getSize(index) + "," + me.getPressure(index));
if (LatinImeLogger.sUsabilityStudy) {
if (action != MotionEvent.ACTION_MOVE) {
// Skip ACTION_MOVE events as they are logged below
UsabilityStudyLogUtils.getInstance().writeMotionEvent(action, eventTime, id, x,
y, size, pressure);
}
}
@ -764,11 +741,9 @@ 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(
LogGroup.MOTION_EVENT,
"[Move]" + eventTime + "," + me.getPointerId(i) + "," + px + "," + py
+ "," + me.getSize(i) + "," + me.getPressure(i));
if (LatinImeLogger.sUsabilityStudy) {
UsabilityStudyLogUtils.getInstance().writeMotionEvent(action, eventTime, id,
px, py, size, pressure);
}
}
} else {

View File

@ -68,6 +68,7 @@ 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.suggestions.SuggestionsView;
import java.io.FileDescriptor;
@ -1266,6 +1267,11 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
mDeleteCount = 0;
}
mLastKeyTime = when;
if (LatinImeLogger.sUsabilityStudy) {
UsabilityStudyLogUtils.getInstance().writeKeyEvent(primaryCode, x, y);
}
final KeyboardSwitcher switcher = mKeyboardSwitcher;
// The space state depends only on the last character pressed and its own previous
// state. Here, we revert the space state to neutral if the key is actually modifying

View File

@ -29,7 +29,9 @@ import android.os.Process;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.MotionEvent;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import java.io.BufferedReader;
@ -135,9 +137,6 @@ public class Utils {
// TODO: accept code points
public void push(char c, int x, int y) {
if (!mEnabled) return;
if (mUsabilityStudy) {
UsabilityStudyLogUtils.getInstance().writeChar(c, x, y);
}
mCharBuf[mEnd] = c;
mXBuf[mEnd] = x;
mYBuf[mEnd] = y;
@ -276,30 +275,57 @@ public class Utils {
}
}
public static void writeBackSpace(int x, int y) {
UsabilityStudyLogUtils.getInstance().write(
LogGroup.KEY, "<backspace>\t" + x + "\t" + y);
public void writeMotionEvent(final int action, final long eventTime, final int id,
final int x, final int y, final float size, final float pressure) {
final String eventTag;
switch (action) {
case MotionEvent.ACTION_CANCEL: eventTag = "[Cancel]"; break;
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;
case MotionEvent.ACTION_MOVE: eventTag = "[Move]"; break;
case MotionEvent.ACTION_OUTSIDE: eventTag = "[Outside]"; break;
default: eventTag = "[Action" + action + "]"; break;
}
if (!TextUtils.isEmpty(eventTag)) {
StringBuilder sb = new StringBuilder();
sb.append(eventTag);
sb.append('\t'); sb.append(eventTime);
sb.append('\t'); sb.append(id);
sb.append('\t'); sb.append(x);
sb.append('\t'); sb.append(y);
sb.append('\t'); sb.append(size);
sb.append('\t'); sb.append(pressure);
write(LogGroup.MOTION_EVENT, sb.toString());
}
}
public void writeChar(char c, int x, int y) {
String inputChar = String.valueOf(c);
switch (c) {
case '\n':
inputChar = "<enter>";
break;
case '\t':
inputChar = "<tab>";
break;
case ' ':
inputChar = "<space>";
break;
}
UsabilityStudyLogUtils.getInstance().write(LogGroup.KEY,
inputChar + "\t" + x + "\t" + y);
public void writeKeyEvent(int code, int x, int y) {
final StringBuilder sb = new StringBuilder();
sb.append(Keyboard.printableCode(code));
sb.append('\t'); sb.append(x);
sb.append('\t'); sb.append(y);
write(LogGroup.KEY, sb.toString());
// TODO: replace with a cleaner flush+retrieve mechanism
LatinImeLogger.onPrintAllUsabilityStudyLogs();
}
public void write(final LogGroup logGroup, final String log) {
public void writeCorrection(String subgroup, String before, String after, int position) {
final StringBuilder sb = new StringBuilder();
sb.append(subgroup);
sb.append('\t'); sb.append(before);
sb.append('\t'); sb.append(after);
sb.append('\t'); sb.append(position);
write(LogGroup.CORRECTION, sb.toString());
}
public void writeStateChange(String subgroup, String details) {
write(LogGroup.STATE_CHANGE, subgroup + "\t" + details);
}
private void write(final LogGroup logGroup, final String log) {
mLoggingHandler.post(new Runnable() {
@Override
public void run() {