diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt index 1eea6bbde98ba228e07a74152a2b693218920f94..0294711ae3a2fbac99735a0be617b6f25aa9abd5 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferViewConfigFragment.kt @@ -46,6 +46,8 @@ import de.kuschku.libquassel.quassel.syncables.BufferViewConfig import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.libquassel.util.flag.minus +import de.kuschku.libquassel.util.helpers.mapMap +import de.kuschku.libquassel.util.helpers.mapOrElse import de.kuschku.libquassel.util.helpers.nullIf import de.kuschku.libquassel.util.helpers.value import de.kuschku.quasseldroid.R @@ -461,8 +463,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() { }) chatListToolbar.inflateMenu(R.menu.context_bufferlist) + chatListToolbar.menu.findItem(R.id.action_search).isChecked = viewModel.bufferSearchTemporarilyVisible.value chatListToolbar.setOnMenuItemClickListener { item -> when (item.itemId) { + R.id.action_search -> { + item.isChecked = !item.isChecked + viewModel.bufferSearchTemporarilyVisible.onNext(item.isChecked) + true + } R.id.action_show_hidden -> { item.isChecked = !item.isChecked viewModel.showHidden.onNext(item.isChecked) @@ -482,11 +490,21 @@ class BufferViewConfigFragment : ServiceBoundFragment() { hasSetBufferViewConfigId = false }) - viewModel.bufferViewConfig.toLiveData().observe(this, Observer { - val visible = it.orNull()?.showSearch() ?: false - bufferSearchContainer.visibleIf(visible) - if (!visible) bufferSearch.setText("") - }) + val bufferSearchPermanentlyVisible = viewModel.bufferViewConfig + .mapMap(BufferViewConfig::showSearch) + .mapOrElse(false) + + combineLatest(viewModel.bufferSearchTemporarilyVisible, bufferSearchPermanentlyVisible) + .toLiveData().observe(this, Observer { (temporarily, permanently) -> + val visible = temporarily || permanently + + val menuItem = chatListToolbar.menu.findItem(R.id.action_search) + menuItem.isVisible = !permanently + if (permanently) menuItem.isChecked = false + + bufferSearchContainer.visibleIf(visible) + if (!visible) bufferSearch.setText("") + }) bufferSearch.addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable) { @@ -515,6 +533,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() { longClickListener(bufferId) } else { context?.let { + viewModel.bufferSearchTemporarilyVisible.onNext(false) ChatActivity.launch(it, bufferId = bufferId) } } diff --git a/app/src/main/res/menu/context_bufferlist.xml b/app/src/main/res/menu/context_bufferlist.xml index bb1f8dd02d8c353d561ed05d9aa4dcb9df0d9924..cb6f9de17a07a821ae9799aa1e4bc7f42ab79ede 100644 --- a/app/src/main/res/menu/context_bufferlist.xml +++ b/app/src/main/res/menu/context_bufferlist.xml @@ -18,6 +18,10 @@ --> <menu xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:id="@+id/action_search" + android:checkable="true" + android:title="@string/label_search_buffer" /> <item android:id="@+id/action_show_hidden" android:checkable="true" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 80c47c71229030e59b781d22677ce6b192905e8b..52df2bb65bdff43ce3f8c322be939674ee495c37 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -102,7 +102,8 @@ <string name="label_rename">Rename</string> <string name="label_save">Save</string> <string name="label_saving">Saving…</string> - <string name="label_search_buffer">Search…</string> + <string name="label_search">Search…</string> + <string name="label_search_buffer">Search Chats</string> <string name="label_select">Select</string> <string name="label_send">Send</string> <string name="label_set_default">Set Default</string> 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 405e1030f1e94e20a664171a543cfee138324cd3..04e11b532b79641e79f86877aa481a689ebed6de 100644 --- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt +++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt @@ -116,6 +116,8 @@ class QuasselViewModel : ViewModel() { }.mapSwitchMap(BufferViewConfig::liveUpdates) } + val bufferSearchTemporarilyVisible = BehaviorSubject.createDefault(false) + val errors = sessionManager.switchMap { it.orNull()?.error ?: Observable.empty() }