blob: 080d0127a1b4ca745efba2d7f209b0847e359fe9 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.omnibox;
import android.text.Editable;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;
import android.widget.TextView;
import org.chromium.base.VisibleForTesting;
/**
* An abstraction of the text model to show, keep track of, and update autocomplete.
*/
public interface AutocompleteEditTextModelBase {
/**
* An embedder should implement this.
*/
public interface Delegate {
/** @see TextView#getText() */
Editable getText();
/** @see TextView#getEditableText() */
Editable getEditableText();
/** @see TextView#append(CharSequence) */
void append(CharSequence subSequence);
/** @see TextView#getSelectionStart() */
int getSelectionStart();
/** @see TextView#getSelectionEnd() */
int getSelectionEnd();
/** @see EditText#setSelection(int, int) */
void setSelection(int autocompleteIndex, int length);
/** @see TextView#announceForAccessibility(CharSequence) */
void announceForAccessibility(CharSequence inlineAutocompleteText);
/** @see TextView#getHighlightColor() */
int getHighlightColor();
/** @see TextView#setCursorVisible(boolean) */
void setCursorVisible(boolean visible);
/** @see TextView#isFocused() */
boolean isFocused();
/** @see TextView#sendAccessibilityEventUnchecked(AccessibilityEvent) */
void sendAccessibilityEventUnchecked(AccessibilityEvent event);
/**
* Call super.dispatchKeyEvent(KeyEvent).
* @param event Key event.
* @return The return value of super.dispatchKeyEvent(KeyEvent).
*/
boolean super_dispatchKeyEvent(KeyEvent event);
/**
* This is called when autocomplete replaces the whole text.
* @param text The text.
*/
void replaceAllTextFromAutocomplete(String text);
/** @return Whether accessibility is enabled. */
boolean isAccessibilityEnabled();
/**
* This is called when autocomplete text state changes.
* @param updateDisplay True if string is changed.
*/
void onAutocompleteTextStateChanged(boolean updateDisplay);
/**
* This is called roughly the same time as when we call
* InputMethodManager#updateSelection().
*
* @param selStart Selection start.
* @param selEnd Selection end.
*/
void onUpdateSelectionForTesting(int selStart, int selEnd);
/** @return The package name of the current keyboard app. */
String getKeyboardPackageName();
}
/**
* Called when creating an input connection.
* @param inputConnection An {@link InputConnection} created by EditText.
* @return A wrapper @{link InputConnection} created by the model.
*/
InputConnection onCreateInputConnection(InputConnection inputConnection);
/**
* Called when View#dispatchKeyEvent(KeyEvent event) is called.
* @param event The key event.
* @return True if key event has been handled, false otherwise.
*/
boolean dispatchKeyEvent(KeyEvent event);
/**
* Called when TextView#setText(CharSequence, BufferType) is called.
* @param text The new text.
*/
void onSetText(CharSequence text);
/**
* Called when TextView#onSelectionChanged(int, int) is called.
* @param selStart The selection start.
* @param selEnd The selection end.
*/
void onSelectionChanged(int selStart, int selEnd);
/**
* Called when View#onFocusChanged(boolean, int, Rect) is called.
* @param focused True if the View has focus; false otherwise.
*/
void onFocusChanged(boolean focused);
/**
* Called when TextView#onTextChanged(CharSequence, int, int, int) is called.
* @param text The text the TextView is displaying.
* @param start The offset of the start of the range of the text that was modified.
* @param beforeLength The length of the former text that has been replaced.
* @param afterLength The length of the replacement modified text.
*/
void onTextChanged(CharSequence text, int start, int beforeLength, int afterLength);
/** Called when text gets pasted. */
void onPaste();
/**
* @return The whole text including both user text and autocomplete text.
*/
String getTextWithAutocomplete();
/**
* @return The user text without the autocomplete text.
*/
String getTextWithoutAutocomplete();
/**
* Returns the length of the autocomplete text currently displayed, zero if none is
* currently displayed.
*/
String getAutocompleteText();
/**
* Sets whether text changes should trigger autocomplete.
* @param ignore Whether text changes should be ignored and no auto complete.
*/
void setIgnoreTextChangeFromAutocomplete(boolean ignore);
/**
* Autocompletes the text and selects the text that was not entered by the user. Using append()
* instead of setText() to preserve the soft-keyboard layout.
* @param userText user The text entered by the user.
* @param inlineAutocompleteText The suggested autocompletion for the user's text.
*/
void setAutocompleteText(CharSequence userText, CharSequence inlineAutocompleteText);
/**
* Whether we want to be showing inline autocomplete results. We don't want to show them as the
* user deletes input. Also if there is a composition (e.g. while using the Japanese IME),
* we must not autocomplete or we'll destroy the composition.
* @return Whether we want to be showing inline autocomplete results.
*/
boolean shouldAutocomplete();
/** @return Whether any autocomplete information is specified on the current text. */
@VisibleForTesting
boolean hasAutocomplete();
/** @return The current {@link InputConnection} object. */
@VisibleForTesting
InputConnection getInputConnection();
/**
* @return Whether accessibility event should be ignored.
*/
boolean shouldIgnoreAccessibilityEvent();
}