Merge "[IL131] Cleanup some cruft"

main
Jean Chalard 2014-04-03 09:52:10 +00:00 committed by Android (Google) Code Review
commit c5bd35e45f
2 changed files with 47 additions and 41 deletions

View File

@ -36,25 +36,25 @@ public class Event {
// Should the types below be represented by separate classes instead? It would be cleaner // Should the types below be represented by separate classes instead? It would be cleaner
// but probably a bit too much // but probably a bit too much
// An event we don't handle in Latin IME, for example pressing Ctrl on a hardware keyboard. // An event we don't handle in Latin IME, for example pressing Ctrl on a hardware keyboard.
final public static int EVENT_NOT_HANDLED = 0; final public static int EVENT_TYPE_NOT_HANDLED = 0;
// A key press that is part of input, for example pressing an alphabetic character on a // A key press that is part of input, for example pressing an alphabetic character on a
// hardware qwerty keyboard. It may be part of a sequence that will be re-interpreted later // hardware qwerty keyboard. It may be part of a sequence that will be re-interpreted later
// through combination. // through combination.
final public static int EVENT_INPUT_KEYPRESS = 1; final public static int EVENT_TYPE_INPUT_KEYPRESS = 1;
// A toggle event is triggered by a key that affects the previous character. An example would // A toggle event is triggered by a key that affects the previous character. An example would
// be a numeric key on a 10-key keyboard, which would toggle between 1 - a - b - c with // be a numeric key on a 10-key keyboard, which would toggle between 1 - a - b - c with
// repeated presses. // repeated presses.
final public static int EVENT_TOGGLE = 2; final public static int EVENT_TYPE_TOGGLE = 2;
// A mode event instructs the combiner to change modes. The canonical example would be the // A mode event instructs the combiner to change modes. The canonical example would be the
// hankaku/zenkaku key on a Japanese keyboard, or even the caps lock key on a qwerty keyboard // hankaku/zenkaku key on a Japanese keyboard, or even the caps lock key on a qwerty keyboard
// if handled at the combiner level. // if handled at the combiner level.
final public static int EVENT_MODE_KEY = 3; final public static int EVENT_TYPE_MODE_KEY = 3;
// An event corresponding to a gesture. // An event corresponding to a gesture.
final public static int EVENT_GESTURE = 4; final public static int EVENT_TYPE_GESTURE = 4;
// An event corresponding to the manual pick of a suggestion. // An event corresponding to the manual pick of a suggestion.
final public static int EVENT_SUGGESTION_PICKED = 5; final public static int EVENT_TYPE_SUGGESTION_PICKED = 5;
// An event corresponding to a string generated by some software process. // An event corresponding to a string generated by some software process.
final public static int EVENT_SOFTWARE_GENERATED_STRING = 6; final public static int EVENT_TYPE_SOFTWARE_GENERATED_STRING = 6;
// 0 is a valid code point, so we use -1 here. // 0 is a valid code point, so we use -1 here.
final public static int NOT_A_CODE_POINT = -1; final public static int NOT_A_CODE_POINT = -1;
@ -66,7 +66,7 @@ public class Event {
// or dead-abovering. // or dead-abovering.
final private static int FLAG_DEAD = 0x1; final private static int FLAG_DEAD = 0x1;
final private int mType; // The type of event - one of the constants above final private int mEventType; // The type of event - one of the constants above
// The code point associated with the event, if relevant. This is a unicode code point, and // The code point associated with the event, if relevant. This is a unicode code point, and
// has nothing to do with other representations of the key. It is only relevant if this event // has nothing to do with other representations of the key. It is only relevant if this event
// is of KEYPRESS type, but for a mode key like hankaku/zenkaku or ctrl, there is no code point // is of KEYPRESS type, but for a mode key like hankaku/zenkaku or ctrl, there is no code point
@ -94,7 +94,7 @@ public class Event {
// Some flags that can't go into the key code. It's a bit field of FLAG_* // Some flags that can't go into the key code. It's a bit field of FLAG_*
final private int mFlags; final private int mFlags;
// If this is of type EVENT_SUGGESTION_PICKED, this must not be null (and must be null in // If this is of type EVENT_TYPE_SUGGESTION_PICKED, this must not be null (and must be null in
// other cases). // other cases).
final public SuggestedWordInfo mSuggestedWordInfo; final public SuggestedWordInfo mSuggestedWordInfo;
@ -105,7 +105,7 @@ public class Event {
private Event(final int type, final CharSequence text, final int codePoint, final int keyCode, private Event(final int type, final CharSequence text, final int codePoint, final int keyCode,
final int x, final int y, final SuggestedWordInfo suggestedWordInfo, final int flags, final int x, final int y, final SuggestedWordInfo suggestedWordInfo, final int flags,
final Event next) { final Event next) {
mType = type; mEventType = type;
mText = text; mText = text;
mCodePoint = codePoint; mCodePoint = codePoint;
mKeyCode = keyCode; mKeyCode = keyCode;
@ -116,7 +116,7 @@ public class Event {
mNextEvent = next; mNextEvent = next;
// Sanity checks // Sanity checks
// mSuggestedWordInfo is non-null if and only if the type is SUGGESTION_PICKED // mSuggestedWordInfo is non-null if and only if the type is SUGGESTION_PICKED
if (EVENT_SUGGESTION_PICKED == mType) { if (EVENT_TYPE_SUGGESTION_PICKED == mEventType) {
if (null == mSuggestedWordInfo) { if (null == mSuggestedWordInfo) {
throw new RuntimeException("Wrong event: SUGGESTION_PICKED event must have a " throw new RuntimeException("Wrong event: SUGGESTION_PICKED event must have a "
+ "non-null SuggestedWordInfo"); + "non-null SuggestedWordInfo");
@ -131,13 +131,13 @@ public class Event {
public static Event createSoftwareKeypressEvent(final int codePoint, final int keyCode, public static Event createSoftwareKeypressEvent(final int codePoint, final int keyCode,
final int x, final int y) { final int x, final int y) {
return new Event(EVENT_INPUT_KEYPRESS, null /* text */, codePoint, keyCode, x, y, return new Event(EVENT_TYPE_INPUT_KEYPRESS, null /* text */, codePoint, keyCode, x, y,
null /* suggestedWordInfo */, FLAG_NONE, null); null /* suggestedWordInfo */, FLAG_NONE, null /* next */);
} }
public static Event createHardwareKeypressEvent(final int codePoint, final int keyCode, public static Event createHardwareKeypressEvent(final int codePoint, final int keyCode,
final Event next) { final Event next) {
return new Event(EVENT_INPUT_KEYPRESS, null /* text */, codePoint, keyCode, return new Event(EVENT_TYPE_INPUT_KEYPRESS, null /* text */, codePoint, keyCode,
Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE,
null /* suggestedWordInfo */, FLAG_NONE, next); null /* suggestedWordInfo */, FLAG_NONE, next);
} }
@ -145,7 +145,7 @@ public class Event {
// This creates an input event for a dead character. @see {@link #FLAG_DEAD} // This creates an input event for a dead character. @see {@link #FLAG_DEAD}
public static Event createDeadEvent(final int codePoint, final int keyCode, final Event next) { public static Event createDeadEvent(final int codePoint, final int keyCode, final Event next) {
// TODO: add an argument or something if we ever create a software layout with dead keys. // TODO: add an argument or something if we ever create a software layout with dead keys.
return new Event(EVENT_INPUT_KEYPRESS, null /* text */, codePoint, keyCode, return new Event(EVENT_TYPE_INPUT_KEYPRESS, null /* text */, codePoint, keyCode,
Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE,
null /* suggestedWordInfo */, FLAG_DEAD, next); null /* suggestedWordInfo */, FLAG_DEAD, next);
} }
@ -159,7 +159,7 @@ public class Event {
*/ */
public static Event createEventForCodePointFromUnknownSource(final int codePoint) { public static Event createEventForCodePointFromUnknownSource(final int codePoint) {
// TODO: should we have a different type of event for this? After all, it's not a key press. // TODO: should we have a different type of event for this? After all, it's not a key press.
return new Event(EVENT_INPUT_KEYPRESS, null /* text */, codePoint, NOT_A_KEY_CODE, return new Event(EVENT_TYPE_INPUT_KEYPRESS, null /* text */, codePoint, NOT_A_KEY_CODE,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE,
null /* suggestedWordInfo */, FLAG_NONE, null /* next */); null /* suggestedWordInfo */, FLAG_NONE, null /* next */);
} }
@ -175,8 +175,8 @@ public class Event {
public static Event createEventForCodePointFromAlreadyTypedText(final int codePoint, public static Event createEventForCodePointFromAlreadyTypedText(final int codePoint,
final int x, final int y) { final int x, final int y) {
// TODO: should we have a different type of event for this? After all, it's not a key press. // TODO: should we have a different type of event for this? After all, it's not a key press.
return new Event(EVENT_INPUT_KEYPRESS, null /* text */, codePoint, NOT_A_KEY_CODE, x, y, return new Event(EVENT_TYPE_INPUT_KEYPRESS, null /* text */, codePoint, NOT_A_KEY_CODE,
null /* suggestedWordInfo */, FLAG_NONE, null /* next */); x, y, null /* suggestedWordInfo */, FLAG_NONE, null /* next */);
} }
/** /**
@ -184,10 +184,10 @@ public class Event {
* @return an event for this suggestion pick. * @return an event for this suggestion pick.
*/ */
public static Event createSuggestionPickedEvent(final SuggestedWordInfo suggestedWordInfo) { public static Event createSuggestionPickedEvent(final SuggestedWordInfo suggestedWordInfo) {
return new Event(EVENT_SUGGESTION_PICKED, suggestedWordInfo.mWord, return new Event(EVENT_TYPE_SUGGESTION_PICKED, suggestedWordInfo.mWord,
NOT_A_CODE_POINT, NOT_A_KEY_CODE, NOT_A_CODE_POINT, NOT_A_KEY_CODE,
Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE,
suggestedWordInfo, FLAG_NONE, null); suggestedWordInfo, FLAG_NONE, null /* next */);
} }
/** /**
@ -199,13 +199,26 @@ public class Event {
* @return an event for this text. * @return an event for this text.
*/ */
public static Event createSoftwareTextEvent(final CharSequence text, final int keyCode) { public static Event createSoftwareTextEvent(final CharSequence text, final int keyCode) {
return new Event(EVENT_SOFTWARE_GENERATED_STRING, text, NOT_A_CODE_POINT, keyCode, return new Event(EVENT_TYPE_SOFTWARE_GENERATED_STRING, text, NOT_A_CODE_POINT, keyCode,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE,
null /* suggestedWordInfo */, FLAG_NONE, null /* next */); null /* suggestedWordInfo */, FLAG_NONE, null /* next */);
} }
/**
* Creates an input event representing the manual pick of a punctuation suggestion.
* @return an event for this suggestion pick.
*/
public static Event createPunctuationSuggestionPickedEvent(
final SuggestedWordInfo suggestedWordInfo) {
final int primaryCode = suggestedWordInfo.mWord.charAt(0);
return new Event(EVENT_TYPE_SUGGESTION_PICKED, suggestedWordInfo.mWord, primaryCode,
NOT_A_KEY_CODE, Constants.SUGGESTION_STRIP_COORDINATE,
Constants.SUGGESTION_STRIP_COORDINATE, suggestedWordInfo, FLAG_NONE,
null /* next */);
}
public static Event createNotHandledEvent() { public static Event createNotHandledEvent() {
return new Event(EVENT_NOT_HANDLED, null /* text */, NOT_A_CODE_POINT, NOT_A_KEY_CODE, return new Event(EVENT_TYPE_NOT_HANDLED, null /* text */, NOT_A_CODE_POINT, NOT_A_KEY_CODE,
Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE,
null /* suggestedWordInfo */, FLAG_NONE, null); null /* suggestedWordInfo */, FLAG_NONE, null);
} }
@ -218,25 +231,26 @@ public class Event {
// Returns whether this is a fake key press from the suggestion strip. This happens with // Returns whether this is a fake key press from the suggestion strip. This happens with
// punctuation signs selected from the suggestion strip. // punctuation signs selected from the suggestion strip.
public boolean isSuggestionStripPress() { public boolean isSuggestionStripPress() {
return EVENT_INPUT_KEYPRESS == mType && Constants.SUGGESTION_STRIP_COORDINATE == mX; return EVENT_TYPE_SUGGESTION_PICKED == mEventType;
} }
public boolean isHandled() { public boolean isHandled() {
return EVENT_NOT_HANDLED != mType; return EVENT_TYPE_NOT_HANDLED != mEventType;
} }
public CharSequence getTextToCommit() { public CharSequence getTextToCommit() {
switch (mType) { switch (mEventType) {
case EVENT_MODE_KEY: case EVENT_TYPE_MODE_KEY:
case EVENT_NOT_HANDLED: case EVENT_TYPE_NOT_HANDLED:
case EVENT_TOGGLE: case EVENT_TYPE_TOGGLE:
return ""; return "";
case EVENT_INPUT_KEYPRESS: case EVENT_TYPE_INPUT_KEYPRESS:
return StringUtils.newSingleCodePointString(mCodePoint); return StringUtils.newSingleCodePointString(mCodePoint);
case EVENT_GESTURE: case EVENT_TYPE_GESTURE:
case EVENT_SOFTWARE_GENERATED_STRING: case EVENT_TYPE_SOFTWARE_GENERATED_STRING:
case EVENT_TYPE_SUGGESTION_PICKED:
return mText; return mText;
} }
throw new RuntimeException("Unknown event type: " + mType); throw new RuntimeException("Unknown event type: " + mEventType);
} }
} }

View File

@ -210,15 +210,7 @@ public final class InputLogic {
// So, LatinImeLogger logs "" as a user's input. // So, LatinImeLogger logs "" as a user's input.
LatinImeLogger.logOnManualSuggestion("", suggestion, index, suggestedWords); LatinImeLogger.logOnManualSuggestion("", suggestion, index, suggestedWords);
// Rely on onCodeInput to do the complicated swapping/stripping logic consistently. // Rely on onCodeInput to do the complicated swapping/stripping logic consistently.
final int primaryCode = suggestion.charAt(0); final Event event = Event.createPunctuationSuggestionPickedEvent(suggestionInfo);
// TODO: we should be using createSuggestionPickedEvent here, but for legacy reasons,
// onCodeInput is expected a software keypress event for a suggested punctuation
// because the current code is descended from a time where this information used not
// to be available. Fix this.
final Event event = Event.createSoftwareKeypressEvent(primaryCode,
Event.NOT_A_KEY_CODE /* keyCode*/,
Constants.SUGGESTION_STRIP_COORDINATE /* x */,
Constants.SUGGESTION_STRIP_COORDINATE /* y */);
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) { if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
ResearchLogger.latinIME_punctuationSuggestion(index, suggestion, ResearchLogger.latinIME_punctuationSuggestion(index, suggestion,
false /* isBatchMode */, suggestedWords.mIsPrediction); false /* isBatchMode */, suggestedWords.mIsPrediction);