Banners.kt 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package eu.kanade.presentation.components
  2. import androidx.annotation.StringRes
  3. import androidx.compose.foundation.background
  4. import androidx.compose.foundation.layout.Column
  5. import androidx.compose.foundation.layout.WindowInsets
  6. import androidx.compose.foundation.layout.WindowInsetsSides
  7. import androidx.compose.foundation.layout.fillMaxWidth
  8. import androidx.compose.foundation.layout.only
  9. import androidx.compose.foundation.layout.padding
  10. import androidx.compose.foundation.layout.systemBars
  11. import androidx.compose.foundation.layout.windowInsetsPadding
  12. import androidx.compose.material3.MaterialTheme
  13. import androidx.compose.material3.Text
  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.style.TextAlign
  18. import androidx.compose.ui.unit.dp
  19. import eu.kanade.tachiyomi.R
  20. val DownloadedOnlyBannerBackgroundColor
  21. @Composable get() = MaterialTheme.colorScheme.tertiary
  22. val IncognitoModeBannerBackgroundColor
  23. @Composable get() = MaterialTheme.colorScheme.primary
  24. @Composable
  25. fun WarningBanner(
  26. @StringRes textRes: Int,
  27. modifier: Modifier = Modifier,
  28. ) {
  29. Text(
  30. text = stringResource(textRes),
  31. modifier = modifier
  32. .fillMaxWidth()
  33. .background(MaterialTheme.colorScheme.error)
  34. .padding(16.dp),
  35. color = MaterialTheme.colorScheme.onError,
  36. style = MaterialTheme.typography.bodyMedium,
  37. textAlign = TextAlign.Center,
  38. )
  39. }
  40. @Composable
  41. fun AppStateBanners(
  42. downloadedOnlyMode: Boolean,
  43. incognitoMode: Boolean,
  44. modifier: Modifier = Modifier,
  45. ) {
  46. val insets = WindowInsets.systemBars.only(WindowInsetsSides.Top + WindowInsetsSides.Horizontal)
  47. Column(modifier = modifier) {
  48. if (downloadedOnlyMode) {
  49. DownloadedOnlyModeBanner(
  50. modifier = Modifier.windowInsetsPadding(insets),
  51. )
  52. }
  53. if (incognitoMode) {
  54. IncognitoModeBanner(
  55. modifier = if (!downloadedOnlyMode) {
  56. Modifier.windowInsetsPadding(insets)
  57. } else {
  58. Modifier
  59. },
  60. )
  61. }
  62. }
  63. }
  64. @Composable
  65. private fun DownloadedOnlyModeBanner(modifier: Modifier = Modifier) {
  66. Text(
  67. text = stringResource(R.string.label_downloaded_only),
  68. modifier = Modifier
  69. .background(DownloadedOnlyBannerBackgroundColor)
  70. .fillMaxWidth()
  71. .padding(4.dp)
  72. .then(modifier),
  73. color = MaterialTheme.colorScheme.onTertiary,
  74. textAlign = TextAlign.Center,
  75. style = MaterialTheme.typography.labelMedium,
  76. )
  77. }
  78. @Composable
  79. private fun IncognitoModeBanner(modifier: Modifier = Modifier) {
  80. Text(
  81. text = stringResource(R.string.pref_incognito_mode),
  82. modifier = Modifier
  83. .background(IncognitoModeBannerBackgroundColor)
  84. .fillMaxWidth()
  85. .padding(4.dp)
  86. .then(modifier),
  87. color = MaterialTheme.colorScheme.onPrimary,
  88. textAlign = TextAlign.Center,
  89. style = MaterialTheme.typography.labelMedium,
  90. )
  91. }