mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 11:39:42 +01:00
WIP filter conversations feature, UI finished
Signed-off-by: Julius Linus julius.linus@nextcloud.com Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
e1da473f72
commit
d209083700
@ -97,6 +97,7 @@ import com.nextcloud.talk.settings.SettingsActivity
|
||||
import com.nextcloud.talk.ui.dialog.ChooseAccountDialogFragment
|
||||
import com.nextcloud.talk.ui.dialog.ChooseAccountShareToDialogFragment
|
||||
import com.nextcloud.talk.ui.dialog.ConversationsListBottomDialog
|
||||
import com.nextcloud.talk.ui.dialog.FilterConversationFragment
|
||||
import com.nextcloud.talk.users.UserManager
|
||||
import com.nextcloud.talk.utils.ApiUtils
|
||||
import com.nextcloud.talk.utils.ClosedInterfaceImpl
|
||||
@ -758,6 +759,11 @@ class ConversationsListActivity :
|
||||
}
|
||||
}
|
||||
|
||||
binding.filterConversationsButton.setOnClickListener {
|
||||
val newFragment: DialogFragment = FilterConversationFragment.newInstance(adapter!!)
|
||||
newFragment.show(supportFragmentManager, FilterConversationFragment.TAG)
|
||||
}
|
||||
|
||||
binding?.newMentionPopupBubble?.hide()
|
||||
binding?.newMentionPopupBubble?.setPopupBubbleListener {
|
||||
binding?.recyclerView?.smoothScrollToPosition(
|
||||
|
@ -0,0 +1,119 @@
|
||||
package com.nextcloud.talk.ui.dialog
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import autodagger.AutoInjector
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.nextcloud.talk.R
|
||||
import com.nextcloud.talk.api.NcApi
|
||||
import com.nextcloud.talk.application.NextcloudTalkApplication
|
||||
import com.nextcloud.talk.databinding.DialogFilterConversationBinding
|
||||
import com.nextcloud.talk.ui.theme.ViewThemeUtils
|
||||
import com.nextcloud.talk.users.UserManager
|
||||
import eu.davidea.flexibleadapter.FlexibleAdapter
|
||||
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
|
||||
import javax.inject.Inject
|
||||
|
||||
@AutoInjector(NextcloudTalkApplication::class)
|
||||
class FilterConversationFragment(adapter: FlexibleAdapter<AbstractFlexibleItem<*>>) : DialogFragment() {
|
||||
lateinit var binding: DialogFilterConversationBinding
|
||||
private var dialogView: View? = null
|
||||
private var currentAdapter: FlexibleAdapter<AbstractFlexibleItem<*>> = adapter
|
||||
private var filterState = mutableMapOf(NONE to true, MENTION to false, UNREAD to false)
|
||||
|
||||
@Inject
|
||||
lateinit var ncApi: NcApi
|
||||
|
||||
@Inject
|
||||
lateinit var userManager: UserManager
|
||||
|
||||
@Inject
|
||||
lateinit var viewThemeUtils: ViewThemeUtils
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
binding = DialogFilterConversationBinding.inflate(LayoutInflater.from(context))
|
||||
dialogView = binding.root
|
||||
|
||||
return MaterialAlertDialogBuilder(requireContext()).setView(dialogView).create()
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
|
||||
setUpColors()
|
||||
setUpListeners()
|
||||
return inflater.inflate(R.layout.dialog_filter_conversation, container, false)
|
||||
}
|
||||
|
||||
private fun setUpColors() {
|
||||
binding.run {
|
||||
listOf(
|
||||
binding.root,
|
||||
)
|
||||
}.forEach(viewThemeUtils.platform::colorViewBackground)
|
||||
}
|
||||
|
||||
private fun setUpListeners() {
|
||||
binding.noFilterButton.setOnClickListener {
|
||||
Log.i(TAG, "no filter clicked")
|
||||
filterState[NONE] = !filterState[NONE]!!
|
||||
if (filterState[NONE]!!) {
|
||||
binding.noFilterButton.setBackgroundColor(resources.getColor(R.color.colorPrimary))
|
||||
} else
|
||||
binding.noFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
|
||||
filterState[UNREAD] = false
|
||||
binding.unreadFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
filterState[MENTION] = false
|
||||
binding.mentionedFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
}
|
||||
|
||||
binding.unreadFilterButton.setOnClickListener {
|
||||
Log.i(TAG, "unread filter clicked")
|
||||
filterState[UNREAD] = !filterState[UNREAD]!!
|
||||
if (filterState[UNREAD]!!) {
|
||||
binding.unreadFilterButton.setBackgroundColor(
|
||||
resources.getColor(
|
||||
R.color
|
||||
.colorPrimary
|
||||
)
|
||||
)
|
||||
} else binding.unreadFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
filterState[NONE] = false
|
||||
binding.noFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
}
|
||||
|
||||
binding.mentionedFilterButton.setOnClickListener {
|
||||
Log.i(TAG, "mentioned filter clicked")
|
||||
filterState[MENTION] = !filterState[MENTION]!!
|
||||
if (filterState[MENTION]!!) {
|
||||
binding.mentionedFilterButton.setBackgroundColor(resources.getColor(R.color.colorPrimary))
|
||||
} else
|
||||
binding.mentionedFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
|
||||
filterState[NONE] = false
|
||||
binding.noFilterButton.setBackgroundColor(resources.getColor(R.color.grey_200))
|
||||
}
|
||||
|
||||
binding.filterButton.setOnClickListener {
|
||||
Log.i(TAG, "submit clicked")
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun newInstance(adapter: FlexibleAdapter<AbstractFlexibleItem<*>>) = FilterConversationFragment(adapter)
|
||||
val TAG: String = FilterConversationFragment::class.java.simpleName
|
||||
const val NONE: String = "none"
|
||||
const val MENTION: String = "mention"
|
||||
const val UNREAD: String = "unread"
|
||||
}
|
||||
}
|
5
app/src/main/res/drawable/ic_baseline_filter_list_24.xml
Normal file
5
app/src/main/res/drawable/ic_baseline_filter_list_24.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#000000"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z"/>
|
||||
</vector>
|
@ -83,10 +83,27 @@
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/menu_button"
|
||||
app:layout_constraintEnd_toStartOf="@id/rightContainer"
|
||||
app:layout_constraintEnd_toStartOf="@id/filter_conversations_button"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Search in Nextcloud" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/filter_conversations_button"
|
||||
style="@style/Widget.AppTheme.Button.IconButton"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="start"
|
||||
android:contentDescription="@string/nc_filter"
|
||||
android:scaleType="fitCenter"
|
||||
android:transitionName="userAvatar.transitionTag"
|
||||
app:cornerRadius="@dimen/button_corner_radius"
|
||||
app:icon="@drawable/ic_baseline_filter_list_24"
|
||||
app:iconTint="@color/disabled_text"
|
||||
app:iconSize="@dimen/avatar_size_app_bar"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/rightContainer"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/rightContainer"
|
||||
android:layout_width="wrap_content"
|
||||
|
73
app/src/main/res/layout/dialog_filter_conversation.xml
Normal file
73
app/src/main/res/layout/dialog_filter_conversation.xml
Normal file
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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">
|
||||
|
||||
<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: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"/>
|
||||
|
||||
<com.google.android.flexbox.FlexboxLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:flexWrap="wrap">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/no_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"
|
||||
app:icon="@drawable/ic_cancel_black_24dp"
|
||||
android:text="@string/no_filter"/>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/unread_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"
|
||||
app:backgroundTint="@color/grey_200"
|
||||
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"
|
||||
app:backgroundTint="@color/grey_200"
|
||||
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>
|
||||
|
||||
</LinearLayout>
|
@ -680,5 +680,10 @@ How to translate with transifex:
|
||||
<string name="translation_error_title">Translation failed</string>
|
||||
<string name="translation_error_message">Could not detect language</string>
|
||||
<string name="translation_copy_translated_text">Copy translated text</string>
|
||||
<string name="nc_filter">Filter Conversations</string>
|
||||
<string name="nc_filter_short">Filter</string>
|
||||
<string name="mentioned">Mentioned</string>
|
||||
<string name="unread">Unread</string>
|
||||
<string name="no_filter">No Filter</string>
|
||||
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user