code cleanup
This commit is contained in:
parent
0f0439d0d9
commit
dce95c2888
4 changed files with 88 additions and 86 deletions
|
|
@ -290,7 +290,7 @@ public abstract class HotkeyHandler extends TypingHandler {
|
||||||
} else {
|
} else {
|
||||||
int nextModeIndex = (allowedInputModes.indexOf(mInputMode.getId()) + 1) % allowedInputModes.size();
|
int nextModeIndex = (allowedInputModes.indexOf(mInputMode.getId()) + 1) % allowedInputModes.size();
|
||||||
mInputMode = InputMode.getInstance(settings, mLanguage, inputType, allowedInputModes.get(nextModeIndex));
|
mInputMode = InputMode.getInstance(settings, mLanguage, inputType, allowedInputModes.get(nextModeIndex));
|
||||||
mInputMode.setTextFieldCase(textField.determineTextCase(inputType));
|
mInputMode.setTextFieldCase(inputType.determineTextCase());
|
||||||
mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor());
|
mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor());
|
||||||
|
|
||||||
resetKeyRepeat();
|
resetKeyRepeat();
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ public abstract class TypingHandler extends KeyPadHandler {
|
||||||
*/
|
*/
|
||||||
private void determineTextCase() {
|
private void determineTextCase() {
|
||||||
mInputMode.defaultTextCase();
|
mInputMode.defaultTextCase();
|
||||||
mInputMode.setTextFieldCase(textField.determineTextCase(inputType));
|
mInputMode.setTextFieldCase(inputType.determineTextCase());
|
||||||
mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor());
|
mInputMode.determineNextWordTextCase(textField.getStringBeforeCursor());
|
||||||
InputModeValidator.validateTextCase(mInputMode, settings.getTextCase());
|
InputModeValidator.validateTextCase(mInputMode, settings.getTextCase());
|
||||||
}
|
}
|
||||||
|
|
@ -230,7 +230,7 @@ public abstract class TypingHandler extends KeyPadHandler {
|
||||||
return InputMode.MODE_PASSTHROUGH;
|
return InputMode.MODE_PASSTHROUGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
allowedInputModes = textField.determineInputModes(inputType);
|
allowedInputModes = inputType.determineInputModes();
|
||||||
return InputModeValidator.validateMode(settings.getInputMode(), allowedInputModes);
|
return InputModeValidator.validateMode(settings.getInputMode(), allowedInputModes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,10 @@ package io.github.sspanak.tt9.ime.helpers;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.InputConnection;
|
import android.view.inputmethod.InputConnection;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import io.github.sspanak.tt9.ime.modes.InputMode;
|
||||||
|
|
||||||
|
|
||||||
public class InputType {
|
public class InputType {
|
||||||
private final InputConnection connection;
|
private final InputConnection connection;
|
||||||
|
|
@ -117,4 +121,85 @@ public class InputType {
|
||||||
private boolean isUri() {
|
private boolean isUri() {
|
||||||
return field != null && (field.inputType & android.text.InputType.TYPE_MASK_VARIATION) == android.text.InputType.TYPE_TEXT_VARIATION_URI;
|
return field != null && (field.inputType & android.text.InputType.TYPE_MASK_VARIATION) == android.text.InputType.TYPE_TEXT_VARIATION_URI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* determineInputModes
|
||||||
|
* Determine the typing mode based on the input field being edited. Returns an ArrayList of the allowed modes.
|
||||||
|
*
|
||||||
|
* @return ArrayList<SettingsStore.MODE_ABC | SettingsStore.MODE_123 | SettingsStore.MODE_PREDICTIVE>
|
||||||
|
*/
|
||||||
|
public ArrayList<Integer> determineInputModes() {
|
||||||
|
ArrayList<Integer> allowedModes = new ArrayList<>();
|
||||||
|
|
||||||
|
if (field == null) {
|
||||||
|
allowedModes.add(InputMode.MODE_123);
|
||||||
|
return allowedModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculators (only 0-9 and math) and Dialer (0-9, "#" and "*") fields
|
||||||
|
// handle all input themselves, so we are supposed to pass through all key presses.
|
||||||
|
// Note: A Dialer field is not a Phone number field.
|
||||||
|
if (isSpecialNumeric()) {
|
||||||
|
allowedModes.add(InputMode.MODE_PASSTHROUGH);
|
||||||
|
return allowedModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (field.inputType & android.text.InputType.TYPE_MASK_CLASS) {
|
||||||
|
case android.text.InputType.TYPE_CLASS_NUMBER:
|
||||||
|
case android.text.InputType.TYPE_CLASS_DATETIME:
|
||||||
|
case android.text.InputType.TYPE_CLASS_PHONE:
|
||||||
|
// Numbers, dates and phone numbers default to the numeric keyboard,
|
||||||
|
// with no extra features.
|
||||||
|
allowedModes.add(InputMode.MODE_123);
|
||||||
|
return allowedModes;
|
||||||
|
|
||||||
|
case android.text.InputType.TYPE_CLASS_TEXT:
|
||||||
|
// This is general text editing. We will default to the
|
||||||
|
// normal alphabetic keyboard, and assume that we should
|
||||||
|
// be doing predictive text (showing candidates as the
|
||||||
|
// user types).
|
||||||
|
if (!isPassword()) {
|
||||||
|
allowedModes.add(InputMode.MODE_PREDICTIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ↓ fallthrough to add ABC and 123 modes ↓
|
||||||
|
|
||||||
|
default:
|
||||||
|
// For all unknown input types, default to the alphabetic
|
||||||
|
// keyboard with no special features.
|
||||||
|
allowedModes.add(InputMode.MODE_123);
|
||||||
|
allowedModes.add(InputMode.MODE_ABC);
|
||||||
|
|
||||||
|
return allowedModes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper to update the shift state of our keyboard based on the initial
|
||||||
|
* editor state.
|
||||||
|
*/
|
||||||
|
public int determineTextCase() {
|
||||||
|
if (connection == null || field == null || field.inputType == android.text.InputType.TYPE_NULL) {
|
||||||
|
return InputMode.CASE_UNDEFINED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isSpecialized()) {
|
||||||
|
return InputMode.CASE_LOWER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isPersonName()) {
|
||||||
|
return InputMode.CASE_CAPITALIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (field.inputType & android.text.InputType.TYPE_MASK_FLAGS) {
|
||||||
|
case android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS:
|
||||||
|
return InputMode.CASE_UPPER;
|
||||||
|
case android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS:
|
||||||
|
return InputMode.CASE_CAPITALIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return InputMode.CASE_UNDEFINED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@ import android.view.inputmethod.InputConnection;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import io.github.sspanak.tt9.ime.modes.InputMode;
|
import io.github.sspanak.tt9.ime.modes.InputMode;
|
||||||
import io.github.sspanak.tt9.languages.Language;
|
import io.github.sspanak.tt9.languages.Language;
|
||||||
import io.github.sspanak.tt9.languages.LanguageKind;
|
import io.github.sspanak.tt9.languages.LanguageKind;
|
||||||
|
|
@ -51,87 +49,6 @@ public class TextField {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* determineInputModes
|
|
||||||
* Determine the typing mode based on the input field being edited. Returns an ArrayList of the allowed modes.
|
|
||||||
*
|
|
||||||
* @return ArrayList<SettingsStore.MODE_ABC | SettingsStore.MODE_123 | SettingsStore.MODE_PREDICTIVE>
|
|
||||||
*/
|
|
||||||
public ArrayList<Integer> determineInputModes(InputType inputType) {
|
|
||||||
ArrayList<Integer> allowedModes = new ArrayList<>();
|
|
||||||
|
|
||||||
if (field == null) {
|
|
||||||
allowedModes.add(InputMode.MODE_123);
|
|
||||||
return allowedModes;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculators (only 0-9 and math) and Dialer (0-9, "#" and "*") fields
|
|
||||||
// handle all input themselves, so we are supposed to pass through all key presses.
|
|
||||||
// Note: A Dialer field is not a Phone number field.
|
|
||||||
if (inputType.isSpecialNumeric()) {
|
|
||||||
allowedModes.add(InputMode.MODE_PASSTHROUGH);
|
|
||||||
return allowedModes;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (field.inputType & android.text.InputType.TYPE_MASK_CLASS) {
|
|
||||||
case android.text.InputType.TYPE_CLASS_NUMBER:
|
|
||||||
case android.text.InputType.TYPE_CLASS_DATETIME:
|
|
||||||
case android.text.InputType.TYPE_CLASS_PHONE:
|
|
||||||
// Numbers, dates and phone numbers default to the numeric keyboard,
|
|
||||||
// with no extra features.
|
|
||||||
allowedModes.add(InputMode.MODE_123);
|
|
||||||
return allowedModes;
|
|
||||||
|
|
||||||
case android.text.InputType.TYPE_CLASS_TEXT:
|
|
||||||
// This is general text editing. We will default to the
|
|
||||||
// normal alphabetic keyboard, and assume that we should
|
|
||||||
// be doing predictive text (showing candidates as the
|
|
||||||
// user types).
|
|
||||||
if (!inputType.isPassword()) {
|
|
||||||
allowedModes.add(InputMode.MODE_PREDICTIVE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ↓ fallthrough to add ABC and 123 modes ↓
|
|
||||||
|
|
||||||
default:
|
|
||||||
// For all unknown input types, default to the alphabetic
|
|
||||||
// keyboard with no special features.
|
|
||||||
allowedModes.add(InputMode.MODE_123);
|
|
||||||
allowedModes.add(InputMode.MODE_ABC);
|
|
||||||
|
|
||||||
return allowedModes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper to update the shift state of our keyboard based on the initial
|
|
||||||
* editor state.
|
|
||||||
*/
|
|
||||||
public int determineTextCase(InputType inputType) {
|
|
||||||
if (connection == null || field == null || field.inputType == android.text.InputType.TYPE_NULL) {
|
|
||||||
return InputMode.CASE_UNDEFINED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inputType.isSpecialized()) {
|
|
||||||
return InputMode.CASE_LOWER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (inputType.isPersonName()) {
|
|
||||||
return InputMode.CASE_CAPITALIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (field.inputType & android.text.InputType.TYPE_MASK_FLAGS) {
|
|
||||||
case android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS:
|
|
||||||
return InputMode.CASE_UPPER;
|
|
||||||
case android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS:
|
|
||||||
return InputMode.CASE_CAPITALIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return InputMode.CASE_UNDEFINED;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public String getStringAfterCursor(int numberOfChars) {
|
public String getStringAfterCursor(int numberOfChars) {
|
||||||
CharSequence character = connection != null ? connection.getTextAfterCursor(numberOfChars, 0) : null;
|
CharSequence character = connection != null ? connection.getTextAfterCursor(numberOfChars, 0) : null;
|
||||||
return character != null ? character.toString() : "";
|
return character != null ? character.toString() : "";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue