Adds scroll behaviour to FABs

This commit is contained in:
ericdecanini 2022-07-29 15:48:21 +02:00
parent 8e7e320e40
commit 406a67827c

View File

@ -20,10 +20,10 @@ import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.ConcatAdapter
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.airbnb.epoxy.EpoxyControllerAdapter import com.airbnb.epoxy.EpoxyControllerAdapter
import com.airbnb.epoxy.OnModelBuildFinishedListener import com.airbnb.epoxy.OnModelBuildFinishedListener
import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.fragmentViewModel
@ -72,7 +72,7 @@ class HomeRoomListFragment @Inject constructor(
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
sharedActionViewModel = activityViewModelProvider.get(RoomListQuickActionsSharedActionViewModel::class.java) sharedActionViewModel = activityViewModelProvider[RoomListQuickActionsSharedActionViewModel::class.java]
sharedActionViewModel sharedActionViewModel
.stream() .stream()
.onEach { handleQuickActions(it) } .onEach { handleQuickActions(it) }
@ -111,8 +111,7 @@ class HomeRoomListFragment @Inject constructor(
} }
private fun setupFabs() { private fun setupFabs() {
views.newLayoutCreateChatButton.isVisible = true showFABs()
views.newLayoutOpenSpacesButton.isVisible = true
views.newLayoutCreateChatButton.setOnClickListener { views.newLayoutCreateChatButton.setOnClickListener {
// Click action for create chat modal goes here // Click action for create chat modal goes here
@ -121,6 +120,29 @@ class HomeRoomListFragment @Inject constructor(
views.newLayoutOpenSpacesButton.setOnClickListener { views.newLayoutOpenSpacesButton.setOnClickListener {
// Click action for open spaces modal goes here // Click action for open spaces modal goes here
} }
// Hide FABs when list is scrolling
views.roomListView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
views.createChatFabMenu.handler.removeCallbacksAndMessages(null)
when (newState) {
RecyclerView.SCROLL_STATE_IDLE -> views.createChatFabMenu.postDelayed(::showFABs, 250)
RecyclerView.SCROLL_STATE_DRAGGING,
RecyclerView.SCROLL_STATE_SETTLING -> hideFABs()
}
}
})
}
private fun showFABs() {
views.newLayoutCreateChatButton.show()
views.newLayoutOpenSpacesButton.show()
}
private fun hideFABs() {
views.newLayoutCreateChatButton.hide()
views.newLayoutOpenSpacesButton.hide()
} }
override fun invalidate() = withState(roomListViewModel) { state -> override fun invalidate() = withState(roomListViewModel) { state ->