mirror of
https://github.com/mihonapp/mihon.git
synced 2025-11-17 14:37:29 +01:00
Track sheet fixes (#8673)
* Fix Track sheet not being disposed properly * Change insets handling
This commit is contained in:
@@ -5,19 +5,12 @@ import android.content.Intent
|
||||
import android.net.Uri
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.with
|
||||
import androidx.compose.foundation.layout.systemBarsPadding
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
@@ -28,21 +21,19 @@ import cafe.adriel.voyager.core.screen.uniqueScreenKey
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import cafe.adriel.voyager.navigator.Navigator
|
||||
import cafe.adriel.voyager.navigator.currentOrThrow
|
||||
import cafe.adriel.voyager.transitions.ScreenTransition
|
||||
import eu.kanade.domain.chapter.model.Chapter
|
||||
import eu.kanade.domain.manga.model.Manga
|
||||
import eu.kanade.domain.manga.model.hasCustomCover
|
||||
import eu.kanade.presentation.components.AdaptiveSheet
|
||||
import eu.kanade.presentation.components.ChangeCategoryDialog
|
||||
import eu.kanade.presentation.components.DuplicateMangaDialog
|
||||
import eu.kanade.presentation.components.LoadingScreen
|
||||
import eu.kanade.presentation.components.NavigatorAdaptiveSheet
|
||||
import eu.kanade.presentation.manga.ChapterSettingsDialog
|
||||
import eu.kanade.presentation.manga.EditCoverAction
|
||||
import eu.kanade.presentation.manga.MangaScreen
|
||||
import eu.kanade.presentation.manga.components.DeleteChaptersDialog
|
||||
import eu.kanade.presentation.manga.components.DownloadCustomAmountDialog
|
||||
import eu.kanade.presentation.manga.components.MangaCoverDialog
|
||||
import eu.kanade.presentation.util.LocalNavigatorContentPadding
|
||||
import eu.kanade.presentation.util.isTabletUi
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.source.Source
|
||||
@@ -170,31 +161,15 @@ class MangaScreen(
|
||||
onSetAsDefault = screenModel::setCurrentSettingsAsDefault,
|
||||
)
|
||||
MangaInfoScreenModel.Dialog.TrackSheet -> {
|
||||
var enableSwipeDismiss by remember { mutableStateOf(true) }
|
||||
AdaptiveSheet(
|
||||
enableSwipeDismiss = enableSwipeDismiss,
|
||||
NavigatorAdaptiveSheet(
|
||||
screen = TrackInfoDialogHomeScreen(
|
||||
mangaId = successState.manga.id,
|
||||
mangaTitle = successState.manga.title,
|
||||
sourceId = successState.source.id,
|
||||
),
|
||||
enableSwipeDismiss = { it.lastItem is TrackInfoDialogHomeScreen },
|
||||
onDismissRequest = onDismissRequest,
|
||||
) { contentPadding ->
|
||||
Navigator(
|
||||
screen = TrackInfoDialogHomeScreen(
|
||||
mangaId = successState.manga.id,
|
||||
mangaTitle = successState.manga.title,
|
||||
sourceId = successState.source.id,
|
||||
),
|
||||
content = {
|
||||
enableSwipeDismiss = it.lastItem is TrackInfoDialogHomeScreen
|
||||
CompositionLocalProvider(LocalNavigatorContentPadding provides contentPadding) {
|
||||
ScreenTransition(
|
||||
navigator = it,
|
||||
transition = {
|
||||
fadeIn(animationSpec = tween(220, delayMillis = 90)) with
|
||||
fadeOut(animationSpec = tween(90))
|
||||
},
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
MangaInfoScreenModel.Dialog.FullCover -> {
|
||||
val sm = rememberScreenModel { MangaCoverScreenModel(successState.manga.id) }
|
||||
|
||||
@@ -4,8 +4,10 @@ import android.app.Application
|
||||
import android.content.Context
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.systemBars
|
||||
import androidx.compose.foundation.layout.windowInsetsPadding
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
@@ -51,7 +53,6 @@ import eu.kanade.presentation.manga.TrackInfoDialogHome
|
||||
import eu.kanade.presentation.manga.TrackScoreSelector
|
||||
import eu.kanade.presentation.manga.TrackServiceSearch
|
||||
import eu.kanade.presentation.manga.TrackStatusSelector
|
||||
import eu.kanade.presentation.util.LocalNavigatorContentPadding
|
||||
import eu.kanade.tachiyomi.R
|
||||
import eu.kanade.tachiyomi.data.database.models.Track
|
||||
import eu.kanade.tachiyomi.data.track.EnhancedTrackService
|
||||
@@ -95,7 +96,6 @@ data class TrackInfoDialogHomeScreen(
|
||||
TrackInfoDialogHome(
|
||||
trackItems = state.trackItems,
|
||||
dateFormat = dateFormat,
|
||||
contentPadding = LocalNavigatorContentPadding.current,
|
||||
onStatusClick = {
|
||||
navigator.push(
|
||||
TrackStatusSelectorScreen(
|
||||
@@ -153,8 +153,7 @@ data class TrackInfoDialogHomeScreen(
|
||||
}
|
||||
},
|
||||
onOpenInBrowser = { openTrackerInBrowser(context, it) },
|
||||
onRemoved = { sm.unregisterTracking(it.service.id) },
|
||||
)
|
||||
) { sm.unregisterTracking(it.service.id) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -257,7 +256,6 @@ private data class TrackStatusSelectorScreen(
|
||||
}
|
||||
val state by sm.state.collectAsState()
|
||||
TrackStatusSelector(
|
||||
contentPadding = LocalNavigatorContentPadding.current,
|
||||
selection = state.selection,
|
||||
onSelectionChange = sm::setSelection,
|
||||
selections = remember { sm.getSelections() },
|
||||
@@ -308,7 +306,6 @@ private data class TrackChapterSelectorScreen(
|
||||
val state by sm.state.collectAsState()
|
||||
|
||||
TrackChapterSelector(
|
||||
contentPadding = LocalNavigatorContentPadding.current,
|
||||
selection = state.selection,
|
||||
onSelectionChange = sm::setSelection,
|
||||
range = remember { sm.getRange() },
|
||||
@@ -364,7 +361,6 @@ private data class TrackScoreSelectorScreen(
|
||||
val state by sm.state.collectAsState()
|
||||
|
||||
TrackScoreSelector(
|
||||
contentPadding = LocalNavigatorContentPadding.current,
|
||||
selection = state.selection,
|
||||
onSelectionChange = sm::setSelection,
|
||||
selections = remember { sm.getSelections() },
|
||||
@@ -422,7 +418,6 @@ private data class TrackDateSelectorScreen(
|
||||
track.finished_reading_date > 0
|
||||
}
|
||||
TrackDateSelector(
|
||||
contentPadding = LocalNavigatorContentPadding.current,
|
||||
title = if (start) {
|
||||
stringResource(R.string.track_started_reading_date)
|
||||
} else {
|
||||
@@ -497,7 +492,7 @@ private data class TrackDateRemoverScreen(
|
||||
)
|
||||
}
|
||||
AlertDialogContent(
|
||||
modifier = Modifier.padding(LocalNavigatorContentPadding.current),
|
||||
modifier = Modifier.windowInsetsPadding(WindowInsets.systemBars),
|
||||
icon = {
|
||||
Icon(
|
||||
imageVector = Icons.Default.Delete,
|
||||
@@ -585,7 +580,6 @@ data class TrackServiceSearchScreen(
|
||||
|
||||
var textFieldValue by remember { mutableStateOf(TextFieldValue(initialQuery)) }
|
||||
TrackServiceSearch(
|
||||
contentPadding = LocalNavigatorContentPadding.current,
|
||||
query = textFieldValue,
|
||||
onQueryChange = { textFieldValue = it },
|
||||
onDispatchQuery = { sm.trackingSearch(textFieldValue.text) },
|
||||
|
||||
Reference in New Issue
Block a user