Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ import androidx.compose.foundation.layout.windowInsetsTopHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand All @@ -33,6 +35,7 @@ import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
Expand Down Expand Up @@ -65,6 +68,7 @@ internal fun PuppyArticleDestination(
viewModel: PuppyArticleViewModel,
navigateUp: () -> Unit,
imageLoader: ImageLoader,
onScrollOffsetChanged: (Float) -> Unit = {},
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
PuppyArticleScreen(
Expand All @@ -77,6 +81,7 @@ internal fun PuppyArticleDestination(
onRatingClick = {
viewModel.emit(PuppyArticleEvent.RatingClick(it))
},
onScrollOffsetChanged = onScrollOffsetChanged,
)
}

Expand All @@ -87,6 +92,7 @@ private fun PuppyArticleScreen(
onReload: () -> Unit,
onRatingClick: (Int) -> Unit,
imageLoader: ImageLoader,
onScrollOffsetChanged: (Float) -> Unit,
) {
when (uiState) {
PuppyArticleUiState.Failure -> HedvigScaffold(
Expand All @@ -105,6 +111,7 @@ private fun PuppyArticleScreen(
navigateUp = navigateUp,
imageLoader = imageLoader,
onRatingClick = onRatingClick,
onScrollOffsetChanged = onScrollOffsetChanged,
)
}
}
Expand All @@ -116,6 +123,7 @@ private fun PuppyArticleSuccessScreen(
navigateUp: () -> Unit,
onRatingClick: (Int) -> Unit,
imageLoader: ImageLoader,
onScrollOffsetChanged: (Float) -> Unit,
) {
Surface(color = HedvigTheme.colorScheme.backgroundPrimary) {
Column(Modifier.fillMaxSize()) {
Expand All @@ -130,10 +138,15 @@ private fun PuppyArticleSuccessScreen(
val horizontalInsetsPadding = WindowInsets.safeDrawing
.only(WindowInsetsSides.Horizontal)
.asPaddingValues()
val scrollState = rememberScrollState()
val density = LocalDensity.current
LaunchedEffect(scrollState, density, onScrollOffsetChanged) {
snapshotFlow { with(density) { scrollState.value.toDp().value } }.collect(onScrollOffsetChanged)
}
Column(
modifier = Modifier
.fillMaxWidth()
.verticalScroll(rememberScrollState())
.verticalScroll(scrollState)
.padding(horizontalInsetsPadding)
.padding(horizontal = 16.dp),
) {
Expand Down Expand Up @@ -270,6 +283,7 @@ private fun PuppyArticleScreenPreview(
onReload = {},
onRatingClick = {},
imageLoader = rememberPreviewImageLoader(),
onScrollOffsetChanged = {},
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@ import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand All @@ -38,6 +40,7 @@ import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
Expand Down Expand Up @@ -78,6 +81,7 @@ internal fun PuppyGuideDestination(
onNavigateUp: () -> Unit,
imageLoader: ImageLoader,
onNavigateToArticle: (PuppyGuideStory) -> Unit,
onScrollOffsetChanged: (Float) -> Unit = {},
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

Expand All @@ -89,6 +93,7 @@ internal fun PuppyGuideDestination(
viewModel.emit(PuppyGuideEvent.Reload)
},
imageLoader = imageLoader,
onScrollOffsetChanged = onScrollOffsetChanged,
)
}

Expand All @@ -99,6 +104,7 @@ private fun PuppyGuideScreen(
onNavigateUp: () -> Unit,
reload: () -> Unit,
imageLoader: ImageLoader,
onScrollOffsetChanged: (Float) -> Unit,
) {
when (uiState) {
PuppyGuideUiState.Failure -> HedvigScaffold(
Expand All @@ -117,6 +123,7 @@ private fun PuppyGuideScreen(
onNavigateUp = onNavigateUp,
onNavigateToArticle = onNavigateToArticle,
imageLoader = imageLoader,
onScrollOffsetChanged = onScrollOffsetChanged,
)
}
}
Expand All @@ -128,10 +135,18 @@ private fun PuppyGuideSuccessScreen(
onNavigateToArticle: (PuppyGuideStory) -> Unit,
onNavigateUp: () -> Unit,
imageLoader: ImageLoader,
onScrollOffsetChanged: (Float) -> Unit,
) {
val categories = remember(uiState.stories) { uiState.stories.flatMap { it.categories }.toSet().toList() }
val listState = rememberLazyListState()
val scope = rememberCoroutineScope()
val density = LocalDensity.current
LaunchedEffect(listState, density, onScrollOffsetChanged) {
snapshotFlow {
if (listState.firstVisibleItemIndex > 0) 200f
else with(density) { listState.firstVisibleItemScrollOffset.toDp().value }
}.collect(onScrollOffsetChanged)
}

Surface(
color = HedvigTheme.colorScheme.backgroundPrimary,
Expand Down Expand Up @@ -379,6 +394,7 @@ private fun PuppyArticleScreenAnimations(
{},
reload = {},
imageLoader = rememberPreviewImageLoader(),
onScrollOffsetChanged = {},
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ fun PuppyGuideViewController(
onNavigateUp: () -> Unit,
onNavigateToArticle: (storyName: String) -> Unit,
swipeBackController: IosSwipeBackController,
onScrollOffsetChanged: (Float) -> Unit,
): UIViewController {
return HedvigComposeUIViewController(swipeBackController) {
val imageLoader = koinInject<ImageLoader>()
Expand All @@ -26,6 +27,7 @@ fun PuppyGuideViewController(
onNavigateUp = onNavigateUp,
imageLoader = imageLoader,
onNavigateToArticle = { story -> onNavigateToArticle(story.name) },
onScrollOffsetChanged = onScrollOffsetChanged,
)
}
}
Expand All @@ -35,6 +37,7 @@ fun PuppyArticleViewController(
storyName: String,
navigateUp: () -> Unit,
swipeBackController: IosSwipeBackController,
onScrollOffsetChanged: (Float) -> Unit,
): UIViewController {
return HedvigComposeUIViewController(swipeBackController) {
val imageLoader = koinInject<ImageLoader>()
Expand All @@ -43,6 +46,7 @@ fun PuppyArticleViewController(
viewModel = viewModel,
navigateUp = navigateUp,
imageLoader = imageLoader,
onScrollOffsetChanged = onScrollOffsetChanged,
)
}
}
Loading