mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-14 16:25:05 +01:00
Improvements to search
Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
parent
9a8eacecb8
commit
6fa059919f
@ -23,18 +23,21 @@
|
||||
package com.nextcloud.talk.newarch.features.contactsflow
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.text.InputType
|
||||
import android.view.*
|
||||
import android.view.inputmethod.EditorInfo
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.view.MenuItemCompat
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.observe
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.bluelinelabs.conductor.autodispose.ControllerScopeProvider
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.models.json.participants.Participant
|
||||
import com.nextcloud.talk.newarch.features.contactsflow.source.FixedListSource
|
||||
import com.nextcloud.talk.newarch.features.search.DebouncingTextWatcher
|
||||
import com.nextcloud.talk.newarch.mvvm.BaseView
|
||||
import com.nextcloud.talk.newarch.mvvm.ext.initRecyclerView
|
||||
import com.nextcloud.talk.newarch.utils.ElementPayload
|
||||
@ -45,21 +48,24 @@ import kotlinx.android.synthetic.main.contacts_list_view.view.*
|
||||
import kotlinx.android.synthetic.main.conversations_list_view.view.recyclerView
|
||||
import kotlinx.android.synthetic.main.message_state.view.*
|
||||
import org.koin.android.ext.android.inject
|
||||
import com.nextcloud.talk.R
|
||||
|
||||
class ContactsView<T : Any>(private val bundle: Bundle? = null) : BaseView() {
|
||||
override val scopeProvider: LifecycleScopeProvider<*> = ControllerScopeProvider.from(this)
|
||||
|
||||
private lateinit var viewModel: ContactsViewModel
|
||||
val factory: ContactsViewModelFactory by inject()
|
||||
lateinit var participantsAdapter: Adapter
|
||||
lateinit var selectedParticipantsAdapter: Adapter
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.contacts_list_view
|
||||
}
|
||||
private lateinit var participantsAdapter: Adapter
|
||||
private lateinit var selectedParticipantsAdapter: Adapter
|
||||
|
||||
private val isGroupConversation = bundle?.containsKey(BundleKeys.KEY_CONVERSATION_NAME) == true
|
||||
private val hasToken = bundle?.containsKey(BundleKeys.KEY_CONVERSATION_TOKEN) == true
|
||||
|
||||
private var searchMenuItem: MenuItem? = null
|
||||
override fun getLayoutId(): Int {
|
||||
return R.layout.contacts_list_view
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup
|
||||
@ -180,6 +186,25 @@ class ContactsView<T : Any>(private val bundle: Bundle? = null) : BaseView() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
||||
super.onCreateOptionsMenu(menu, inflater)
|
||||
inflater.inflate(R.menu.menu_contacts, menu);
|
||||
searchMenuItem = menu.findItem(R.id.action_search)
|
||||
val searchView = MenuItemCompat.getActionView(menu.findItem(R.id.action_search)) as SearchView
|
||||
searchView.inputType = InputType.TYPE_TEXT_VARIATION_FILTER
|
||||
var imeOptions = EditorInfo.IME_ACTION_SEARCH or EditorInfo.IME_FLAG_NO_FULLSCREEN
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && appPreferences.isKeyboardIncognito) {
|
||||
imeOptions = imeOptions or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
|
||||
}
|
||||
searchView.imeOptions = imeOptions;
|
||||
searchView.queryHint = resources?.getString(R.string.nc_search)
|
||||
searchView.setOnQueryTextListener(DebouncingTextWatcher(lifecycle, ::setSearchQuery))
|
||||
}
|
||||
|
||||
private fun setSearchQuery(query: CharSequence?) {
|
||||
viewModel.setSearchQuery(query.toString())
|
||||
}
|
||||
|
||||
override fun getTitle(): String? {
|
||||
return when {
|
||||
isGroupConversation -> {
|
||||
|
@ -57,8 +57,10 @@ class ContactsViewModel constructor(
|
||||
}
|
||||
|
||||
fun setSearchQuery(query: String?) {
|
||||
searchQuery = query
|
||||
loadContacts()
|
||||
if (query != searchQuery) {
|
||||
searchQuery = query
|
||||
loadContacts()
|
||||
}
|
||||
}
|
||||
|
||||
fun selectParticipant(participant: Participant) {
|
||||
|
@ -24,8 +24,7 @@ package com.nextcloud.talk.newarch.features.search
|
||||
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.widget.SearchView
|
||||
import androidx.databinding.adapters.SearchViewBindingAdapter
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.coroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
@ -35,7 +34,7 @@ import kotlinx.coroutines.launch
|
||||
class DebouncingTextWatcher(
|
||||
lifecycle: Lifecycle,
|
||||
private val onDebouncingTextWatcherChange: (CharSequence?) -> Unit
|
||||
) : TextWatcher, SearchView.OnQueryTextListener() {
|
||||
) : TextWatcher, SearchView.OnQueryTextListener {
|
||||
private var debouncePeriod: Long = 500
|
||||
|
||||
private val coroutineScope = lifecycle.coroutineScope
|
||||
|
@ -26,7 +26,6 @@
|
||||
android:animateLayoutChanges="true"
|
||||
android:icon="@drawable/ic_search_white_24dp"
|
||||
android:title="@string/nc_search"
|
||||
android:visible="false"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="collapseActionView|ifRoom" />
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user