Insert logging code

- Add log of auto suggestion
- Add log of cancelling auto suggestion
- Add log of actual number of charactors
- Add log of manually clicking suggestion

Change-Id: I8fc1cef356bf1a98b0676ed171bfb17825e18425
main
satok 2010-05-08 02:03:29 +09:00
parent 53393240e8
commit 1263d23466
4 changed files with 49 additions and 28 deletions

View File

@ -167,7 +167,7 @@ public class CandidateView extends View {
if (scrollX < 0) {
scrollX = 0;
}
if (distanceX > 0 && scrollX + width > mTotalWidth) {
if (distanceX > 0 && scrollX + width > mTotalWidth) {
scrollX -= (int) distanceX;
}
mTargetScrollX = scrollX;
@ -412,7 +412,11 @@ public class CandidateView extends View {
if (y <= 0) {
// Fling up!?
if (mSelectedString != null) {
// If there are completions from the application, we don't change the state to
// STATE_PICKED_SUGGESTION
if (!mShowingCompletions) {
// This "acceptedSuggestion" will not be counted as a word because
// it will be counted in pickSuggestion instead.
TextEntryState.acceptedSuggestion(mSuggestions.get(0),
mSelectedString);
}
@ -447,25 +451,6 @@ public class CandidateView extends View {
}
return true;
}
/**
* For flick through from keyboard, call this method with the x coordinate of the flick
* gesture.
* @param x
*/
public void takeSuggestionAt(float x) {
mTouchX = (int) x;
// To detect candidate
onDraw(null);
if (mSelectedString != null) {
if (!mShowingCompletions) {
TextEntryState.acceptedSuggestion(mSuggestions.get(0), mSelectedString);
}
mService.pickSuggestionManually(mSelectedIndex, mSelectedString);
}
invalidate();
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_REMOVE_THROUGH_PREVIEW), 200);
}
private void hidePreview() {
mCurrentWordIndex = OUT_OF_BOUNDS;

View File

@ -701,7 +701,7 @@ public class LatinIME extends InputMethodService
CompletionInfo ci = completions[i];
if (ci != null) stringList.add(ci.getText());
}
//CharSequence typedWord = mWord.getTypedWord();
// When in fullscreen mode, show completions generated by the application
setSuggestions(stringList, true, true, true);
mBestWord = null;
setCandidatesViewShown(isCandidateStripVisible() || mCompletionOn);
@ -1526,6 +1526,10 @@ public class LatinIME extends InputMethodService
// If this is a punctuation, apply it through the normal key press
if (suggestion.length() == 1 && isWordSeparator(suggestion.charAt(0))) {
// Word separators are suggested before the user inputs something.
// So, LatinImeLogger logs suggestion.charAt(0) as a user's input.
LatinImeLogger.logOnClickSuggestion(
suggestion.toString(), suggestion.toString(), index);
onKey(suggestion.charAt(0), null);
if (ic != null) {
ic.endBatchEdit();
@ -1538,6 +1542,8 @@ public class LatinIME extends InputMethodService
if (index == 0) {
checkAddToDictionary(suggestion, AutoDictionary.FREQUENCY_FOR_PICKED);
}
LatinImeLogger.logOnClickSuggestion(
mComposing.toString(), suggestion.toString(), index);
TextEntryState.acceptedSuggestion(mComposing.toString(), suggestion);
// Follow it with a space
if (mAutoSpace) {

View File

@ -41,11 +41,16 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
private static final int ID_INPUT_COUNT = 3;
private static final int ID_DELETE_COUNT = 4;
private static final int ID_WORD_COUNT = 5;
private static final int ID_ACTUAL_CHAR_COUNT = 6;
private static final String PREF_ENABLE_LOG = "enable_log";
private static LatinImeLogger sLatinImeLogger = new LatinImeLogger();
public static boolean sLogEnabled = true;
private static LatinImeLogger sLatinImeLogger = new LatinImeLogger();
// Store the last auto suggested word.
// This is required for a cancellation log of auto suggestion of that word.
private static String sLastAutoSuggestBefore;
private static String sLastAutoSuggestAfter;
private ArrayList<LogEntry> mLogBuffer = null;
private ArrayList<LogEntry> mPrivacyLogBuffer = null;
@ -58,6 +63,8 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
private int mDeleteCount;
private int mInputCount;
private int mWordCount;
// ActualCharCount includes all characters that were completed.
private int mActualCharCount;
private static class LogEntry implements Comparable<LogEntry> {
public final int mTag;
@ -90,7 +97,10 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
mLastTimeCountEntry = mLastTimeSend;
mDeleteCount = 0;
mInputCount = 0;
mWordCount = 0;
mActualCharCount = 0;
mLogBuffer = new ArrayList<LogEntry>();
mPrivacyLogBuffer = new ArrayList<LogEntry>();
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
sLogEnabled = prefs.getBoolean(PREF_ENABLE_LOG, DEFAULT_LOG_ENABLED);
prefs.registerOnSharedPreferenceChangeListener(this);
@ -102,7 +112,10 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
private void reset() {
mDeleteCount = 0;
mInputCount = 0;
mWordCount = 0;
mActualCharCount = 0;
mLogBuffer.clear();
mPrivacyLogBuffer.clear();
}
/**
@ -134,9 +147,12 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
new String[] {String.valueOf(mInputCount)}));
mLogBuffer.add(new LogEntry (time, ID_WORD_COUNT,
new String[] {String.valueOf(mWordCount)}));
mLogBuffer.add(new LogEntry (time, ID_ACTUAL_CHAR_COUNT,
new String[] {String.valueOf(mActualCharCount)}));
mDeleteCount = 0;
mInputCount = 0;
mWordCount = 0;
mActualCharCount = 0;
}
private void flushPrivacyLogSafely() {
@ -174,6 +190,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
case ID_AUTOSUGGESTION:
++mWordCount;
String[] dataStrings = (String[]) data;
mActualCharCount += dataStrings[1].length();
if (checkStringsDataSafe(dataStrings)) {
mPrivacyLogBuffer.add(
new LogEntry (System.currentTimeMillis(), tag, dataStrings));
@ -186,6 +203,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
case ID_AUTOSUGGESTIONCANCELED:
--mWordCount;
dataStrings = (String[]) data;
mActualCharCount -= dataStrings[1].length();
if (checkStringsDataSafe(dataStrings)) {
mPrivacyLogBuffer.add(
new LogEntry (System.currentTimeMillis(), tag, dataStrings));
@ -215,7 +233,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
mLastTimeSend = System.currentTimeMillis();
}
private void sendLogToDropBox(int tag, Object s) {
private synchronized void sendLogToDropBox(int tag, Object s) {
long now = System.currentTimeMillis();
if (DBG) {
Log.d(TAG, "SendLog: " + tag + ";" + s + ","
@ -255,6 +273,7 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
}
}
// TODO: Handle CharSequence instead of String
public static void logOnClickSuggestion(String before, String after, int position) {
if (sLogEnabled) {
String[] strings = new String[] {before, after, String.valueOf(position)};
@ -265,14 +284,22 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
public static void logOnAutoSuggestion(String before, String after) {
if (sLogEnabled) {
String[] strings = new String[] {before, after};
sLatinImeLogger.sendLogToDropBox(ID_AUTOSUGGESTION, strings);
synchronized (sLastAutoSuggestBefore) {
sLastAutoSuggestBefore = before;
}
synchronized (sLastAutoSuggestAfter) {
sLastAutoSuggestAfter = after;
}
sLatinImeLogger.sendLogToDropBox(ID_AUTOSUGGESTIONCANCELED, strings);
}
}
public static void logOnAutoSuggestionCanceled(String before, String after) {
public static void logOnAutoSuggestionCanceled() {
if (sLogEnabled) {
String[] strings = new String[] {before, after};
sLatinImeLogger.sendLogToDropBox(ID_AUTOSUGGESTIONCANCELED, strings);
if (sLastAutoSuggestBefore != null && sLastAutoSuggestAfter != null) {
String[] strings = new String[] {sLastAutoSuggestBefore, sLastAutoSuggestAfter};
sLatinImeLogger.sendLogToDropBox(ID_AUTOSUGGESTION, strings);
}
}
}
@ -296,7 +323,8 @@ public class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChang
sb.append(SEPARATER);
}
private static void appendLogEntry(StringBuffer sb, String time, String tag, String[] data) {
private static void appendLogEntry(StringBuffer sb, String time, String tag,
String[] data) {
if (data.length > 0) {
appendWithLength(sb, String.valueOf(data.length + 2));
appendWithLength(sb, time);

View File

@ -130,6 +130,7 @@ public class TextEntryState {
sTypedChars += typedWord.length();
sActualChars += actualWord.length();
sState = STATE_ACCEPTED_DEFAULT;
LatinImeLogger.logOnAutoSuggestion(typedWord.toString(), actualWord.toString());
}
public static void acceptedTyped(CharSequence typedWord) {
@ -199,6 +200,7 @@ public class TextEntryState {
if (sState == STATE_ACCEPTED_DEFAULT) {
sState = STATE_UNDO_COMMIT;
sAutoSuggestUndoneCount++;
LatinImeLogger.logOnAutoSuggestionCanceled();
} else if (sState == STATE_UNDO_COMMIT) {
sState = STATE_IN_WORD;
}