11package org.nsh07.wikireader.ui
22
33import android.os.Build.VERSION.SDK_INT
4+ import androidx.compose.animation.AnimatedVisibility
45import androidx.compose.animation.core.tween
6+ import androidx.compose.animation.expandVertically
57import androidx.compose.animation.fadeIn
68import androidx.compose.animation.fadeOut
79import androidx.compose.animation.scaleIn
810import androidx.compose.animation.slideInHorizontally
11+ import androidx.compose.animation.slideInVertically
912import androidx.compose.animation.slideOutHorizontally
1013import androidx.compose.foundation.Canvas
1114import androidx.compose.foundation.background
@@ -60,7 +63,6 @@ import androidx.compose.ui.platform.LocalContext
6063import androidx.compose.ui.platform.LocalDensity
6164import androidx.compose.ui.res.stringResource
6265import androidx.compose.ui.unit.dp
63- import androidx.core.text.parseAsHtml
6466import androidx.lifecycle.compose.collectAsStateWithLifecycle
6567import androidx.navigation.NavDestination.Companion.hasRoute
6668import androidx.navigation.NavGraph.Companion.findStartDestination
@@ -69,7 +71,6 @@ import androidx.navigation.compose.composable
6971import androidx.navigation.compose.currentBackStackEntryAsState
7072import androidx.navigation.compose.rememberNavController
7173import androidx.navigation.navDeepLink
72- import androidx.navigation.toRoute
7374import androidx.window.core.layout.WindowSizeClass
7475import coil3.ImageLoader
7576import coil3.gif.AnimatedImageDecoder
@@ -81,15 +82,13 @@ import kotlinx.serialization.Serializable
8182import org.nsh07.wikireader.R.string
8283import org.nsh07.wikireader.data.SearchHistoryItem
8384import org.nsh07.wikireader.data.UserLanguage
84- import org.nsh07.wikireader.data.WikiPhoto
8585import org.nsh07.wikireader.ui.aboutScreen.AboutScreen
8686import org.nsh07.wikireader.ui.historyScreen.HistoryScreenRoot
8787import org.nsh07.wikireader.ui.homeScreen.AppHomeScreen
8888import org.nsh07.wikireader.ui.homeScreen.AppSearchBar
8989import org.nsh07.wikireader.ui.homeScreen.viewModel.HomeAction
9090import org.nsh07.wikireader.ui.homeScreen.viewModel.HomeScreenViewModel
9191import org.nsh07.wikireader.ui.homeScreen.viewModel.HomeSubscreen
92- import org.nsh07.wikireader.ui.image.FullScreenImage
9392import org.nsh07.wikireader.ui.savedArticlesScreen.SavedArticlesScreenRoot
9493import org.nsh07.wikireader.ui.settingsScreen.SettingsScreenRoot
9594import org.nsh07.wikireader.ui.settingsScreen.viewModel.SettingsViewModel
@@ -177,6 +176,7 @@ fun AppScreen(
177176 windowSizeClass = windowSizeClass,
178177 backStackEntry = navBackStackEntry,
179178 historyEnabled = preferencesState.browsingHistory,
179+ isImageView = backStack.last() is HomeSubscreen .Image ,
180180 onAboutClick = {
181181 navController.navigate(AboutScreen ) {
182182 popUpTo(navController.graph.findStartDestination().id) {
@@ -304,43 +304,52 @@ fun AppScreen(
304304
305305 Scaffold (
306306 topBar = {
307- AppSearchBar (
308- appSearchBarState = appSearchBarState,
309- searchBarState = searchBarState,
310- preferencesState = preferencesState,
311- textFieldState = textFieldState,
312- userLangs = userLangs,
313- recentLangs = recentLangs,
314- searchHistory = searchHistory,
315- scrollBehavior = searchBarScrollBehavior,
316- searchBarEnabled = ! showArticleLanguageSheet,
317- imageLoader = imageLoader,
318- searchListState = searchListState,
319- windowSizeClass = windowSizeClass,
320- languageSearchStr = languageSearchStr,
321- languageSearchQuery = languageSearchQuery,
322- onAction = viewModel::onAction,
323- onSettingsAction = settingsViewModel::onAction,
324- onSearchBarExpandedChange = {
325- scope.launch {
326- if (it) searchBarState.animateToExpanded()
327- else searchBarState.animateToCollapsed()
307+ AnimatedVisibility (
308+ backStack.last() !is HomeSubscreen .Image ,
309+ enter = slideInVertically(
310+ motionScheme.defaultSpatialSpec(),
311+ initialOffsetY = { - it }
312+ ) + expandVertically(motionScheme.defaultSpatialSpec()),
313+ exit = fadeOut(motionScheme.fastEffectsSpec())
314+ ) {
315+ AppSearchBar (
316+ appSearchBarState = appSearchBarState,
317+ searchBarState = searchBarState,
318+ preferencesState = preferencesState,
319+ textFieldState = textFieldState,
320+ userLangs = userLangs,
321+ recentLangs = recentLangs,
322+ searchHistory = searchHistory,
323+ scrollBehavior = searchBarScrollBehavior,
324+ searchBarEnabled = ! showArticleLanguageSheet,
325+ imageLoader = imageLoader,
326+ searchListState = searchListState,
327+ windowSizeClass = windowSizeClass,
328+ languageSearchStr = languageSearchStr,
329+ languageSearchQuery = languageSearchQuery,
330+ onAction = viewModel::onAction,
331+ onSettingsAction = settingsViewModel::onAction,
332+ onSearchBarExpandedChange = {
333+ scope.launch {
334+ if (it) searchBarState.animateToExpanded()
335+ else searchBarState.animateToCollapsed()
336+ }
337+ },
338+ clearHistory = {
339+ historyItem = null
340+ setShowDeleteDialog(true )
341+ },
342+ removeHistoryItem = {
343+ historyItem = it
344+ setShowDeleteDialog(true )
345+ },
346+ onMenuIconClicked = {
347+ scope.launch {
348+ railState.expand()
349+ }
328350 }
329- },
330- clearHistory = {
331- historyItem = null
332- setShowDeleteDialog(true )
333- },
334- removeHistoryItem = {
335- historyItem = it
336- setShowDeleteDialog(true )
337- },
338- onMenuIconClicked = {
339- scope.launch {
340- railState.expand()
341- }
342- }
343- )
351+ )
352+ }
344353 },
345354 snackbarHost = { SnackbarHost (snackBarHostState) },
346355 contentWindowInsets =
@@ -369,10 +378,6 @@ fun AppScreen(
369378 languageSearchQuery = languageSearchQuery,
370379 showLanguageSheet = showArticleLanguageSheet,
371380 deepLinkHandled = deepLinkHandled,
372- onImageClick = { navController.navigate(FullScreenImage ()) },
373- onGalleryImageClick = { uri, desc ->
374- navController.navigate(FullScreenImage (uri, desc))
375- },
376381 onAction = viewModel::onAction,
377382 onSettingsAction = settingsViewModel::onAction,
378383 setShowArticleLanguageSheet = { showArticleLanguageSheet = it },
@@ -381,53 +386,13 @@ fun AppScreen(
381386 modifier = Modifier .fillMaxSize()
382387 )
383388
384- StatusBarProtection ()
385- }
386- }
387-
388- composable<FullScreenImage > {
389- val uri = it.toRoute<FullScreenImage >().uri
390- val description = it.toRoute<FullScreenImage >().description
391-
392- if (uri == null ) {
393- if (backStack.last() is HomeSubscreen .Article ) {
394- val content = backStack.last() as HomeSubscreen .Article
395- if (content.photo == null ) navController.navigateUp()
396- FullScreenImage (
397- photo = content.photo,
398- photoDesc = content.photoDesc,
399- title = content.title,
400- imageLoader = imageLoader,
401- background = preferencesState.imageBackground,
402- link = content.photo?.source,
403- onBack = navController::navigateUp
404- )
405- } else if (backStack.last() is HomeSubscreen .Feed ) {
406- val content = backStack.last() as HomeSubscreen .Feed
407- FullScreenImage (
408- photo = WikiPhoto (
409- source = content.image?.thumbnail?.source ? : " " ,
410- width = content.image?.thumbnail?.width ? : 1 ,
411- height = content.image?.thumbnail?.height ? : 1
412- ),
413- photoDesc = content.image?.description?.text?.parseAsHtml()
414- .toString(),
415- title = content.image?.title ? : " " ,
416- imageLoader = imageLoader,
417- link = content.image?.filePage,
418- background = preferencesState.imageBackground,
419- onBack = navController::navigateUp
420- )
389+ AnimatedVisibility (
390+ backStack.last() !is HomeSubscreen .Image ,
391+ enter = fadeIn(motionScheme.slowEffectsSpec()),
392+ exit = fadeOut(motionScheme.fastEffectsSpec())
393+ ) {
394+ StatusBarProtection ()
421395 }
422- } else {
423- FullScreenImage (
424- uri = uri,
425- description = description ? : " " ,
426- imageLoader = imageLoader,
427- link = uri,
428- background = preferencesState.imageBackground,
429- onBack = navController::navigateUp
430- )
431396 }
432397 }
433398
@@ -436,7 +401,7 @@ fun AppScreen(
436401 imageLoader = imageLoader,
437402 imageBackground = preferencesState.imageBackground,
438403 openSavedArticle = { pageId: Int , lang: String ->
439- navController.navigateUp()
404+ navController.navigateUp()
440405 viewModel.onAction(HomeAction .LoadSavedArticle (pageId, lang))
441406 },
442407 onBack = navController::navigateUp
@@ -564,12 +529,6 @@ data class HomeScreen(
564529 val query : String? = null
565530)
566531
567- @Serializable
568- data class FullScreenImage (
569- val uri : String? = null ,
570- val description : String? = null
571- )
572-
573532@Serializable
574533object SavedArticlesScreen
575534
0 commit comments