Animate transition from/to space manage rooms mode.
This commit is contained in:
parent
bed35807d2
commit
6d3dfe7687
1 changed files with 58 additions and 33 deletions
|
|
@ -10,9 +10,17 @@ package io.element.android.features.space.impl.root
|
||||||
|
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
import androidx.compose.animation.expandVertically
|
||||||
|
import androidx.compose.animation.fadeIn
|
||||||
|
import androidx.compose.animation.fadeOut
|
||||||
|
import androidx.compose.animation.shrinkVertically
|
||||||
|
import androidx.compose.animation.slideIn
|
||||||
|
import androidx.compose.animation.veilOut
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.interaction.MutableInteractionSource
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
|
@ -103,25 +111,36 @@ fun SpaceView(
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
topBar = {
|
topBar = {
|
||||||
if (state.isManageMode) {
|
Box {
|
||||||
ManageModeTopBar(
|
AnimatedVisibility(
|
||||||
selectedCount = state.selectedCount,
|
visible = state.isManageMode,
|
||||||
isRemoveButtonEnabled = state.isRemoveButtonEnabled,
|
enter = fadeIn(),
|
||||||
onCancelClick = { state.eventSink(SpaceEvents.ExitManageMode) },
|
exit = fadeOut()
|
||||||
onRemoveClick = { state.eventSink(SpaceEvents.RemoveSelectedRooms) },
|
) {
|
||||||
)
|
ManageModeTopBar(
|
||||||
} else {
|
selectedCount = state.selectedCount,
|
||||||
SpaceViewTopBar(
|
isRemoveButtonEnabled = state.isRemoveButtonEnabled,
|
||||||
currentSpace = state.currentSpace,
|
onCancelClick = { state.eventSink(SpaceEvents.ExitManageMode) },
|
||||||
canAccessSpaceSettings = state.canAccessSpaceSettings,
|
onRemoveClick = { state.eventSink(SpaceEvents.RemoveSelectedRooms) },
|
||||||
showManageRoomsAction = state.showManageRoomsAction,
|
)
|
||||||
onBackClick = onBackClick,
|
}
|
||||||
onLeaveSpaceClick = onLeaveSpaceClick,
|
AnimatedVisibility(
|
||||||
onShareSpace = onShareSpace,
|
visible = !state.isManageMode,
|
||||||
onSettingsClick = onSettingsClick,
|
enter = fadeIn(),
|
||||||
onViewMembersClick = onViewMembersClick,
|
exit = fadeOut()
|
||||||
onManageRoomsClick = { state.eventSink(SpaceEvents.EnterManageMode) },
|
) {
|
||||||
)
|
SpaceViewTopBar(
|
||||||
|
currentSpace = state.currentSpace,
|
||||||
|
canAccessSpaceSettings = state.canAccessSpaceSettings,
|
||||||
|
showManageRoomsAction = state.showManageRoomsAction,
|
||||||
|
onBackClick = onBackClick,
|
||||||
|
onLeaveSpaceClick = onLeaveSpaceClick,
|
||||||
|
onShareSpace = onShareSpace,
|
||||||
|
onSettingsClick = onSettingsClick,
|
||||||
|
onViewMembersClick = onViewMembersClick,
|
||||||
|
onManageRoomsClick = { state.eventSink(SpaceEvents.EnterManageMode) },
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
content = { padding ->
|
content = { padding ->
|
||||||
|
|
@ -218,20 +237,26 @@ private fun SpaceViewContent(
|
||||||
LazyColumn(modifier.fillMaxSize()) {
|
LazyColumn(modifier.fillMaxSize()) {
|
||||||
val currentSpace = state.currentSpace
|
val currentSpace = state.currentSpace
|
||||||
if (currentSpace != null) {
|
if (currentSpace != null) {
|
||||||
item {
|
item(key = "space_header") {
|
||||||
SpaceHeaderView(
|
AnimatedVisibility(
|
||||||
avatarData = currentSpace.getAvatarData(AvatarSize.SpaceHeader),
|
!state.isManageMode,
|
||||||
name = currentSpace.displayName,
|
enter = fadeIn() + expandVertically(),
|
||||||
topic = currentSpace.topic,
|
exit = fadeOut() + shrinkVertically()
|
||||||
topicMaxLines = 2,
|
) {
|
||||||
visibility = currentSpace.visibility,
|
Column {
|
||||||
heroes = currentSpace.heroes.toImmutableList(),
|
SpaceHeaderView(
|
||||||
numberOfMembers = currentSpace.numJoinedMembers,
|
avatarData = currentSpace.getAvatarData(AvatarSize.SpaceHeader),
|
||||||
onTopicClick = onTopicClick
|
name = currentSpace.displayName,
|
||||||
)
|
topic = currentSpace.topic,
|
||||||
}
|
topicMaxLines = 2,
|
||||||
item {
|
visibility = currentSpace.visibility,
|
||||||
HorizontalDivider()
|
heroes = currentSpace.heroes.toImmutableList(),
|
||||||
|
numberOfMembers = currentSpace.numJoinedMembers,
|
||||||
|
onTopicClick = onTopicClick
|
||||||
|
)
|
||||||
|
HorizontalDivider()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
itemsIndexed(
|
itemsIndexed(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue