OrientationSelectDialog.kt 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package eu.kanade.presentation.reader
  2. import androidx.compose.foundation.layout.Box
  3. import androidx.compose.foundation.layout.fillMaxWidth
  4. import androidx.compose.foundation.layout.padding
  5. import androidx.compose.foundation.lazy.grid.items
  6. import androidx.compose.material3.Surface
  7. import androidx.compose.runtime.Composable
  8. import androidx.compose.runtime.collectAsState
  9. import androidx.compose.runtime.getValue
  10. import androidx.compose.runtime.remember
  11. import androidx.compose.ui.Modifier
  12. import androidx.compose.ui.graphics.vector.ImageVector
  13. import androidx.compose.ui.res.stringResource
  14. import androidx.compose.ui.res.vectorResource
  15. import androidx.compose.ui.tooling.preview.PreviewLightDark
  16. import androidx.compose.ui.unit.dp
  17. import eu.kanade.domain.manga.model.readerOrientation
  18. import eu.kanade.presentation.components.AdaptiveSheet
  19. import eu.kanade.presentation.theme.TachiyomiTheme
  20. import eu.kanade.tachiyomi.R
  21. import eu.kanade.tachiyomi.ui.reader.setting.ReaderOrientation
  22. import eu.kanade.tachiyomi.ui.reader.setting.ReaderSettingsScreenModel
  23. import tachiyomi.presentation.core.components.SettingsIconGrid
  24. import tachiyomi.presentation.core.components.material.IconToggleButton
  25. @Composable
  26. fun OrientationSelectDialog(
  27. onDismissRequest: () -> Unit,
  28. screenModel: ReaderSettingsScreenModel,
  29. onChange: (Int) -> Unit,
  30. ) {
  31. val manga by screenModel.mangaFlow.collectAsState()
  32. val orientation = remember(manga) { ReaderOrientation.fromPreference(manga?.readerOrientation?.toInt()) }
  33. AdaptiveSheet(onDismissRequest = onDismissRequest) {
  34. DialogContent(
  35. orientation = orientation,
  36. onChangeOrientation = {
  37. screenModel.onChangeOrientation(it)
  38. onChange(it.stringRes)
  39. onDismissRequest()
  40. },
  41. )
  42. }
  43. }
  44. @Composable
  45. private fun DialogContent(
  46. orientation: ReaderOrientation,
  47. onChangeOrientation: (ReaderOrientation) -> Unit,
  48. ) {
  49. Box(modifier = Modifier.padding(vertical = 16.dp)) {
  50. SettingsIconGrid(R.string.rotation_type) {
  51. items(ReaderOrientation.entries) { mode ->
  52. IconToggleButton(
  53. checked = mode == orientation,
  54. onCheckedChange = {
  55. onChangeOrientation(mode)
  56. },
  57. modifier = Modifier.fillMaxWidth(),
  58. imageVector = ImageVector.vectorResource(mode.iconRes),
  59. title = stringResource(mode.stringRes),
  60. )
  61. }
  62. }
  63. }
  64. }
  65. @PreviewLightDark
  66. @Composable
  67. private fun DialogContentPreview() {
  68. TachiyomiTheme {
  69. Surface {
  70. DialogContent(
  71. orientation = ReaderOrientation.DEFAULT,
  72. onChangeOrientation = {},
  73. )
  74. }
  75. }
  76. }