NewUpdateScreen.kt 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package eu.kanade.presentation.more
  2. import androidx.compose.foundation.layout.Spacer
  3. import androidx.compose.foundation.layout.fillMaxWidth
  4. import androidx.compose.foundation.layout.padding
  5. import androidx.compose.foundation.layout.width
  6. import androidx.compose.material.icons.Icons
  7. import androidx.compose.material.icons.automirrored.outlined.OpenInNew
  8. import androidx.compose.material.icons.filled.OpenInNew
  9. import androidx.compose.material.icons.outlined.NewReleases
  10. import androidx.compose.material3.Icon
  11. import androidx.compose.material3.MaterialTheme
  12. import androidx.compose.material3.Text
  13. import androidx.compose.material3.TextButton
  14. import androidx.compose.runtime.Composable
  15. import androidx.compose.ui.Modifier
  16. import androidx.compose.ui.res.stringResource
  17. import androidx.compose.ui.text.SpanStyle
  18. import com.halilibo.richtext.markdown.Markdown
  19. import com.halilibo.richtext.ui.RichTextStyle
  20. import com.halilibo.richtext.ui.material3.Material3RichText
  21. import com.halilibo.richtext.ui.string.RichTextStringStyle
  22. import eu.kanade.presentation.theme.TachiyomiTheme
  23. import eu.kanade.tachiyomi.R
  24. import tachiyomi.presentation.core.components.material.padding
  25. import tachiyomi.presentation.core.screens.InfoScreen
  26. import tachiyomi.presentation.core.util.ThemePreviews
  27. @Composable
  28. fun NewUpdateScreen(
  29. versionName: String,
  30. changelogInfo: String,
  31. onOpenInBrowser: () -> Unit,
  32. onRejectUpdate: () -> Unit,
  33. onAcceptUpdate: () -> Unit,
  34. ) {
  35. InfoScreen(
  36. icon = Icons.Outlined.NewReleases,
  37. headingText = stringResource(R.string.update_check_notification_update_available),
  38. subtitleText = versionName,
  39. acceptText = stringResource(R.string.update_check_confirm),
  40. onAcceptClick = onAcceptUpdate,
  41. rejectText = stringResource(R.string.action_not_now),
  42. onRejectClick = onRejectUpdate,
  43. ) {
  44. Material3RichText(
  45. modifier = Modifier
  46. .fillMaxWidth()
  47. .padding(vertical = MaterialTheme.padding.large),
  48. style = RichTextStyle(
  49. stringStyle = RichTextStringStyle(
  50. linkStyle = SpanStyle(color = MaterialTheme.colorScheme.primary),
  51. ),
  52. ),
  53. ) {
  54. Markdown(content = changelogInfo)
  55. TextButton(
  56. onClick = onOpenInBrowser,
  57. modifier = Modifier.padding(top = MaterialTheme.padding.small),
  58. ) {
  59. Text(text = stringResource(R.string.update_check_open))
  60. Spacer(modifier = Modifier.width(MaterialTheme.padding.tiny))
  61. Icon(imageVector = Icons.AutoMirrored.Outlined.OpenInNew, contentDescription = null)
  62. }
  63. }
  64. }
  65. }
  66. @ThemePreviews
  67. @Composable
  68. private fun NewUpdateScreenPreview() {
  69. TachiyomiTheme {
  70. NewUpdateScreen(
  71. versionName = "v0.99.9",
  72. changelogInfo = """
  73. ## Yay
  74. Foobar
  75. ### More info
  76. - Hello
  77. - World
  78. """.trimIndent(),
  79. onOpenInBrowser = {},
  80. onRejectUpdate = {},
  81. onAcceptUpdate = {},
  82. )
  83. }
  84. }