diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt index fb854582a8f4e5454d8c200e7e8911900373e727..3623247e33477574a980a196fe9a1cd44f4fd275 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ChatActivity.kt @@ -115,7 +115,7 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc editor = Editor( this, - viewModel.autoCompleteData.toLiveData(), + viewModel.autoCompleteData, viewModel.lastWord, findViewById(R.id.chatline), findViewById(R.id.send), 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 74b281b494ae585d656354cd3538a928d42a733c..cab18626f8fcdbaf3c920dd1fc08a621807398cc 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 @@ -1,6 +1,5 @@ package de.kuschku.quasseldroid.ui.chat.input -import android.arch.lifecycle.LiveData import android.arch.lifecycle.Observer import android.graphics.Typeface import android.support.annotation.ColorInt @@ -19,6 +18,7 @@ import android.view.inputmethod.EditorInfo import butterknife.BindView import butterknife.ButterKnife import de.kuschku.libquassel.util.IrcUserUtils +import de.kuschku.libquassel.util.helpers.value import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.settings.AppearanceSettings import de.kuschku.quasseldroid.settings.AutoCompleteSettings @@ -32,12 +32,13 @@ import de.kuschku.quasseldroid.util.ui.TextDrawable import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem import io.reactivex.Observable import io.reactivex.subjects.BehaviorSubject +import java.util.concurrent.TimeUnit class Editor( // Contexts activity: AppCompatActivity, // LiveData - private val autoCompleteData: LiveData<Pair<String, List<AutoCompleteItem>>>, + private val autoCompleteData: Observable<Pair<String, List<AutoCompleteItem>>>, lastWordContainer: BehaviorSubject<Observable<Pair<String, IntRange>>>, // Views val chatline: EditTextSelectionChange, @@ -164,55 +165,56 @@ class Editor( formatHandler::autoComplete ) - autoCompleteData.observe(activity, Observer { - val query = it?.first ?: "" - val shouldShowResults = (autoCompleteSettings.auto && query.length >= 3) || - (autoCompleteSettings.prefix && query.startsWith('@')) || - (autoCompleteSettings.prefix && query.startsWith('#')) - val list = if (shouldShowResults) it?.second.orEmpty() else emptyList() - autocompleteAdapter.submitList(list.map { - if (it is AutoCompleteItem.UserItem) { - val nickName = it.nick - val senderColorIndex = IrcUserUtils.senderColor(nickName) - val initial = nickName.trimStart('-', '_', '[', ']', '{', '}', '|', '`', '^', '.', '\\') - .firstOrNull()?.toUpperCase().toString() - val senderColor = senderColors[senderColorIndex] - - fun formatNick(nick: CharSequence): CharSequence { - val spannableString = SpannableString(nick) - spannableString.setSpan( - ForegroundColorSpan(senderColor), - 0, - nick.length, - SpannableString.SPAN_INCLUSIVE_EXCLUSIVE + autoCompleteData.debounce(300, TimeUnit.MILLISECONDS) + .toLiveData().observe(activity, Observer { + val query = it?.first ?: "" + val shouldShowResults = (autoCompleteSettings.auto && query.length >= 3) || + (autoCompleteSettings.prefix && query.startsWith('@')) || + (autoCompleteSettings.prefix && query.startsWith('#')) + val list = if (shouldShowResults) it?.second.orEmpty() else emptyList() + autocompleteAdapter.submitList(list.map { + if (it is AutoCompleteItem.UserItem) { + val nickName = it.nick + val senderColorIndex = IrcUserUtils.senderColor(nickName) + val initial = nickName.trimStart('-', '_', '[', ']', '{', '}', '|', '`', '^', '.', '\\') + .firstOrNull()?.toUpperCase().toString() + val senderColor = senderColors[senderColorIndex] + + fun formatNick(nick: CharSequence): CharSequence { + val spannableString = SpannableString(nick) + spannableString.setSpan( + ForegroundColorSpan(senderColor), + 0, + nick.length, + SpannableString.SPAN_INCLUSIVE_EXCLUSIVE + ) + spannableString.setSpan( + StyleSpan(Typeface.BOLD), + 0, + nick.length, + SpannableString.SPAN_INCLUSIVE_EXCLUSIVE + ) + return spannableString + } + + it.copy( + displayNick = formatNick(it.nick), + fallbackDrawable = TextDrawable.builder().buildRound(initial, senderColor), + modes = when (messageSettings.showPrefix) { + MessageSettings.ShowPrefixMode.ALL -> + it.modes + else -> + it.modes.substring(0, Math.min(it.modes.length, 1)) + }, + realname = ircFormatDeserializer.formatString( + activity, it.realname.toString(), messageSettings.colorizeMirc + ) ) - spannableString.setSpan( - StyleSpan(Typeface.BOLD), - 0, - nick.length, - SpannableString.SPAN_INCLUSIVE_EXCLUSIVE - ) - return spannableString + } else { + it } - - it.copy( - displayNick = formatNick(it.nick), - fallbackDrawable = TextDrawable.builder().buildRound(initial, senderColor), - modes = when (messageSettings.showPrefix) { - MessageSettings.ShowPrefixMode.ALL -> - it.modes - else -> - it.modes.substring(0, Math.min(it.modes.length, 1)) - }, - realname = ircFormatDeserializer.formatString( - activity, it.realname.toString(), messageSettings.colorizeMirc - ) - ) - } else { - it - } + }) }) - }) if (autoCompleteSettings.prefix || autoCompleteSettings.auto) { for (autoCompleteList in autoCompleteLists) { @@ -343,8 +345,12 @@ class Editor( true } KeyEvent.KEYCODE_TAB -> { - autoComplete(event.isShiftPressed) - true + if (!event.isAltPressed && !event.isCtrlPressed) { + autoComplete(event.isShiftPressed) + true + } else { + false + } } else -> false } 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 3964b0fc8f2625ba93eb15e3affd57d9d92746bc..cf32d8fd0c17b133c2dd2867cdc387c9211a1856 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -217,7 +217,6 @@ class QuasselViewModel : ViewModel() { combineLatest(session, buffer, lastWord).switchMap { (sessionOptional, id, lastWordWrapper) -> lastWordWrapper .distinctUntilChanged() - .debounce(300, TimeUnit.MILLISECONDS) .switchMap { lastWord -> val session = sessionOptional.orNull() val bufferSyncer = session?.bufferSyncer