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 95b7179c40..7b8fb78c4c 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,29 @@ 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.core.view.isVisible
-import androidx.transition.ChangeTransform
-import androidx.transition.Transition
-import androidx.transition.TransitionManager
+import androidx.constraintlayout.motion.widget.MotionLayout
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,6 +62,9 @@ class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSe
}
fun show() {
+ // Ensure visibility is well restored
+ // FIXME It does not work, FAB is not visible, alpha is 0... And cannot set it to 1
+
createRoomButton.show()
}
@@ -96,61 +72,12 @@ class FabMenuView @JvmOverloads constructor(context: Context, attrs: AttributeSe
createRoomButton.hide()
}
- private fun openFabMenu() {
- if (isFabMenuOpened) {
- return
- }
-
- toggleFabMenu()
- }
-
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 4df0e8d092..0000000000
--- 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 fc47458ece..0000000000
--- 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 452451f77c..729afb2b30 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.5"
+ tools:parentTag="androidx.constraintlayout.motion.widget.MotionLayout"
+ tools:showPaths="true">
+ app:tint="@color/black" />
@@ -43,17 +43,16 @@
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 +62,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 0000000000..d1c94f35ba
--- /dev/null
+++ b/vector/src/main/res/xml/motion_scene_fab_menu.xml
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file