mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-06 14:27:24 +00:00
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:
parent
cc0fd41c90
commit
a60fce05cd
@ -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"
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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>
|
Loading…
Reference in New Issue
Block a user