fixed the text case cycle order when the current 'word' is a special character
This commit is contained in:
parent
1a8e34461c
commit
c30c2a3109
5 changed files with 27 additions and 10 deletions
|
|
@ -211,7 +211,7 @@ abstract public class CommandHandler extends TextEditingHandler {
|
||||||
protected boolean nextTextCase() {
|
protected boolean nextTextCase() {
|
||||||
final String currentWord = suggestionOps.isEmpty() || mInputMode.getSequence().isEmpty() ? "" : suggestionOps.getCurrent();
|
final String currentWord = suggestionOps.isEmpty() || mInputMode.getSequence().isEmpty() ? "" : suggestionOps.getCurrent();
|
||||||
|
|
||||||
if (!mInputMode.nextTextCase(currentWord)) {
|
if (!mInputMode.nextTextCase(currentWord, statusBar.getText())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ abstract public class InputMode {
|
||||||
* If "analyzeSurroundingText" is true, and when the mode supports text analyzing, it may apply
|
* If "analyzeSurroundingText" is true, and when the mode supports text analyzing, it may apply
|
||||||
* additional logic to determine the next valid text case.
|
* additional logic to determine the next valid text case.
|
||||||
*/
|
*/
|
||||||
public boolean nextTextCase(@Nullable String currentWord) {
|
public boolean nextTextCase(@Nullable String currentWord, @Nullable String statusBarText) {
|
||||||
if (!language.hasUpperCase()) {
|
if (!language.hasUpperCase()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ public class ModeIdeograms extends ModeWords {
|
||||||
|
|
||||||
@Override protected String adjustSuggestionTextCase(String word, int newTextCase) { return word; }
|
@Override protected String adjustSuggestionTextCase(String word, int newTextCase) { return word; }
|
||||||
@Override public void determineNextWordTextCase(int nextDigit) {}
|
@Override public void determineNextWordTextCase(int nextDigit) {}
|
||||||
@Override public boolean nextTextCase(@Nullable String currentWord) { return false; }
|
@Override public boolean nextTextCase(@Nullable String currentWord, @Nullable String statusBarText) { return false; }
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -383,20 +383,31 @@ class ModeWords extends ModeCheonjiin {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean nextTextCase(@Nullable String currentWord) {
|
public boolean nextTextCase(@Nullable String currentWord, @Nullable String statusBarText) {
|
||||||
if (currentWord == null || currentWord.isEmpty() || (currentWord.length() == 1 && !Character.isAlphabetic(currentWord.charAt(0)))) {
|
if (!language.hasUpperCase()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the user is typing, assume the text case of the current word
|
||||||
|
if (currentWord == null || currentWord.isEmpty()) {
|
||||||
textCase = getTextCase();
|
textCase = getTextCase();
|
||||||
} else {
|
}
|
||||||
|
// if not typing, assume the displayed text case
|
||||||
|
else if (statusBarText != null && !statusBarText.isEmpty() && currentWord.length() == 1 && !Character.isAlphabetic(currentWord.charAt(0))) {
|
||||||
|
textCase = new Text(language, statusBarText).getTextCase();
|
||||||
|
}
|
||||||
|
// ... or fallback to the mode text case
|
||||||
|
else {
|
||||||
textCase = new Text(language, currentWord).getTextCase();
|
textCase = new Text(language, currentWord).getTextCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip capitalized text for words like: 've, 's, 'll, etc... only allow upper and lower cases.
|
// do not capitalize words like: 've, 's, 'll, etc, only allow upper and lower cases.
|
||||||
boolean changed = super.nextTextCase(currentWord);
|
boolean changed = super.nextTextCase(currentWord, statusBarText);
|
||||||
if (textCase != CASE_LOWER && textCase != CASE_UPPER && currentWord != null && currentWord.length() > 1 && !Character.isAlphabetic(currentWord.charAt(0))) {
|
if (textCase != CASE_LOWER && textCase != CASE_UPPER && currentWord != null && currentWord.length() > 1 && !Character.isAlphabetic(currentWord.charAt(0))) {
|
||||||
changed = super.nextTextCase(currentWord);
|
changed = super.nextTextCase(currentWord, statusBarText);
|
||||||
}
|
}
|
||||||
|
|
||||||
// since it's a user's choice, the default matters no more
|
// since the user made an explicit choice, the app default matters no more
|
||||||
textFieldTextCase = changed ? CASE_UNDEFINED : textFieldTextCase;
|
textFieldTextCase = changed ? CASE_UNDEFINED : textFieldTextCase;
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,12 @@ public class StatusBar {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public String getText() {
|
||||||
|
return statusText;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isErrorShown() {
|
public boolean isErrorShown() {
|
||||||
return statusText != null && statusText.startsWith("❌");
|
return statusText != null && statusText.startsWith("❌");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue