ReaderPageActionsDialog.kt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package eu.kanade.presentation.reader
  2. import androidx.compose.foundation.layout.Arrangement
  3. import androidx.compose.foundation.layout.Row
  4. import androidx.compose.foundation.layout.padding
  5. import androidx.compose.material.icons.Icons
  6. import androidx.compose.material.icons.outlined.Photo
  7. import androidx.compose.material.icons.outlined.Save
  8. import androidx.compose.material.icons.outlined.Share
  9. import androidx.compose.material3.AlertDialog
  10. import androidx.compose.material3.MaterialTheme
  11. import androidx.compose.material3.Text
  12. import androidx.compose.material3.TextButton
  13. import androidx.compose.runtime.Composable
  14. import androidx.compose.runtime.getValue
  15. import androidx.compose.runtime.mutableStateOf
  16. import androidx.compose.runtime.remember
  17. import androidx.compose.runtime.setValue
  18. import androidx.compose.ui.Modifier
  19. import androidx.compose.ui.unit.dp
  20. import eu.kanade.presentation.components.AdaptiveSheet
  21. import tachiyomi.i18n.MR
  22. import tachiyomi.presentation.core.components.ActionButton
  23. import tachiyomi.presentation.core.components.material.padding
  24. import tachiyomi.presentation.core.i18n.localize
  25. @Composable
  26. fun ReaderPageActionsDialog(
  27. onDismissRequest: () -> Unit,
  28. onSetAsCover: () -> Unit,
  29. onShare: () -> Unit,
  30. onSave: () -> Unit,
  31. ) {
  32. var showSetCoverDialog by remember { mutableStateOf(false) }
  33. AdaptiveSheet(
  34. onDismissRequest = onDismissRequest,
  35. ) {
  36. Row(
  37. modifier = Modifier.padding(vertical = 16.dp),
  38. horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),
  39. ) {
  40. ActionButton(
  41. modifier = Modifier.weight(1f),
  42. title = localize(MR.strings.set_as_cover),
  43. icon = Icons.Outlined.Photo,
  44. onClick = { showSetCoverDialog = true },
  45. )
  46. ActionButton(
  47. modifier = Modifier.weight(1f),
  48. title = localize(MR.strings.action_share),
  49. icon = Icons.Outlined.Share,
  50. onClick = {
  51. onShare()
  52. onDismissRequest()
  53. },
  54. )
  55. ActionButton(
  56. modifier = Modifier.weight(1f),
  57. title = localize(MR.strings.action_save),
  58. icon = Icons.Outlined.Save,
  59. onClick = {
  60. onSave()
  61. onDismissRequest()
  62. },
  63. )
  64. }
  65. }
  66. if (showSetCoverDialog) {
  67. SetCoverDialog(
  68. onConfirm = {
  69. onSetAsCover()
  70. showSetCoverDialog = false
  71. },
  72. onDismiss = { showSetCoverDialog = false },
  73. )
  74. }
  75. }
  76. @Composable
  77. private fun SetCoverDialog(
  78. onConfirm: () -> Unit,
  79. onDismiss: () -> Unit,
  80. ) {
  81. AlertDialog(
  82. text = {
  83. Text(localize(MR.strings.confirm_set_image_as_cover))
  84. },
  85. confirmButton = {
  86. TextButton(onClick = onConfirm) {
  87. Text(localize(MR.strings.action_ok))
  88. }
  89. },
  90. dismissButton = {
  91. TextButton(onClick = onDismiss) {
  92. Text(localize(MR.strings.action_cancel))
  93. }
  94. },
  95. onDismissRequest = onDismiss,
  96. )
  97. }