Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fdd68f06 authored by Kurt Partridge's avatar Kurt Partridge
Browse files

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
parent 78bf41b8
Loading
Loading
Loading
Loading
+10 −35
Original line number Diff line number Diff line
@@ -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 {
+6 −0
Original line number Diff line number Diff line
@@ -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
+48 −22
Original line number Diff line number Diff line
@@ -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() {