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