Fixes Jump on FollowPack screens

This commit is contained in:
Vitor Pamplona
2025-11-12 14:18:01 -05:00
parent 27bc950afb
commit 8963024a95
2 changed files with 104 additions and 85 deletions
@@ -21,12 +21,14 @@
package com.vitorpamplona.amethyst.ui.screen package com.vitorpamplona.amethyst.ui.screen
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled import com.vitorpamplona.amethyst.ui.actions.CrossfadeIfEnabled
import com.vitorpamplona.amethyst.ui.feeds.FeedEmpty import com.vitorpamplona.amethyst.ui.feeds.FeedEmpty
@@ -85,6 +87,7 @@ private fun FeedLoaded(
val listState = rememberLazyListState() val listState = rememberLazyListState()
LazyColumn( LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = FeedPadding, contentPadding = FeedPadding,
state = listState, state = listState,
) { ) {
@@ -32,6 +32,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.statusBars import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.PagerState
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
@@ -141,7 +142,6 @@ fun PrepareViewModelsFollowPackScreen(
FollowPackFeedScreen(note, newThreadFeedViewModel, conversationsFeedViewModel, membersFeedViewModel, accountViewModel, nav) FollowPackFeedScreen(note, newThreadFeedViewModel, conversationsFeedViewModel, membersFeedViewModel, accountViewModel, nav)
} }
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun FollowPackFeedScreen( fun FollowPackFeedScreen(
note: AddressableNote, note: AddressableNote,
@@ -162,6 +162,53 @@ fun FollowPackFeedScreen(
DisappearingScaffold( DisappearingScaffold(
isInvertedLayout = false, isInvertedLayout = false,
topBar = { topBar = {
FollowPackFeedTopBar(
note,
pagerState,
accountViewModel,
nav,
)
},
accountViewModel = accountViewModel,
) {
HorizontalPager(
contentPadding = it,
state = pagerState,
) { page ->
when (page) {
0 ->
RefresheableFeedView(
newThreadFeedViewModel,
null,
accountViewModel = accountViewModel,
nav = nav,
)
1 ->
RefresheableFeedView(
conversationsFeedViewModel,
null,
accountViewModel = accountViewModel,
nav = nav,
)
2 ->
UserFeedView(
membersFeedViewModel,
accountViewModel,
nav,
)
}
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun FollowPackFeedTopBar(
note: AddressableNote,
pagerState: PagerState,
accountViewModel: AccountViewModel,
nav: INav,
) {
Column { Column {
val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() val statusBarHeight = WindowInsets.statusBars.asPaddingValues().calculateTopPadding()
val modifier = Modifier.fillMaxWidth().height(TopBarSize + statusBarHeight) val modifier = Modifier.fillMaxWidth().height(TopBarSize + statusBarHeight)
@@ -246,37 +293,6 @@ fun FollowPackFeedScreen(
) )
} }
} }
},
accountViewModel = accountViewModel,
) {
HorizontalPager(
contentPadding = it,
state = pagerState,
) { page ->
when (page) {
0 ->
RefresheableFeedView(
newThreadFeedViewModel,
null,
accountViewModel = accountViewModel,
nav = nav,
)
1 ->
RefresheableFeedView(
conversationsFeedViewModel,
null,
accountViewModel = accountViewModel,
nav = nav,
)
2 ->
UserFeedView(
membersFeedViewModel,
accountViewModel,
nav,
)
}
}
}
} }
@Composable @Composable