Fixed some poor quality drawables + changes to allow swipe action to reply to chat message (disabled for now)

This commit is contained in:
Sylvain Berfini 2022-01-10 11:55:13 +01:00
parent 9395ea88a5
commit 0378848f10
7 changed files with 54 additions and 20 deletions

View file

@ -36,6 +36,7 @@ import androidx.databinding.ViewDataBinding
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import java.io.File import java.io.File
@ -225,15 +226,19 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
} }
) )
if (corePreferences.allowSwipeActionOnChatMessage) {
// Swipe action // Swipe action
/*val swipeConfiguration = RecyclerViewSwipeConfiguration() val swipeConfiguration = RecyclerViewSwipeConfiguration()
swipeConfiguration.leftToRightAction = RecyclerViewSwipeConfiguration.Action(icon = R.drawable.menu_reply_default) swipeConfiguration.leftToRightAction = RecyclerViewSwipeConfiguration.Action(
icon = R.drawable.menu_reply,
preventFor = ChatMessagesListAdapter.EventViewHolder::class.java
)
val swipeListener = object : RecyclerViewSwipeListener { val swipeListener = object : RecyclerViewSwipeListener {
override fun onLeftToRightSwipe(viewHolder: RecyclerView.ViewHolder) { override fun onLeftToRightSwipe(viewHolder: RecyclerView.ViewHolder) {
adapter.notifyItemChanged(viewHolder.adapterPosition) adapter.notifyItemChanged(viewHolder.bindingAdapterPosition)
val chatMessageEventLog = adapter.currentList[viewHolder.adapterPosition] val chatMessageEventLog = adapter.currentList[viewHolder.bindingAdapterPosition]
val chatMessage = chatMessageEventLog.chatMessage val chatMessage = chatMessageEventLog.eventLog.chatMessage
if (chatMessage != null) { if (chatMessage != null) {
chatSendingViewModel.pendingChatMessageToReplyTo.value?.destroy() chatSendingViewModel.pendingChatMessageToReplyTo.value?.destroy()
chatSendingViewModel.pendingChatMessageToReplyTo.value = chatSendingViewModel.pendingChatMessageToReplyTo.value =
@ -245,7 +250,8 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
override fun onRightToLeftSwipe(viewHolder: RecyclerView.ViewHolder) {} override fun onRightToLeftSwipe(viewHolder: RecyclerView.ViewHolder) {}
} }
RecyclerViewSwipeUtils(ItemTouchHelper.RIGHT, swipeConfiguration, swipeListener) RecyclerViewSwipeUtils(ItemTouchHelper.RIGHT, swipeConfiguration, swipeListener)
.attachToRecyclerView(binding.chatMessagesList)*/ .attachToRecyclerView(binding.chatMessagesList)
}
val chatScrollListener = object : ChatScrollListener(layoutManager) { val chatScrollListener = object : ChatScrollListener(layoutManager) {
override fun onLoadMore(totalItemsCount: Int) { override fun onLoadMore(totalItemsCount: Int) {

View file

@ -465,6 +465,9 @@ class CorePreferences constructor(private val context: Context) {
val showAllRingtones: Boolean val showAllRingtones: Boolean
get() = config.getBool("app", "show_all_available_ringtones", false) get() = config.getBool("app", "show_all_available_ringtones", false)
val allowSwipeActionOnChatMessage: Boolean
get() = config.getBool("app", "swipe_action_on_chat_messages", false)
/* Default values related */ /* Default values related */
val echoCancellerCalibration: Int val echoCancellerCalibration: Int

View file

@ -46,7 +46,8 @@ class RecyclerViewSwipeConfiguration {
val textColor: Int = Color.WHITE, val textColor: Int = Color.WHITE,
val backgroundColor: Int = 0, val backgroundColor: Int = 0,
val icon: Int = 0, val icon: Int = 0,
val iconTint: Int = 0 val iconTint: Int = 0,
val preventFor: Class<*>? = null
) )
val iconMargin = 16f val iconMargin = 16f
@ -61,7 +62,7 @@ class RecyclerViewSwipeConfiguration {
} }
private class RecyclerViewSwipeUtilsCallback( private class RecyclerViewSwipeUtilsCallback(
direction: Int, val direction: Int,
val configuration: RecyclerViewSwipeConfiguration, val configuration: RecyclerViewSwipeConfiguration,
val listener: RecyclerViewSwipeListener val listener: RecyclerViewSwipeListener
) : ItemTouchHelper.SimpleCallback(0, direction) { ) : ItemTouchHelper.SimpleCallback(0, direction) {
@ -234,6 +235,30 @@ private class RecyclerViewSwipeUtilsCallback(
} }
} }
override fun getSwipeDirs(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder
): Int {
var dirFlags = direction
if (direction and ItemTouchHelper.RIGHT != 0) {
val classToPrevent = configuration.leftToRightAction.preventFor
if (classToPrevent != null) {
if (classToPrevent.isInstance(viewHolder)) {
dirFlags = dirFlags and ItemTouchHelper.RIGHT.inv()
}
}
}
if (direction or ItemTouchHelper.LEFT != 0) {
val classToPrevent = configuration.rightToLeftAction.preventFor
if (classToPrevent != null) {
if (classToPrevent.isInstance(viewHolder)) {
dirFlags = dirFlags and ItemTouchHelper.LEFT.inv()
}
}
}
return dirFlags
}
override fun onMove( override fun onMove(
recyclerView: RecyclerView, recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder, viewHolder: RecyclerView.ViewHolder,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<bitmap android:src="@drawable/menu_imdn_info_default" <bitmap android:src="@drawable/menu_group_info_default"
android:tint="?attr/drawableTintColor"/> android:tint="?attr/drawableTintColor"/>
</item> </item>
</selector> </selector>