diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt
index e354be2f..e7b8b837 100644
--- a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt
+++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/RoomListFragment.kt
@@ -93,25 +93,26 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Callback, O
}
// Hide FAB when list is scrolling
- epoxyRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
- override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
- createChatFabMenu.removeCallbacks(showFabRunnable)
+ epoxyRecyclerView.addOnScrollListener(
+ object : RecyclerView.OnScrollListener() {
+ override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
+ createChatFabMenu.removeCallbacks(showFabRunnable)
- when (newState) {
- RecyclerView.SCROLL_STATE_IDLE -> {
- createChatFabMenu.postDelayed(showFabRunnable, 1000)
- }
- RecyclerView.SCROLL_STATE_DRAGGING,
- RecyclerView.SCROLL_STATE_SETTLING -> {
- when (roomListParams.displayMode) {
- DisplayMode.HOME -> createChatFabMenu.hide()
- DisplayMode.PEOPLE -> createChatRoomButton.hide()
- else -> createGroupRoomButton.hide()
+ when (newState) {
+ RecyclerView.SCROLL_STATE_IDLE -> {
+ createChatFabMenu.postDelayed(showFabRunnable, 1000)
+ }
+ RecyclerView.SCROLL_STATE_DRAGGING,
+ RecyclerView.SCROLL_STATE_SETTLING -> {
+ when (roomListParams.displayMode) {
+ DisplayMode.HOME -> createChatFabMenu.hide()
+ DisplayMode.PEOPLE -> createChatRoomButton.hide()
+ else -> createGroupRoomButton.hide()
+ }
+ }
}
}
- }
- }
- })
+ })
}
@@ -220,7 +221,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Callback, O
return super.onBackPressed()
}
- // RoomSummaryController.Callback **************************************************************
+// RoomSummaryController.Callback **************************************************************
override fun onRoomSelected(room: RoomSummary) {
roomListViewModel.accept(RoomListActions.SelectRoom(room))
diff --git a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt
index 95b7179c..9210e7ac 100644
--- a/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt
+++ b/vector/src/main/java/im/vector/riotredesign/features/home/room/list/widget/FabMenuView.kt
@@ -18,56 +18,31 @@ package im.vector.riotredesign.features.home.room.list.widget
import android.content.Context
import android.util.AttributeSet
-import android.view.ViewGroup
-import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.constraintlayout.widget.ConstraintSet
+import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.core.view.isVisible
-import androidx.transition.ChangeTransform
-import androidx.transition.Transition
-import androidx.transition.TransitionManager
+import com.google.android.material.floatingactionbutton.FloatingActionButton
import im.vector.riotredesign.R
-import im.vector.riotredesign.core.animations.ANIMATION_DURATION_SHORT
-import im.vector.riotredesign.core.animations.SimpleTransitionListener
-import im.vector.riotredesign.core.animations.VectorFullTransitionSet
import im.vector.riotredesign.features.themes.ThemeUtils
-import kotlinx.android.synthetic.main.merge_fab_menu_view.view.*
+import kotlinx.android.synthetic.main.motion_fab_menu_merge.view.*
class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null,
- defStyleAttr: Int = 0) : ConstraintLayout(context, attrs, defStyleAttr) {
+ defStyleAttr: Int = 0) : MotionLayout(context, attrs, defStyleAttr) {
var listener: Listener? = null
- private var isFabMenuOpened = false
-
init {
- inflate(context, R.layout.merge_fab_menu_view, this)
+ inflate(context, R.layout.motion_fab_menu_merge, this)
}
override fun onFinishInflate() {
super.onFinishInflate()
- // Collapse
- ConstraintSet().also {
- it.clone(context, R.layout.constraint_set_fab_menu_close)
- it.applyTo(this)
- }
-
- createRoomItemChat.isVisible = false
- createRoomItemChatLabel.isVisible = false
- createRoomItemGroup.isVisible = false
- createRoomItemGroupLabel.isVisible = false
- // Collapse end
-
// Tint label background
listOf(createRoomItemChatLabel, createRoomItemGroupLabel)
.forEach {
it.setBackgroundResource(ThemeUtils.getResourceId(context, R.drawable.vector_label_background_light))
}
- createRoomButton.setOnClickListener {
- toggleFabMenu()
- }
-
listOf(createRoomItemChat, createRoomItemChatLabel)
.forEach {
it.setOnClickListener {
@@ -89,68 +64,25 @@ class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSe
}
fun show() {
+ isVisible = true
createRoomButton.show()
}
fun hide() {
- createRoomButton.hide()
- }
-
- private fun openFabMenu() {
- if (isFabMenuOpened) {
- return
- }
-
- toggleFabMenu()
+ createRoomButton.hide(object : FloatingActionButton.OnVisibilityChangedListener() {
+ override fun onHidden(fab: FloatingActionButton?) {
+ super.onHidden(fab)
+ isVisible = false
+ }
+ })
}
private fun closeFabMenu() {
- if (!isFabMenuOpened) {
- return
- }
-
- toggleFabMenu()
- }
-
- private fun toggleFabMenu() {
- isFabMenuOpened = !isFabMenuOpened
-
- TransitionManager.beginDelayedTransition(parent as? ViewGroup ?: this,
- VectorFullTransitionSet().apply {
- duration = ANIMATION_DURATION_SHORT
- ChangeTransform()
- addListener(object : SimpleTransitionListener() {
- override fun onTransitionEnd(transition: Transition) {
- // Hide the view after the transition for a better visual effect
- createRoomItemChat.isVisible = isFabMenuOpened
- createRoomItemChatLabel.isVisible = isFabMenuOpened
- createRoomItemGroup.isVisible = isFabMenuOpened
- createRoomItemGroupLabel.isVisible = isFabMenuOpened
- }
- })
- })
-
- if (isFabMenuOpened) {
- // Animate manually the rotation for a better effect
- createRoomButton.animate().setDuration(ANIMATION_DURATION_SHORT).rotation(135f)
-
-
- ConstraintSet().also {
- it.clone(context, R.layout.constraint_set_fab_menu_open)
- it.applyTo(this)
- }
- } else {
- createRoomButton.animate().setDuration(ANIMATION_DURATION_SHORT).rotation(0f)
-
- ConstraintSet().also {
- it.clone(context, R.layout.constraint_set_fab_menu_close)
- it.applyTo(this)
- }
- }
+ transitionToStart()
}
fun onBackPressed(): Boolean {
- if (isFabMenuOpened) {
+ if (currentState == R.id.constraint_set_fab_menu_open) {
closeFabMenu()
return true
}
diff --git a/vector/src/main/res/layout/constraint_set_fab_menu_close.xml b/vector/src/main/res/layout/constraint_set_fab_menu_close.xml
deleted file mode 100644
index 4df0e8d0..00000000
--- a/vector/src/main/res/layout/constraint_set_fab_menu_close.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/vector/src/main/res/layout/constraint_set_fab_menu_open.xml b/vector/src/main/res/layout/constraint_set_fab_menu_open.xml
deleted file mode 100644
index fc47458e..00000000
--- a/vector/src/main/res/layout/constraint_set_fab_menu_open.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/vector/src/main/res/layout/fragment_room_list.xml b/vector/src/main/res/layout/fragment_room_list.xml
index 452451f7..729afb2b 100644
--- a/vector/src/main/res/layout/fragment_room_list.xml
+++ b/vector/src/main/res/layout/fragment_room_list.xml
@@ -17,6 +17,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
+ app:layoutDescription="@xml/motion_scene_fab_menu"
+ tools:showPaths="true"
tools:visibility="visible" />
+
+ app:layoutDescription="@xml/motion_scene_fab_menu"
+ tools:motionProgress="0.65"
+ tools:parentTag="androidx.constraintlayout.motion.widget.MotionLayout"
+ tools:showPaths="true">
+ app:tint="@color/black" />
@@ -43,19 +44,19 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:src="@drawable/ic_fab_add_chat"
- android:visibility="gone"
- app:backgroundTint="?riotx_fab_secondary_bg"
+ app:backgroundTint="#FFFFFF"
app:fabCustomSize="48dp"
app:maxImageSize="29dp"
- app:tint="?riotx_fab_secondary_color"
- tools:ignore="MissingConstraints"
- tools:visibility="visible" />
+ app:tint="@color/black" />
@@ -63,11 +64,7 @@
android:id="@+id/createRoomButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="bottom|end"
android:src="@drawable/ic_fab_add"
- android:visibility="gone"
- app:maxImageSize="14dp"
- tools:ignore="MissingConstraints"
- tools:visibility="visible" />
+ app:maxImageSize="14dp" />
diff --git a/vector/src/main/res/xml/motion_scene_fab_menu.xml b/vector/src/main/res/xml/motion_scene_fab_menu.xml
new file mode 100644
index 00000000..646cfc34
--- /dev/null
+++ b/vector/src/main/res/xml/motion_scene_fab_menu.xml
@@ -0,0 +1,205 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file