diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt index cab18626f8fcdbaf3c920dd1fc08a621807398cc..d3a9f21fb2d0ff810360e848f05c68c80fa36539 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/Editor.kt @@ -84,8 +84,8 @@ class Editor( val end = Math.min( s.length, previous.range.start + previous.completion.name.length + suffix.length ) - val sequence = if (end > previous.range.start) "" else s.substring(previous.range.start, - end) + val sequence = if (end < previous.range.start) "" + else s.substring(previous.range.start, end) if (sequence == previous.completion.name + suffix) { previous.originalWord to (previous.range.start until end) } else { @@ -319,41 +319,43 @@ class Editor( TooltipCompat.setTooltipText(clearButton, clearButton.contentDescription) chatline.setOnKeyListener { _, keyCode, event -> - if (event.isCtrlPressed && !event.isAltPressed && event.action == KeyEvent.ACTION_DOWN) when (keyCode) { - KeyEvent.KEYCODE_B -> { - formatHandler.toggleBold(chatline.selection) - updateButtons(chatline.selection) - true - } - KeyEvent.KEYCODE_I -> { - formatHandler.toggleItalic(chatline.selection) - updateButtons(chatline.selection) - true - } - KeyEvent.KEYCODE_U -> { - formatHandler.toggleUnderline(chatline.selection) - updateButtons(chatline.selection) - true - } - else -> false - } else when (keyCode) { - KeyEvent.KEYCODE_ENTER, - KeyEvent.KEYCODE_NUMPAD_ENTER -> if (event.isShiftPressed) { - false - } else { - send() - true - } - KeyEvent.KEYCODE_TAB -> { - if (!event.isAltPressed && !event.isCtrlPressed) { - autoComplete(event.isShiftPressed) + if (event.action == KeyEvent.ACTION_DOWN) { + if (event.isCtrlPressed && !event.isAltPressed) when (keyCode) { + KeyEvent.KEYCODE_B -> { + formatHandler.toggleBold(chatline.selection) + updateButtons(chatline.selection) true - } else { + } + KeyEvent.KEYCODE_I -> { + formatHandler.toggleItalic(chatline.selection) + updateButtons(chatline.selection) + true + } + KeyEvent.KEYCODE_U -> { + formatHandler.toggleUnderline(chatline.selection) + updateButtons(chatline.selection) + true + } + else -> false + } else when (keyCode) { + KeyEvent.KEYCODE_ENTER, + KeyEvent.KEYCODE_NUMPAD_ENTER -> if (event.isShiftPressed) { false + } else { + send() + true + } + KeyEvent.KEYCODE_TAB -> { + if (!event.isAltPressed && !event.isCtrlPressed) { + autoComplete(event.isShiftPressed) + true + } else { + false + } } + else -> false } - else -> false - } + } else false } } diff --git a/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt b/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt index d184f0122bb7828f709012df81ee1c5277ef5955..0939f7b2bc23a849f149954c2fc6be9d652f6130 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt @@ -10,8 +10,10 @@ object IrcCaseMappers { fun equalsIgnoreCase(a: String, b: String): Boolean fun toLowerCase(value: String): String + fun toLowerCaseNullable(value: String?): String? = value?.let(this@IrcCaseMapper::toLowerCase) fun toUpperCase(value: String): String + fun toUpperCaseNullable(value: String?): String? = value?.let(this@IrcCaseMapper::toUpperCase) } internal class UnicodeCaseMapper : IrcCaseMapper { @@ -32,11 +34,17 @@ object IrcCaseMappers { internal class ClassicalIrcCaseMapper : IrcCaseMapper { override fun toLowerCase(value: String): String { - return value.toLowerCase(Locale.US).replace('[', '{').replace(']', '}').replace('^', '~') + return value.toLowerCase(Locale.US) + .replace('[', '{') + .replace(']', '}') + .replace('^', '~') } override fun toUpperCase(value: String): String { - return value.toUpperCase(Locale.US).replace('{', '[').replace('}', ']').replace('~', '^') + return value.toUpperCase(Locale.US) + .replace('{', '[') + .replace('}', ']') + .replace('~', '^') } override fun equalsIgnoreCase(a: String, b: String): Boolean { @@ -49,4 +57,4 @@ object IrcCaseMappers { } else { unicode } -} \ No newline at end of file +} diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt index cf32d8fd0c17b133c2dd2867cdc387c9211a1856..d6e90f91c964be7c4557c87a5267f7e2fd9adff3 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -18,6 +18,7 @@ import de.kuschku.libquassel.util.Optional import de.kuschku.libquassel.util.flag.and import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.libquassel.util.helpers.* +import de.kuschku.libquassel.util.irc.IrcCaseMappers import de.kuschku.quasseldroid.util.helper.combineLatest import de.kuschku.quasseldroid.util.helper.switchMapNotNull import de.kuschku.quasseldroid.util.helper.toLiveData @@ -511,7 +512,7 @@ class QuasselViewModel : ViewModel() { it.info.type.hasFlag(Buffer_Type.StatusBuffer) }.let { if (config.sortAlphabetically()) - it.sortedBy { it.info.bufferName } + it.sortedBy { IrcCaseMappers.unicode.toLowerCaseNullable(it.info.bufferName) } .sortedByDescending { it.hiddenState == BufferHiddenState.VISIBLE } else it }.distinctBy { it.info.bufferId }