@@ -22,7 +22,10 @@ import androidx.compose.animation.fadeOut
2222import androidx.compose.foundation.clickable
2323import androidx.compose.foundation.combinedClickable
2424import androidx.compose.foundation.gestures.ScrollableState
25+ import androidx.compose.foundation.layout.Arrangement
2526import androidx.compose.foundation.layout.Box
27+ import androidx.compose.foundation.layout.Column
28+ import androidx.compose.foundation.layout.Row
2629import androidx.compose.foundation.layout.WindowInsets
2730import androidx.compose.foundation.layout.aspectRatio
2831import androidx.compose.foundation.layout.fillMaxHeight
@@ -68,49 +71,47 @@ import com.tunjid.heron.data.core.types.ProfileId
6871import com.tunjid.heron.data.utilities.asGenericUri
6972import com.tunjid.heron.gallery.ui.Comments
7073import com.tunjid.heron.gallery.ui.CommentsState
71- import com.tunjid.heron.gallery.ui.GalleryFooter
7274import com.tunjid.heron.gallery.ui.GalleryImage
7375import com.tunjid.heron.gallery.ui.GalleryVideo
7476import com.tunjid.heron.gallery.ui.ImageDownloadState
77+ import com.tunjid.heron.gallery.ui.MediaCreatorAndDescription
7578import com.tunjid.heron.gallery.ui.MediaInteractions
76- import com.tunjid.heron.gallery.ui.MediaOverlay
77- import com.tunjid.heron.gallery.ui.MediaPoster
79+ import com.tunjid.heron.gallery.ui.MediaOverlayBox
7880import com.tunjid.heron.gallery.ui.PagerStates
7981import com.tunjid.heron.gallery.ui.galleryHeightFraction
8082import com.tunjid.heron.gallery.ui.isNotCollapsed
8183import com.tunjid.heron.gallery.ui.rememberCommentsState
8284import com.tunjid.heron.interpolatedVisibleIndexEffect
8385import com.tunjid.heron.media.video.ControlsVisibilityEffect
8486import com.tunjid.heron.media.video.LocalVideoPlayerController
87+ import com.tunjid.heron.media.video.PlaybackStatus
8588import com.tunjid.heron.media.video.PlayerControlsUiState
8689import com.tunjid.heron.media.video.VideoPlayerController
8790import com.tunjid.heron.scaffold.navigation.NavigationAction
8891import com.tunjid.heron.scaffold.navigation.composePostDestination
8992import com.tunjid.heron.scaffold.navigation.conversationDestination
90- import com.tunjid.heron.scaffold.navigation.profileDestination
9193import com.tunjid.heron.scaffold.navigation.signInDestination
9294import com.tunjid.heron.scaffold.scaffold.DragToPopState.Companion.dragToPop
9395import com.tunjid.heron.scaffold.scaffold.DragToPopState.Companion.rememberDragToPopState
9496import com.tunjid.heron.scaffold.scaffold.PaneScaffoldState
9597import com.tunjid.heron.tiling.TilingState
9698import com.tunjid.heron.tiling.tiledItems
9799import com.tunjid.heron.timeline.state.TimelineState
98- import com.tunjid.heron.timeline.ui.PostAction
99100import com.tunjid.heron.timeline.ui.post.PostInteractionsSheetState
100101import com.tunjid.heron.timeline.ui.post.PostInteractionsSheetState.Companion.rememberUpdatedPostInteractionsSheetState
101102import com.tunjid.heron.timeline.ui.post.PostOption
102103import com.tunjid.heron.timeline.ui.post.PostOptionsSheetState
103104import com.tunjid.heron.timeline.ui.post.PostOptionsSheetState.Companion.rememberUpdatedPostOptionsSheetState
104105import com.tunjid.heron.timeline.ui.profile.ProfileRestrictionDialogState.Companion.rememberProfileRestrictionDialogState
105106import com.tunjid.heron.timeline.ui.sheets.MutedWordsSheetState.Companion.rememberUpdatedMutedWordsSheetState
106- import com.tunjid.heron.timeline.utilities.avatarSharedElementKey
107107import com.tunjid.heron.ui.Indicator
108108import com.tunjid.heron.ui.UiTokens
109109import com.tunjid.heron.ui.platformStatusBars
110110import com.tunjid.heron.ui.text.links
111111import com.tunjid.tiler.compose.PivotedTilingEffect
112112import kotlin.math.absoluteValue
113113import kotlin.math.roundToInt
114+ import kotlinx.coroutines.flow.collectLatest
114115import kotlinx.coroutines.launch
115116
116117@Composable
@@ -482,94 +483,68 @@ private fun HorizontalItems(
482483 )
483484 }
484485
485- MediaOverlay (
486+ MediaOverlayBox (
486487 modifier = Modifier
487488 .fillMaxSize(),
488489 media = item.media.getOrNull(pagerState.currentPage),
489490 isVisible = playerControlsUiState.playerControlsVisible,
490491 ) { media ->
491- val viewedProfileId = item.post.author.did
492- MediaPoster (
492+ Column (
493493 modifier = Modifier
494- .windowInsetsPadding( WindowInsets .platformStatusBars )
494+ .align( Alignment . BottomStart )
495495 .padding(
496- horizontal = 16 .dp,
497- vertical = 20 .dp,
498- ),
499- post = item.post,
500- signedInProfileId = signedInProfileId,
501- viewerState = item.viewerState,
502- sharedElementPrefix = item.posterSharedElementPrefix,
503- paneScaffoldState = paneScaffoldState,
504- onProfileClicked = { post ->
505- actions(
506- Action .Navigate .To (
507- profileDestination(
508- profile = post.author,
509- avatarSharedElementKey = post.avatarSharedElementKey(
510- prefix = item.posterSharedElementPrefix,
511- ),
512- referringRouteOption = NavigationAction .ReferringRouteOption .Current ,
513- ),
514- ),
496+ horizontal = 8 .dp,
497+ vertical = 16 .dp,
515498 )
516- },
517- onViewerStateToggled = remember(signedInProfileId, viewedProfileId) {
518- { viewerState ->
519- signedInProfileId?.let {
520- actions(
521- Action .ToggleViewerState (
522- signedInProfileId = it,
523- viewedProfileId = viewedProfileId,
524- following = viewerState?.following,
525- followedBy = viewerState?.followedBy,
526- ),
527- )
528- }
529- }
530- },
531- )
532-
533- MediaInteractions (
534- post = item.post,
535- paneScaffoldState = paneScaffoldState,
536- modifier = Modifier
537- .padding(horizontal = 16 .dp),
538- showEngagementMetrics = showEngagementMetrics,
539- onPostInteraction = { interaction ->
540- when (interaction) {
541- is PostAction .OfInteraction -> postInteractionSheetState.onInteraction(
542- interaction,
543- )
544- is PostAction .OfMetadata -> Unit
545- is PostAction .OfMore -> postOptionsSheetState.showOptions(
546- interaction.post,
499+ .windowInsetsPadding(insets = WindowInsets .navigationBars),
500+ verticalArrangement = Arrangement .spacedBy(8 .dp),
501+ ) {
502+ Row (
503+ modifier = Modifier
504+ .weight(1f )
505+ .fillMaxWidth(),
506+ verticalAlignment = Alignment .Bottom ,
507+ horizontalArrangement = Arrangement .spacedBy(8 .dp),
508+ ) {
509+ MediaCreatorAndDescription (
510+ modifier = Modifier
511+ .weight(1f ),
512+ signedInProfileId = signedInProfileId,
513+ item = item,
514+ paneScaffoldState = paneScaffoldState,
515+ actions = actions,
516+ )
517+ MediaInteractions (
518+ modifier = Modifier
519+ .fillMaxHeight()
520+ .windowInsetsPadding(WindowInsets .platformStatusBars),
521+ media = media,
522+ imageDownloadState = imageDownloadState,
523+ videoPlayerController = videoPlayerController,
524+ actions = actions,
525+ item = item,
526+ paneScaffoldState = paneScaffoldState,
527+ showEngagementMetrics = showEngagementMetrics,
528+ postInteractionSheetState = postInteractionSheetState,
529+ postOptionsSheetState = postOptionsSheetState,
530+ commentsState = commentsState,
531+ )
532+ }
533+ (item.media.firstOrNull() as ? GalleryItem .Media .Video )
534+ ?.let { videoPlayerController.getVideoStateById(it.video.playlist.uri) }
535+ ?.let { videoPlayerState ->
536+ PlaybackStatus (
537+ modifier = Modifier
538+ .fillMaxWidth(),
539+ videoPlayerState = videoPlayerState,
540+ controlsState = playerControlsUiState,
547541 )
548- is PostAction .OfReply -> {
549- commentsState.expand()
550- actions(
551- Action .LoadComments (
552- post = item.post,
553- order = null ,
554- ),
555- )
542+ LaunchedEffect (Unit ) {
543+ snapshotFlow { videoPlayerState.status }
544+ .collectLatest(playerControlsUiState::update)
556545 }
557546 }
558- },
559- )
560- GalleryFooter (
561- modifier = Modifier
562- .fillMaxWidth()
563- .padding(vertical = 24 .dp)
564- .windowInsetsPadding(insets = WindowInsets .navigationBars),
565- item = media,
566- videoPlayerController = videoPlayerController,
567- imageDownloadState = imageDownloadState,
568- post = item.post,
569- paneScaffoldState = paneScaffoldState,
570- actions = actions,
571- playerControlsUiState = playerControlsUiState,
572- )
547+ }
573548 }
574549
575550 pagerState.interpolatedVisibleIndexEffect(
0 commit comments