public static final int START_INPUT_REASON_UNBOUND_FROM_IMMS = 6;
public static final int START_INPUT_REASON_ACTIVATED_BY_IMMS = 7;
public static final int START_INPUT_REASON_DEACTIVATED_BY_IMMS = 8;
+ public static final int START_INPUT_REASON_SESSION_CREATED_BY_IME = 9;
@Retention(SOURCE)
@IntDef({START_INPUT_REASON_UNSPECIFIED, START_INPUT_REASON_WINDOW_FOCUS_GAIN,
START_INPUT_REASON_WINDOW_FOCUS_GAIN_REPORT_ONLY,
START_INPUT_REASON_APP_CALLED_RESTART_INPUT_API, START_INPUT_REASON_CHECK_FOCUS,
START_INPUT_REASON_BOUND_TO_IMMS, START_INPUT_REASON_ACTIVATED_BY_IMMS,
- START_INPUT_REASON_DEACTIVATED_BY_IMMS})
+ START_INPUT_REASON_DEACTIVATED_BY_IMMS, START_INPUT_REASON_SESSION_CREATED_BY_IME})
public @interface StartInputReason {}
public static String getStartInputReason(@StartInputReason final int reason) {
return "ACTIVATED_BY_IMMS";
case START_INPUT_REASON_DEACTIVATED_BY_IMMS:
return "DEACTIVATED_BY_IMMS";
+ case START_INPUT_REASON_SESSION_CREATED_BY_IME:
+ return "SESSION_CREATED_BY_IME";
default:
return "Unknown=" + reason;
}
return flags;
}
- InputBindResult attachNewInputLocked(boolean initial) {
+ InputBindResult attachNewInputLocked(
+ /* @InputMethodClient.StartInputReason */ final int startInputReason, boolean initial) {
if (!mBoundToMethod) {
executeOrSendMessage(mCurMethod, mCaller.obtainMessageOO(
MSG_BIND_INPUT, mCurMethod, mCurClient.binding));
}
return startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
- controlFlags);
+ controlFlags, startInputReason);
}
InputBindResult startInputUncheckedLocked(@NonNull ClientState cs, IInputContext inputContext,
/* @InputConnectionInspector.missingMethods */ final int missingMethods,
- @NonNull EditorInfo attribute, int controlFlags) {
+ @NonNull EditorInfo attribute, int controlFlags,
+ /* @InputMethodClient.StartInputReason */ final int startInputReason) {
// If no method is currently selected, do nothing.
if (mCurMethodId == null) {
return mNoBinding;
if (cs.curSession != null) {
// Fast case: if we are already connected to the input method,
// then just return it.
- return attachNewInputLocked(
+ return attachNewInputLocked(startInputReason,
(controlFlags&InputMethodManager.CONTROL_START_INITIAL) != 0);
}
if (mHaveConnection) {
clearClientSessionLocked(mCurClient);
mCurClient.curSession = new SessionState(mCurClient,
method, session, channel);
- InputBindResult res = attachNewInputLocked(true);
+ InputBindResult res = attachNewInputLocked(
+ InputMethodClient.START_INPUT_REASON_SESSION_CREATED_BY_IME, true);
if (res.method != null) {
executeOrSendMessage(mCurClient.client, mCaller.obtainMessageOO(
MSG_BIND_CLIENT, mCurClient.client, res));
}
if (attribute != null) {
return startInputUncheckedLocked(cs, inputContext, missingMethods,
- attribute, controlFlags);
+ attribute, controlFlags, startInputReason);
}
return null;
}
if (DEBUG) Slog.v(TAG, "Unspecified window will show input");
if (attribute != null) {
res = startInputUncheckedLocked(cs, inputContext,
- missingMethods, attribute, controlFlags);
+ missingMethods, attribute, controlFlags, startInputReason);
didStart = true;
}
showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT, null);
if (DEBUG) Slog.v(TAG, "Window asks to show input going forward");
if (attribute != null) {
res = startInputUncheckedLocked(cs, inputContext,
- missingMethods, attribute, controlFlags);
+ missingMethods, attribute, controlFlags, startInputReason);
didStart = true;
}
showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT, null);
if (DEBUG) Slog.v(TAG, "Window asks to always show input");
if (attribute != null) {
res = startInputUncheckedLocked(cs, inputContext, missingMethods,
- attribute, controlFlags);
+ attribute, controlFlags, startInputReason);
didStart = true;
}
showCurrentInputLocked(InputMethodManager.SHOW_IMPLICIT, null);
if (!didStart && attribute != null) {
res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
- controlFlags);
+ controlFlags, startInputReason);
}
}
} finally {