Java Code Examples for android.view.inputmethod.EditorInfo#IME_ACTION_NONE
The following examples show how to use
android.view.inputmethod.EditorInfo#IME_ACTION_NONE .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: InputMethodService.java From android_9.0.0_r45 with Apache License 2.0 | 6 votes |
/** * Return text that can be used as a button label for the given * {@link EditorInfo#imeOptions EditorInfo.imeOptions}. Returns null * if there is no action requested. Note that there is no guarantee that * the returned text will be relatively short, so you probably do not * want to use it as text on a soft keyboard key label. * * @param imeOptions The value from {@link EditorInfo#imeOptions EditorInfo.imeOptions}. * * @return Returns a label to use, or null if there is no action. */ public CharSequence getTextForImeAction(int imeOptions) { switch (imeOptions&EditorInfo.IME_MASK_ACTION) { case EditorInfo.IME_ACTION_NONE: return null; case EditorInfo.IME_ACTION_GO: return getText(com.android.internal.R.string.ime_action_go); case EditorInfo.IME_ACTION_SEARCH: return getText(com.android.internal.R.string.ime_action_search); case EditorInfo.IME_ACTION_SEND: return getText(com.android.internal.R.string.ime_action_send); case EditorInfo.IME_ACTION_NEXT: return getText(com.android.internal.R.string.ime_action_next); case EditorInfo.IME_ACTION_DONE: return getText(com.android.internal.R.string.ime_action_done); case EditorInfo.IME_ACTION_PREVIOUS: return getText(com.android.internal.R.string.ime_action_previous); default: return getText(com.android.internal.R.string.ime_action_default); } }
Example 2
Source File: InputMethodService.java From android_9.0.0_r45 with Apache License 2.0 | 6 votes |
/** * Ask the input target to execute its default action via * {@link InputConnection#performEditorAction * InputConnection.performEditorAction()}. * * @param fromEnterKey If true, this will be executed as if the user had * pressed an enter key on the keyboard, that is it will <em>not</em> * be done if the editor has set {@link EditorInfo#IME_FLAG_NO_ENTER_ACTION * EditorInfo.IME_FLAG_NO_ENTER_ACTION}. If false, the action will be * sent regardless of how the editor has set that flag. * * @return Returns a boolean indicating whether an action has been sent. * If false, either the editor did not specify a default action or it * does not want an action from the enter key. If true, the action was * sent (or there was no input connection at all). */ public boolean sendDefaultEditorAction(boolean fromEnterKey) { EditorInfo ei = getCurrentInputEditorInfo(); if (ei != null && (!fromEnterKey || (ei.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0) && (ei.imeOptions & EditorInfo.IME_MASK_ACTION) != EditorInfo.IME_ACTION_NONE) { // If the enter key was pressed, and the editor has a default // action associated with pressing enter, then send it that // explicit action instead of the key event. InputConnection ic = getCurrentInputConnection(); if (ic != null) { ic.performEditorAction(ei.imeOptions&EditorInfo.IME_MASK_ACTION); } return true; } return false; }
Example 3
Source File: EditorInfoCompatUtils.java From Indic-Keyboard with Apache License 2.0 | 6 votes |
public static String imeActionName(final int imeOptions) { final int actionId = imeOptions & EditorInfo.IME_MASK_ACTION; switch (actionId) { case EditorInfo.IME_ACTION_UNSPECIFIED: return "actionUnspecified"; case EditorInfo.IME_ACTION_NONE: return "actionNone"; case EditorInfo.IME_ACTION_GO: return "actionGo"; case EditorInfo.IME_ACTION_SEARCH: return "actionSearch"; case EditorInfo.IME_ACTION_SEND: return "actionSend"; case EditorInfo.IME_ACTION_NEXT: return "actionNext"; case EditorInfo.IME_ACTION_DONE: return "actionDone"; case EditorInfo.IME_ACTION_PREVIOUS: return "actionPrevious"; default: return "actionUnknown(" + actionId + ")"; } }
Example 4
Source File: EditorInfoCompatUtils.java From LokiBoard-Android-Keylogger with Apache License 2.0 | 6 votes |
public static String imeActionName(final int imeOptions) { final int actionId = imeOptions & EditorInfo.IME_MASK_ACTION; switch (actionId) { case EditorInfo.IME_ACTION_UNSPECIFIED: return "actionUnspecified"; case EditorInfo.IME_ACTION_NONE: return "actionNone"; case EditorInfo.IME_ACTION_GO: return "actionGo"; case EditorInfo.IME_ACTION_SEARCH: return "actionSearch"; case EditorInfo.IME_ACTION_SEND: return "actionSend"; case EditorInfo.IME_ACTION_NEXT: return "actionNext"; case EditorInfo.IME_ACTION_DONE: return "actionDone"; case EditorInfo.IME_ACTION_PREVIOUS: return "actionPrevious"; default: return "actionUnknown(" + actionId + ")"; } }
Example 5
Source File: EditorInfoCompatUtils.java From simple-keyboard with Apache License 2.0 | 6 votes |
public static String imeActionName(final int imeOptions) { final int actionId = imeOptions & EditorInfo.IME_MASK_ACTION; switch (actionId) { case EditorInfo.IME_ACTION_UNSPECIFIED: return "actionUnspecified"; case EditorInfo.IME_ACTION_NONE: return "actionNone"; case EditorInfo.IME_ACTION_GO: return "actionGo"; case EditorInfo.IME_ACTION_SEARCH: return "actionSearch"; case EditorInfo.IME_ACTION_SEND: return "actionSend"; case EditorInfo.IME_ACTION_NEXT: return "actionNext"; case EditorInfo.IME_ACTION_DONE: return "actionDone"; case EditorInfo.IME_ACTION_PREVIOUS: return "actionPrevious"; default: return "actionUnknown(" + actionId + ")"; } }
Example 6
Source File: InputTypeUtils.java From Indic-Keyboard with Apache License 2.0 | 5 votes |
public static int getImeOptionsActionIdFromEditorInfo(final EditorInfo editorInfo) { if ((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) { return EditorInfo.IME_ACTION_NONE; } else if (editorInfo.actionLabel != null) { return IME_ACTION_CUSTOM_LABEL; } else { // Note: this is different from editorInfo.actionId, hence "ImeOptionsActionId" return editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION; } }
Example 7
Source File: InputLogic.java From Indic-Keyboard with Apache License 2.0 | 5 votes |
/** * Handle an event that is not a functional event. * * These events are generally events that cause input, but in some cases they may do other * things like trigger an editor action. * * @param event The event to handle. * @param inputTransaction The transaction in progress. */ private void handleNonFunctionalEvent(final Event event, final InputTransaction inputTransaction, final LatinIME.UIHandler handler) { inputTransaction.setDidAffectContents(); switch (event.mCodePoint) { case Constants.CODE_ENTER: final EditorInfo editorInfo = getCurrentInputEditorInfo(); final int imeOptionsActionId = InputTypeUtils.getImeOptionsActionIdFromEditorInfo(editorInfo); if (InputTypeUtils.IME_ACTION_CUSTOM_LABEL == imeOptionsActionId) { // Either we have an actionLabel and we should performEditorAction with // actionId regardless of its value. performEditorAction(editorInfo.actionId); } else if (EditorInfo.IME_ACTION_NONE != imeOptionsActionId) { // We didn't have an actionLabel, but we had another action to execute. // EditorInfo.IME_ACTION_NONE explicitly means no action. In contrast, // EditorInfo.IME_ACTION_UNSPECIFIED is the default value for an action, so it // means there should be an action and the app didn't bother to set a specific // code for it - presumably it only handles one. It does not have to be treated // in any specific way: anything that is not IME_ACTION_NONE should be sent to // performEditorAction. performEditorAction(imeOptionsActionId); } else { // No action label, and the action from imeOptions is NONE: this is a regular // enter key that should input a carriage return. handleNonSpecialCharacterEvent(event, inputTransaction, handler); } break; default: handleNonSpecialCharacterEvent(event, inputTransaction, handler); break; } }
Example 8
Source File: EditorAction.java From android-test with Apache License 2.0 | 5 votes |
@Override public void perform(UiController uiController, View view) { EditorInfo editorInfo = new EditorInfo(); InputConnection inputConnection = view.onCreateInputConnection(editorInfo); if (inputConnection == null) { throw new PerformException.Builder() .withActionDescription(this.toString()) .withViewDescription(HumanReadables.describe(view)) .withCause(new IllegalStateException("View does not support input methods")) .build(); } int actionId = editorInfo.actionId != 0 ? editorInfo.actionId : editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION; if (actionId == EditorInfo.IME_ACTION_NONE) { throw new PerformException.Builder() .withActionDescription(this.getDescription()) .withViewDescription(HumanReadables.describe(view)) .withCause(new IllegalStateException("No available action on view")) .build(); } if (!inputConnection.performEditorAction(actionId)) { throw new PerformException.Builder() .withActionDescription(this.getDescription()) .withViewDescription(HumanReadables.describe(view)) .withCause( new RuntimeException( String.format( Locale.ROOT, "Failed to perform action %#x. Input connection no longer valid", actionId))) .build(); } }
Example 9
Source File: CreditEntryFieldBase.java From CreditCardEntry with MIT License | 5 votes |
@Override public InputConnection onCreateInputConnection(@NonNull EditorInfo outAttrs) { outAttrs.actionLabel = null; outAttrs.inputType = InputType.TYPE_NULL; outAttrs.imeOptions = EditorInfo.IME_ACTION_NONE; return new BackInputConnection(super.onCreateInputConnection(outAttrs)); }
Example 10
Source File: InputTypeUtils.java From AOSP-Kayboard-7.1.2 with Apache License 2.0 | 5 votes |
public static int getImeOptionsActionIdFromEditorInfo(final EditorInfo editorInfo) { if ((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) { return EditorInfo.IME_ACTION_NONE; } else if (editorInfo.actionLabel != null) { return IME_ACTION_CUSTOM_LABEL; } else { // Note: this is different from editorInfo.actionId, hence "ImeOptionsActionId" return editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION; } }
Example 11
Source File: InputLogic.java From AOSP-Kayboard-7.1.2 with Apache License 2.0 | 5 votes |
/** * Handle an event that is not a functional event. * * These events are generally events that cause input, but in some cases they may do other * things like trigger an editor action. * * @param event The event to handle. * @param inputTransaction The transaction in progress. */ private void handleNonFunctionalEvent(final Event event, final InputTransaction inputTransaction, final LatinIME.UIHandler handler) { inputTransaction.setDidAffectContents(); switch (event.mCodePoint) { case Constants.CODE_ENTER: final EditorInfo editorInfo = getCurrentInputEditorInfo(); final int imeOptionsActionId = InputTypeUtils.getImeOptionsActionIdFromEditorInfo(editorInfo); if (InputTypeUtils.IME_ACTION_CUSTOM_LABEL == imeOptionsActionId) { // Either we have an actionLabel and we should performEditorAction with // actionId regardless of its value. performEditorAction(editorInfo.actionId); } else if (EditorInfo.IME_ACTION_NONE != imeOptionsActionId) { // We didn't have an actionLabel, but we had another action to execute. // EditorInfo.IME_ACTION_NONE explicitly means no action. In contrast, // EditorInfo.IME_ACTION_UNSPECIFIED is the default value for an action, so it // means there should be an action and the app didn't bother to set a specific // code for it - presumably it only handles one. It does not have to be treated // in any specific way: anything that is not IME_ACTION_NONE should be sent to // performEditorAction. performEditorAction(imeOptionsActionId); } else { // No action label, and the action from imeOptions is NONE: this is a regular // enter key that should input a carriage return. handleNonSpecialCharacterEvent(event, inputTransaction, handler); } break; default: handleNonSpecialCharacterEvent(event, inputTransaction, handler); break; } }
Example 12
Source File: InputLogic.java From simple-keyboard with Apache License 2.0 | 5 votes |
/** * Handle an event that is not a functional event. * * These events are generally events that cause input, but in some cases they may do other * things like trigger an editor action. * * @param event The event to handle. * @param inputTransaction The transaction in progress. */ private void handleNonFunctionalEvent(final Event event, final InputTransaction inputTransaction) { switch (event.mCodePoint) { case Constants.CODE_ENTER: final EditorInfo editorInfo = getCurrentInputEditorInfo(); final int imeOptionsActionId = InputTypeUtils.getImeOptionsActionIdFromEditorInfo(editorInfo); if (InputTypeUtils.IME_ACTION_CUSTOM_LABEL == imeOptionsActionId) { // Either we have an actionLabel and we should performEditorAction with // actionId regardless of its value. performEditorAction(editorInfo.actionId); } else if (EditorInfo.IME_ACTION_NONE != imeOptionsActionId) { // We didn't have an actionLabel, but we had another action to execute. // EditorInfo.IME_ACTION_NONE explicitly means no action. In contrast, // EditorInfo.IME_ACTION_UNSPECIFIED is the default value for an action, so it // means there should be an action and the app didn't bother to set a specific // code for it - presumably it only handles one. It does not have to be treated // in any specific way: anything that is not IME_ACTION_NONE should be sent to // performEditorAction. performEditorAction(imeOptionsActionId); } else { // No action label, and the action from imeOptions is NONE: this is a regular // enter key that should input a carriage return. handleNonSpecialCharacterEvent(event, inputTransaction); } break; default: handleNonSpecialCharacterEvent(event, inputTransaction); break; } }
Example 13
Source File: ReactEditText.java From react-native-GPay with MIT License | 5 votes |
private void updateImeOptions() { // Default to IME_ACTION_DONE int returnKeyFlag = EditorInfo.IME_ACTION_DONE; if (mReturnKeyType != null) { switch (mReturnKeyType) { case "go": returnKeyFlag = EditorInfo.IME_ACTION_GO; break; case "next": returnKeyFlag = EditorInfo.IME_ACTION_NEXT; break; case "none": returnKeyFlag = EditorInfo.IME_ACTION_NONE; break; case "previous": returnKeyFlag = EditorInfo.IME_ACTION_PREVIOUS; break; case "search": returnKeyFlag = EditorInfo.IME_ACTION_SEARCH; break; case "send": returnKeyFlag = EditorInfo.IME_ACTION_SEND; break; case "done": returnKeyFlag = EditorInfo.IME_ACTION_DONE; break; } } if (mDisableFullscreen) { setImeOptions(returnKeyFlag | EditorInfo.IME_FLAG_NO_FULLSCREEN); } else { setImeOptions(returnKeyFlag); } }
Example 14
Source File: InputTypeUtils.java From LokiBoard-Android-Keylogger with Apache License 2.0 | 5 votes |
public static int getImeOptionsActionIdFromEditorInfo(final EditorInfo editorInfo) { if ((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) { return EditorInfo.IME_ACTION_NONE; } else if (editorInfo.actionLabel != null) { return IME_ACTION_CUSTOM_LABEL; } else { // Note: this is different from editorInfo.actionId, hence "ImeOptionsActionId" return editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION; } }
Example 15
Source File: InputTypeUtils.java From openboard with GNU General Public License v3.0 | 5 votes |
public static int getImeOptionsActionIdFromEditorInfo(final EditorInfo editorInfo) { if ((editorInfo.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) { return EditorInfo.IME_ACTION_NONE; } else if (editorInfo.actionLabel != null) { return IME_ACTION_CUSTOM_LABEL; } else { // Note: this is different from editorInfo.actionId, hence "ImeOptionsActionId" return editorInfo.imeOptions & EditorInfo.IME_MASK_ACTION; } }
Example 16
Source File: InputLogic.java From openboard with GNU General Public License v3.0 | 5 votes |
/** * Handle an event that is not a functional event. * * These events are generally events that cause input, but in some cases they may do other * things like trigger an editor action. * * @param event The event to handle. * @param inputTransaction The transaction in progress. */ private void handleNonFunctionalEvent(final Event event, final InputTransaction inputTransaction, final LatinIME.UIHandler handler) { inputTransaction.setDidAffectContents(); switch (event.getMCodePoint()) { case Constants.CODE_ENTER: final EditorInfo editorInfo = getCurrentInputEditorInfo(); final int imeOptionsActionId = InputTypeUtils.getImeOptionsActionIdFromEditorInfo(editorInfo); if (InputTypeUtils.IME_ACTION_CUSTOM_LABEL == imeOptionsActionId) { // Either we have an actionLabel and we should performEditorAction with // actionId regardless of its value. performEditorAction(editorInfo.actionId); } else if (EditorInfo.IME_ACTION_NONE != imeOptionsActionId) { // We didn't have an actionLabel, but we had another action to execute. // EditorInfo.IME_ACTION_NONE explicitly means no action. In contrast, // EditorInfo.IME_ACTION_UNSPECIFIED is the default value for an action, so it // means there should be an action and the app didn't bother to set a specific // code for it - presumably it only handles one. It does not have to be treated // in any specific way: anything that is not IME_ACTION_NONE should be sent to // performEditorAction. performEditorAction(imeOptionsActionId); } else { // No action label, and the action from imeOptions is NONE: this is a regular // enter key that should input a carriage return. handleNonSpecialCharacterEvent(event, inputTransaction, handler); } break; default: handleNonSpecialCharacterEvent(event, inputTransaction, handler); break; } }
Example 17
Source File: InputMethodService.java From android_9.0.0_r45 with Apache License 2.0 | 5 votes |
/** * Called when the fullscreen-mode extracting editor info has changed, * to update the state of its UI such as the action buttons shown. * You do not need to deal with this if you are using the standard * full screen extract UI. If replacing it, you will need to re-implement * this to put the appropriate action button in your own UI and handle it, * and perform any other changes. * * <p>The standard implementation turns on or off its accessory area * depending on whether there is an action button, and hides or shows * the entire extract area depending on whether it makes sense for the * current editor. In particular, a {@link InputType#TYPE_NULL} or * {@link InputType#TYPE_TEXT_VARIATION_FILTER} input type will turn off the * extract area since there is no text to be shown. */ public void onUpdateExtractingViews(EditorInfo ei) { if (!isExtractViewShown()) { return; } if (mExtractAccessories == null) { return; } final boolean hasAction = ei.actionLabel != null || ( (ei.imeOptions&EditorInfo.IME_MASK_ACTION) != EditorInfo.IME_ACTION_NONE && (ei.imeOptions&EditorInfo.IME_FLAG_NO_ACCESSORY_ACTION) == 0 && ei.inputType != InputType.TYPE_NULL); if (hasAction) { mExtractAccessories.setVisibility(View.VISIBLE); if (mExtractAction != null) { if (mExtractAction instanceof ImageButton) { ((ImageButton) mExtractAction) .setImageResource(getIconForImeAction(ei.imeOptions)); if (ei.actionLabel != null) { mExtractAction.setContentDescription(ei.actionLabel); } else { mExtractAction.setContentDescription(getTextForImeAction(ei.imeOptions)); } } else { if (ei.actionLabel != null) { ((TextView) mExtractAction).setText(ei.actionLabel); } else { ((TextView) mExtractAction).setText(getTextForImeAction(ei.imeOptions)); } } mExtractAction.setOnClickListener(mActionClickListener); } } else { mExtractAccessories.setVisibility(View.GONE); if (mExtractAction != null) { mExtractAction.setOnClickListener(null); } } }
Example 18
Source File: AdapterInputConnection.java From android-chromium with BSD 2-Clause "Simplified" License | 4 votes |
@VisibleForTesting AdapterInputConnection(View view, ImeAdapter imeAdapter, EditorInfo outAttrs) { super(view, true); mInternalView = view; mImeAdapter = imeAdapter; mImeAdapter.setInputConnection(this); mSingleLine = true; outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_FLAG_NO_EXTRACT_UI; outAttrs.inputType = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT; if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeText) { // Normal text field outAttrs.inputType |= EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT; outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeTextArea || imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeContentEditable) { // TextArea or contenteditable. outAttrs.inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES | EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT; outAttrs.imeOptions |= EditorInfo.IME_ACTION_NONE; mSingleLine = false; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypePassword) { // Password outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD; outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeSearch) { // Search outAttrs.imeOptions |= EditorInfo.IME_ACTION_SEARCH; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeUrl) { // Url // TYPE_TEXT_VARIATION_URI prevents Tab key from showing, so // exclude it for now. outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeEmail) { // Email outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS; outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeTel) { // Telephone // Number and telephone do not have both a Tab key and an // action in default OSK, so set the action to NEXT outAttrs.inputType = InputType.TYPE_CLASS_PHONE; outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeNumber) { // Number outAttrs.inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL; outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; } outAttrs.initialSelStart = imeAdapter.getInitialSelectionStart(); outAttrs.initialSelEnd = imeAdapter.getInitialSelectionEnd(); mLastUpdateSelectionStart = imeAdapter.getInitialSelectionStart(); mLastUpdateSelectionEnd = imeAdapter.getInitialSelectionEnd(); }
Example 19
Source File: BaldInputMethodService.java From BaldPhone with Apache License 2.0 | 4 votes |
public static boolean defaultEditorActionExists(final int imeOptions) { return ((imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) == 0) && (imeOptions & EditorInfo.IME_MASK_ACTION) != EditorInfo.IME_ACTION_NONE; }
Example 20
Source File: AdapterInputConnection.java From android-chromium with BSD 2-Clause "Simplified" License | 4 votes |
@VisibleForTesting AdapterInputConnection(View view, ImeAdapter imeAdapter, EditorInfo outAttrs) { super(view, true); mInternalView = view; mImeAdapter = imeAdapter; mImeAdapter.setInputConnection(this); mSingleLine = true; outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN | EditorInfo.IME_FLAG_NO_EXTRACT_UI; outAttrs.inputType = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT; if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeText) { // Normal text field outAttrs.inputType |= EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT; outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeTextArea || imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeContentEditable) { // TextArea or contenteditable. outAttrs.inputType |= EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES | EditorInfo.TYPE_TEXT_FLAG_AUTO_CORRECT; outAttrs.imeOptions |= EditorInfo.IME_ACTION_NONE; mSingleLine = false; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypePassword) { // Password outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD; outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeSearch) { // Search outAttrs.imeOptions |= EditorInfo.IME_ACTION_SEARCH; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeUrl) { // Url // TYPE_TEXT_VARIATION_URI prevents Tab key from showing, so // exclude it for now. outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeEmail) { // Email outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS; outAttrs.imeOptions |= EditorInfo.IME_ACTION_GO; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeTel) { // Telephone // Number and telephone do not have both a Tab key and an // action in default OSK, so set the action to NEXT outAttrs.inputType = InputType.TYPE_CLASS_PHONE; outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; } else if (imeAdapter.getTextInputType() == ImeAdapter.sTextInputTypeNumber) { // Number outAttrs.inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL; outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; } outAttrs.initialSelStart = imeAdapter.getInitialSelectionStart(); outAttrs.initialSelEnd = imeAdapter.getInitialSelectionEnd(); mLastUpdateSelectionStart = imeAdapter.getInitialSelectionStart(); mLastUpdateSelectionEnd = imeAdapter.getInitialSelectionEnd(); }