diff --git a/.idea/inspectionProfiles/ktlint.xml b/.idea/inspectionProfiles/ktlint.xml
index 51c63581ed..2d90dc13d3 100644
--- a/.idea/inspectionProfiles/ktlint.xml
+++ b/.idea/inspectionProfiles/ktlint.xml
@@ -38,6 +38,9 @@
+
+
+
diff --git a/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt b/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt
index ac57ffe55e..9918fc1539 100644
--- a/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/openconversations/ListOpenConversationsActivity.kt
@@ -10,9 +10,11 @@ import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.View
+import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector
import com.google.android.material.snackbar.Snackbar
+import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R
import com.nextcloud.talk.activities.BaseActivity
import com.nextcloud.talk.api.NcApi
@@ -23,6 +25,7 @@ import com.nextcloud.talk.openconversations.adapters.OpenConversationsAdapter
import com.nextcloud.talk.openconversations.data.OpenConversation
import com.nextcloud.talk.openconversations.viewmodels.OpenConversationsViewModel
import com.nextcloud.talk.utils.bundle.BundleKeys
+import com.vanniktech.ui.showKeyboardAndFocus
import javax.inject.Inject
@AutoInjector(NextcloudTalkApplication::class)
@@ -40,6 +43,8 @@ class ListOpenConversationsActivity : BaseActivity() {
lateinit var adapter: OpenConversationsAdapter
+ var searching = false
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
@@ -52,15 +57,35 @@ class ListOpenConversationsActivity : BaseActivity() {
setupActionBar()
setContentView(binding.root)
setupSystemColors()
+ viewThemeUtils.platform.colorImageView(binding.searchOpenConversations, ColorRole.ON_SURFACE)
+ viewThemeUtils.platform.colorEditText(binding.searchEdit)
val user = currentUserProvider.currentUser.blockingGet()
adapter = OpenConversationsAdapter(user) { conversation -> adapterOnClick(conversation) }
binding.openConversationsRecyclerView.adapter = adapter
+ binding.searchOpenConversations.setOnClickListener {
+ searching = !searching
+ handleSearchUI(searching)
+ }
+ binding.searchEdit.doOnTextChanged { text, _, _, count ->
+ adapter.filter(text.toString())
+ }
initObservers()
}
+ private fun handleSearchUI(show: Boolean) {
+ if (show) {
+ binding.searchOpenConversations.visibility = View.GONE
+ binding.searchEdit.visibility = View.VISIBLE
+ binding.searchEdit.showKeyboardAndFocus()
+ } else {
+ binding.searchOpenConversations.visibility = View.VISIBLE
+ binding.searchEdit.visibility = View.GONE
+ }
+ }
+
private fun adapterOnClick(conversation: OpenConversation) {
val bundle = Bundle()
bundle.putString(BundleKeys.KEY_ROOM_TOKEN, conversation.roomToken)
@@ -105,7 +130,12 @@ class ListOpenConversationsActivity : BaseActivity() {
private fun setupActionBar() {
setSupportActionBar(binding.openConversationsToolbar)
binding.openConversationsToolbar.setNavigationOnClickListener {
- onBackPressedDispatcher.onBackPressed()
+ if (searching) {
+ handleSearchUI(false)
+ searching = false
+ } else {
+ onBackPressedDispatcher.onBackPressed()
+ }
}
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
diff --git a/app/src/main/java/com/nextcloud/talk/openconversations/adapters/OpenConversationsAdapter.kt b/app/src/main/java/com/nextcloud/talk/openconversations/adapters/OpenConversationsAdapter.kt
index 2fdc128cc0..b8a9e2d0f3 100644
--- a/app/src/main/java/com/nextcloud/talk/openconversations/adapters/OpenConversationsAdapter.kt
+++ b/app/src/main/java/com/nextcloud/talk/openconversations/adapters/OpenConversationsAdapter.kt
@@ -21,6 +21,8 @@ import com.nextcloud.talk.openconversations.data.OpenConversation
class OpenConversationsAdapter(val user: User, private val onClick: (OpenConversation) -> Unit) :
ListAdapter(ConversationsCallback) {
+ private var originalList: List = emptyList()
+ private var isFiltering = false
inner class OpenConversationsViewHolder(val itemBinding: RvItemOpenConversationBinding) :
RecyclerView.ViewHolder(itemBinding.root) {
@@ -68,6 +70,36 @@ class OpenConversationsAdapter(val user: User, private val onClick: (OpenConvers
val conversation = getItem(position)
holder.bindItem(conversation)
}
+
+ fun filter(text: String) {
+ if (text == "") {
+ submitList(originalList)
+ isFiltering = false
+ return
+ }
+
+ isFiltering = true
+ val newList = mutableListOf()
+ for (conversation in originalList) {
+ if (conversation.displayName.contains(text, true) || conversation.description!!.contains(text, true)) {
+ newList.add(conversation)
+ }
+ }
+
+ if (newList.isNotEmpty()) {
+ submitList(newList)
+ }
+ }
+
+ override fun onCurrentListChanged(
+ previousList: MutableList,
+ currentList: MutableList
+ ) {
+ if (!isFiltering) {
+ originalList = currentList
+ }
+ super.onCurrentListChanged(previousList, currentList)
+ }
}
object ConversationsCallback : DiffUtil.ItemCallback() {
diff --git a/app/src/main/res/layout/activity_open_conversations.xml b/app/src/main/res/layout/activity_open_conversations.xml
index a13e48734f..06bae21720 100644
--- a/app/src/main/res/layout/activity_open_conversations.xml
+++ b/app/src/main/res/layout/activity_open_conversations.xml
@@ -16,6 +16,7 @@
android:id="@+id/open_conversations_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
+
+ app:titleTextColor="@color/fontAppbar" >
+
+
+
+
+