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 de0b6ca40f6719639f960545d0eafe3ba7599186..0c38ca0e057198616c50bb7faab7868e1bc746a0 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 @@ -10,6 +10,9 @@ import android.os.Bundle import android.os.PersistableBundle import android.support.v4.widget.DrawerLayout import android.support.v7.app.ActionBarDrawerToggle +import android.support.v7.widget.DefaultItemAnimator +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView import android.support.v7.widget.Toolbar import android.text.Html import android.view.* @@ -32,6 +35,7 @@ import de.kuschku.quasseldroid.persistence.AccountDatabase import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.settings.MessageSettings import de.kuschku.quasseldroid.settings.Settings +import de.kuschku.quasseldroid.ui.chat.input.AutoCompleteAdapter import de.kuschku.quasseldroid.ui.chat.input.ChatlineFragment import de.kuschku.quasseldroid.ui.clientsettings.app.AppSettingsActivity import de.kuschku.quasseldroid.ui.coresettings.CoreSettingsActivity @@ -58,6 +62,9 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc @BindView(R.id.editor_panel) lateinit var editorPanel: SlidingUpPanelLayout + @BindView(R.id.autocomplete_list) + lateinit var autoCompleteList: RecyclerView + @Inject lateinit var database: QuasselDatabase @@ -127,6 +134,18 @@ class ChatActivity : ServiceBoundActivity(), SharedPreferences.OnSharedPreferenc } }) + if (autoCompleteSettings.prefix || autoCompleteSettings.auto) { + chatlineFragment?.let { + val autocompleteAdapter = AutoCompleteAdapter(messageSettings, it.chatline::autoComplete) + autoCompleteList.layoutManager = LinearLayoutManager(it.activity) + autoCompleteList.itemAnimator = DefaultItemAnimator() + autoCompleteList.adapter = autocompleteAdapter + it.autoCompleteHelper.setDataListener { + autocompleteAdapter.submitList(it) + } + } + } + viewModel.errors.observe(this, Observer { error -> error?.let { when (it) { diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt index cebc155c413c7cc0f85627bb225d280957b5ca47..58e2460de41f3a35a07ec044805c8051dca060d3 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt @@ -48,6 +48,9 @@ class ChatlineFragment : ServiceBoundFragment() { @BindView(R.id.history_panel) lateinit var historyPanel: SlidingUpPanelLayout + @BindView(R.id.autocomplete_list_expanded) + lateinit var autoCompleteList: RecyclerView + @Inject lateinit var autoCompleteSettings: AutoCompleteSettings @@ -65,6 +68,8 @@ class ChatlineFragment : ServiceBoundFragment() { lateinit var editorHelper: EditorHelper + lateinit var autoCompleteHelper: AutoCompleteHelper + val panelSlideListener = object : SlidingUpPanelLayout.PanelSlideListener { override fun onPanelSlide(panel: View?, slideOffset: Float) = Unit @@ -84,7 +89,7 @@ class ChatlineFragment : ServiceBoundFragment() { val editorViewModel = ViewModelProviders.of(this).get(EditorViewModel::class.java) editorViewModel.quasselViewModel.onNext(viewModel) - val autoCompleteHelper = AutoCompleteHelper( + autoCompleteHelper = AutoCompleteHelper( requireActivity(), autoCompleteSettings, messageSettings, @@ -104,15 +109,12 @@ class ChatlineFragment : ServiceBoundFragment() { editorViewModel.lastWord.onNext(editorHelper.lastWord) if (autoCompleteSettings.prefix || autoCompleteSettings.auto) { - val autoCompleteLists = listOfNotNull<RecyclerView>( - view.findViewById(R.id.autocomplete_list), - view.findViewById(R.id.autocomplete_list_expanded) - ) val autocompleteAdapter = AutoCompleteAdapter(messageSettings, chatline::autoComplete) - for (autoCompleteList in autoCompleteLists) { - autoCompleteList.layoutManager = LinearLayoutManager(activity) - autoCompleteList.itemAnimator = DefaultItemAnimator() - autoCompleteList.adapter = autocompleteAdapter + autoCompleteList.layoutManager = LinearLayoutManager(activity) + autoCompleteList.itemAnimator = DefaultItemAnimator() + autoCompleteList.adapter = autocompleteAdapter + autoCompleteHelper.setDataListener { + autocompleteAdapter.submitList(it) } } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt index 5c7d3ac8a6a192fd923a0a75580b5f5cdb551c64..b72d594e0eac30e292521f6a17bc55a1f504dc7a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt @@ -31,6 +31,9 @@ class TopicFragment : SettingsFragment() { @BindView(R.id.formatting_toolbar) lateinit var toolbar: RichToolbar + @BindView(R.id.autocomplete_list_expanded) + lateinit var autoCompleteList: RecyclerView + @Inject lateinit var autoCompleteSettings: AutoCompleteSettings @@ -76,18 +79,15 @@ class TopicFragment : SettingsFragment() { editorViewModel.lastWord.onNext(editorHelper.lastWord) if (autoCompleteSettings.prefix || autoCompleteSettings.auto) { - val autoCompleteLists = listOfNotNull<RecyclerView>( - view.findViewById(R.id.autocomplete_list) - ) val autocompleteAdapter = AutoCompleteAdapter(messageSettings, chatline::autoComplete) - for (autoCompleteList in autoCompleteLists) { - autoCompleteList.layoutManager = LinearLayoutManager(activity) - autoCompleteList.itemAnimator = DefaultItemAnimator() - autoCompleteList.adapter = autocompleteAdapter + autoCompleteList.layoutManager = LinearLayoutManager(activity) + autoCompleteList.itemAnimator = DefaultItemAnimator() + autoCompleteList.adapter = autocompleteAdapter + autoCompleteHelper.setDataListener { + autocompleteAdapter.submitList(it) } } - val bufferId = arguments?.getInt("buffer", -1) ?: -1 viewModel.buffer.onNext(bufferId) viewModel.bufferData.filter { diff --git a/app/src/main/res/values-de/strings_preferences.xml b/app/src/main/res/values-de/strings_preferences.xml index 48b0262f4a8d0a2ec2ad46fc5dc895d285536bdf..f3958451b87c3e74e49c767434bac27609a6df75 100644 --- a/app/src/main/res/values-de/strings_preferences.xml +++ b/app/src/main/res/values-de/strings_preferences.xml @@ -43,7 +43,7 @@ <string name="preference_show_prefix_entry_highest">Höchsten Modus</string> <string name="preference_show_prefix_entry_none">Keine</string> - <string name="preference_hostmask_actions_title">Hostmaske</string> + <string name="preference_hostmask_actions_title">Hostmaske in Aktionen</string> <string name="preference_hostmask_actions_summary">Zeigt Ident und Host in Betreten/Verlassen-Nachrichten</string> <string name="preference_hostmask_plain_title">Hostmaske</string> diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index 43ba210ddc77f4239ec27c9f0cbcd37c7fb93389..b3b15b6b1146df832415707ef04be99d6b732b0f 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -99,8 +99,8 @@ <item>NONE</item> </string-array> - <string name="preference_hostmask_actions_key" translatable="false">hostmaskactions_</string> - <string name="preference_hostmask_actions_title">Show Hostmask</string> + <string name="preference_hostmask_actions_key" translatable="false">hostmask_actions</string> + <string name="preference_hostmask_actions_title">Show Hostmask in actions</string> <string name="preference_hostmask_actions_summary">Display the full nick!ident@host in join/part/quit messages</string> <string name="preference_hostmask_plain_key" translatable="false">hostmask_plain</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index be8c74d5fb2bbd08c6ec858b17bbde10aa6a5786..5300c073475fd8b8a5962ddd583a94614711de28 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -84,11 +84,13 @@ android:defaultValue="false" android:dependency="@string/preference_nicks_on_new_line_key" android:key="@string/preference_hostmask_plain_key" + android:summary="@string/preference_hostmask_plain_summary" android:title="@string/preference_hostmask_plain_title" /> <SwitchPreference android:defaultValue="false" android:key="@string/preference_hostmask_actions_key" + android:summary="@string/preference_hostmask_actions_summary" android:title="@string/preference_hostmask_actions_title" /> <SwitchPreference diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt index 54f9ab51e3df93a55a7bb1b782b45568376d7493..c8b76ac359e0b4cc2b4c1e3ed92eeb6a5fc514be 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt @@ -207,6 +207,32 @@ class BufferSyncer constructor( live_highlightCounts.onNext(_highlightCounts) } + fun all( + bufferName: String? = null, + bufferId: BufferId? = null, + networkId: NetworkId? = null, + type: Buffer_Types? = null, + groupId: Int? = null + ) = _bufferInfos.values.filter { + bufferId == null || it.bufferId == bufferId + }.filter { + networkId == null || it.networkId == networkId + }.filter { + type == null || it.type == type + }.filter { + groupId == null || it.groupId == groupId + }.filter { + bufferName == null || it.bufferName == bufferName + } + + fun find( + bufferName: String? = null, + bufferId: BufferId? = null, + networkId: NetworkId? = null, + type: Buffer_Types? = null, + groupId: Int? = null + ) = all(bufferName, bufferId, networkId, type, groupId).firstOrNull() + private val _lastSeenMsg: MutableMap<BufferId, MsgId> = mutableMapOf() private val live_lastSeenMsg = BehaviorSubject.createDefault(mapOf<BufferId, MsgId>())