OrientationSelectDialog.kt 2.7 KB

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