WIP filter conversations feature, UI more responsive

Signed-off-by: Julius Linus julius.linus@nextcloud.com

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
rapterjet2004 2023-06-14 10:05:59 -05:00 committed by Andy Scherzinger
parent cc0fd41c90
commit a60fce05cd
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
3 changed files with 44 additions and 104 deletions

View File

@ -193,7 +193,6 @@ class ConversationsListActivity :
private var searchViewDisposable: Disposable? = null
private var filterState =
mutableMapOf(
NONE to true,
MENTION to false,
UNREAD to false
)
@ -788,10 +787,10 @@ class ConversationsListActivity :
}
fun updateFilterConversationButtonColor() {
val colorInt: Int = if (filterState[NONE]!!) {
context.getColor(R.color.grey_200)
} else {
val colorInt: Int = if (filterState.containsValue(true)) {
context.getColor(R.color.colorPrimary)
} else {
context.getColor(R.color.grey_200)
}
val csl = ColorStateList.valueOf(colorInt)
@ -1487,8 +1486,7 @@ class ConversationsListActivity :
showErrorDialog()
}
fun updateFilterState(none: Boolean, mention: Boolean, unread: Boolean) {
filterState[NONE] = none
fun updateFilterState(mention: Boolean, unread: Boolean) {
filterState[MENTION] = mention
filterState[UNREAD] = unread
}
@ -1506,7 +1504,6 @@ class ConversationsListActivity :
const val CLIENT_UPGRADE_GPLAY_LINK = "https://play.google.com/store/apps/details?id="
const val HTTP_SERVICE_UNAVAILABLE = 503
const val MAINTENANCE_MODE_HEADER_KEY = "X-Nextcloud-Maintenance-Mode"
const val NONE: String = "none"
const val MENTION: String = "mention"
const val UNREAD: String = "unread"
}

View File

@ -5,13 +5,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.DialogFragment
import autodagger.AutoInjector
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.items.ConversationItem
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.conversationlist.ConversationsListActivity
import com.nextcloud.talk.databinding.DialogFilterConversationBinding
@ -36,9 +34,6 @@ class FilterConversationFragment(
private var filterState = savedFilterState
private var conversationsList = conversationsListActivity
@Inject
lateinit var ncApi: NcApi
@Inject
lateinit var userManager: UserManager
@ -68,61 +63,39 @@ class FilterConversationFragment(
binding.root,
)
}.forEach(viewThemeUtils.platform::colorViewBackground)
updateFilters()
binding.run {
listOf(
unreadFilterChip,
mentionedFilterChip
)
}.forEach(viewThemeUtils.material::colorChipBackground)
setUpChips()
}
private fun setUpListeners() {
binding.noFilterButton.setOnClickListener {
filterState[NONE] = !filterState[NONE]!!
filterState[UNREAD] = false
filterState[MENTION] = false
updateFilters()
}
binding.unreadFilterButton.setOnClickListener {
filterState[UNREAD] = !filterState[UNREAD]!!
changeUnreadFilter()
filterState[NONE] = false
changeNoneFilter()
}
binding.mentionedFilterButton.setOnClickListener {
filterState[MENTION] = !filterState[MENTION]!!
changeMentionFilter()
filterState[NONE] = false
changeNoneFilter()
}
binding.filterButton.setOnClickListener {
binding.unreadFilterChip.setOnCheckedChangeListener { _, isChecked ->
filterState[UNREAD] = isChecked
binding.unreadFilterChip.isChecked = isChecked
processSubmit()
}
binding.mentionedFilterChip.setOnCheckedChangeListener { _, isChecked ->
filterState[MENTION] = isChecked
binding.mentionedFilterChip.isChecked = isChecked
processSubmit()
dismiss()
}
}
private fun updateFilters() {
changeNoneFilter()
changeUnreadFilter()
changeMentionFilter()
}
private fun changeMentionFilter() {
val colorInt = if (filterState[MENTION]!!) R.color.colorPrimary else R.color.grey_200
binding.mentionedFilterButton.setBackgroundColor(ContextCompat.getColor(requireContext(), colorInt))
}
private fun changeUnreadFilter() {
val colorInt = if (filterState[UNREAD]!!) R.color.colorPrimary else R.color.grey_200
binding.unreadFilterButton.setBackgroundColor(ContextCompat.getColor(requireContext(), colorInt))
}
private fun changeNoneFilter() {
val colorInt = if (filterState[NONE]!!) R.color.colorPrimary else R.color.grey_200
binding.noFilterButton.setBackgroundColor(ContextCompat.getColor(requireContext(), colorInt))
private fun setUpChips() {
binding.unreadFilterChip.isChecked = filterState[UNREAD]!!
binding.mentionedFilterChip.isChecked = filterState[MENTION]!!
}
private fun processSubmit() {
val newItems: MutableList<AbstractFlexibleItem<*>> = ArrayList()
if (filterState[NONE]!!) {
if (!filterState.containsValue(true)) {
currentAdapter.updateDataSet(currentItems, true)
} else {
val items = currentItems
@ -135,7 +108,6 @@ class FilterConversationFragment(
currentAdapter.updateDataSet(newItems, true)
}
conversationsList.updateFilterState(
filterState[NONE]!!,
filterState[MENTION]!!,
filterState[UNREAD]!!
)
@ -145,7 +117,7 @@ class FilterConversationFragment(
private fun filter(conversation: Conversation): Boolean {
var result = true
for ((k, v) in filterState) {
if (k != NONE && v) {
if (v) {
when (k) {
MENTION -> result = result && conversation.unreadMention
UNREAD -> result = result && (conversation.unreadMessages > 0)
@ -165,7 +137,6 @@ class FilterConversationFragment(
conversationsListActivity: ConversationsListActivity
) = FilterConversationFragment(adapter, currentConversations, savedFilterState, conversationsListActivity)
val TAG: String = FilterConversationFragment::class.java.simpleName
const val NONE: String = "none"
const val MENTION: String = "mention"
const val UNREAD: String = "unread"
}

View File

@ -2,70 +2,42 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@color/white"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:orientation="vertical"
tools:background="@color/white"
tools:visibility="visible">
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_margin"
android:layout_gravity="center"
android:layout_margin="@dimen/standard_margin"
android:text="@string/nc_filter"
android:textSize="@dimen/md_title_textsize" />
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:layout_height="wrap_content" />
<com.google.android.flexbox.FlexboxLayout
<com.google.android.material.chip.ChipGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:flexWrap="wrap">
android:layout_margin="@dimen/standard_margin">
<com.google.android.material.button.MaterialButton
android:id="@+id/no_filter_button"
<com.google.android.material.chip.Chip
android:id="@+id/unread_filter_chip"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_half_margin"
android:padding="@dimen/standard_half_padding"
app:icon="@drawable/ic_cancel_black_24dp"
android:text="@string/no_filter"/>
android:text="@string/unread" />
<com.google.android.material.button.MaterialButton
android:id="@+id/unread_filter_button"
<com.google.android.material.chip.Chip
android:id="@+id/mentioned_filter_chip"
style="@style/Widget.Material3.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_half_margin"
android:padding="@dimen/standard_half_padding"
android:text="@string/unread"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/mentioned_filter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_half_margin"
android:padding="@dimen/standard_half_padding"
android:text="@string/mentioned"/>
</com.google.android.flexbox.FlexboxLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/standard_margin"
android:orientation="horizontal"
android:gravity="end">
<com.google.android.material.button.MaterialButton
android:id="@+id/filter_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/standard_quarter_margin"
android:padding="@dimen/standard_half_padding"
android:text="@string/nc_filter_short"/>
</LinearLayout>
android:text="@string/mentioned" />
</com.google.android.material.chip.ChipGroup>
</LinearLayout>