Skip to content

Commit 1d9ed72

Browse files
committed
feat: update E-Hentai to support libraryColored, bulk-selection overlay & hide-cover
also update in-library badge
1 parent afbb4b7 commit 1d9ed72

File tree

3 files changed

+52
-17
lines changed

3 files changed

+52
-17
lines changed

app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ fun BrowseSourceContent(
161161
contentPadding = contentPadding,
162162
onMangaClick = onMangaClick,
163163
onMangaLongClick = onMangaLongClick,
164+
// KMK -->
165+
selection = selection,
166+
// KMK <--
164167
)
165168
return
166169
}

app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceEHentaiList.kt

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,22 @@ import androidx.compose.runtime.getValue
2222
import androidx.compose.runtime.produceState
2323
import androidx.compose.ui.Alignment
2424
import androidx.compose.ui.Modifier
25-
import androidx.compose.ui.draw.drawWithContent
2625
import androidx.compose.ui.graphics.Color
2726
import androidx.compose.ui.platform.LocalContext
2827
import androidx.compose.ui.text.style.TextOverflow
2928
import androidx.compose.ui.unit.dp
3029
import androidx.compose.ui.unit.sp
30+
import androidx.compose.ui.util.fastAny
3131
import androidx.paging.LoadState
3232
import androidx.paging.compose.LazyPagingItems
3333
import com.gowtham.ratingbar.RatingBar
3434
import com.gowtham.ratingbar.RatingBarStyle
3535
import dev.icerock.moko.resources.StringResource
36+
import eu.kanade.presentation.library.components.CommonMangaItemDefaults
37+
import eu.kanade.presentation.library.components.GridSelectedCoverAlpha
3638
import eu.kanade.presentation.manga.components.MangaCover
39+
import eu.kanade.presentation.manga.components.MangaCoverHide
40+
import exh.debug.DebugToggles
3741
import exh.metadata.MetadataUtil
3842
import exh.metadata.metadata.EHentaiSearchMetadata
3943
import exh.metadata.metadata.RaisedSearchMetadata
@@ -44,12 +48,12 @@ import kotlinx.coroutines.flow.StateFlow
4448
import tachiyomi.core.common.i18n.pluralStringResource
4549
import tachiyomi.core.common.util.lang.withIOContext
4650
import tachiyomi.domain.manga.model.Manga
47-
import tachiyomi.i18n.MR
51+
import tachiyomi.domain.manga.model.asMangaCover
4852
import tachiyomi.i18n.sy.SYMR
49-
import tachiyomi.presentation.core.components.Badge
5053
import tachiyomi.presentation.core.components.BadgeGroup
5154
import tachiyomi.presentation.core.components.material.padding
5255
import tachiyomi.presentation.core.i18n.stringResource
56+
import tachiyomi.presentation.core.util.selectedBackground
5357
import java.time.Instant
5458
import java.time.ZoneId
5559

@@ -59,6 +63,9 @@ fun BrowseSourceEHentaiList(
5963
contentPadding: PaddingValues,
6064
onMangaClick: (Manga) -> Unit,
6165
onMangaLongClick: (Manga) -> Unit,
66+
// KMK -->
67+
selection: List<Manga>,
68+
// KMK <--
6269
) {
6370
LazyColumn(
6471
contentPadding = contentPadding,
@@ -81,6 +88,9 @@ fun BrowseSourceEHentaiList(
8188
// SY <--
8289
onClick = { onMangaClick(manga) },
8390
onLongClick = { onMangaLongClick(manga) },
91+
// KMK -->
92+
isSelected = selection.fastAny { selected -> selected.id == manga.id },
93+
// KMK <--
8494
)
8595
}
8696

@@ -100,9 +110,18 @@ fun BrowseSourceEHentaiListItem(
100110
// SY <--
101111
onClick: () -> Unit = {},
102112
onLongClick: () -> Unit = onClick,
113+
// KMK -->
114+
isSelected: Boolean = false,
115+
libraryColored: Boolean = true,
116+
// KMK <--
103117
) {
104118
if (metadata !is EHentaiSearchMetadata) return
105-
val overlayColor = MaterialTheme.colorScheme.background.copy(alpha = 0.66f)
119+
// KMK -->
120+
val coverData = manga.asMangaCover()
121+
val bgColor = coverData.dominantCoverColors?.first?.let { Color(it) }.takeIf { libraryColored }
122+
val onBgColor = coverData.dominantCoverColors?.second.takeIf { libraryColored }
123+
val coverAlpha = if (manga.favorite) CommonMangaItemDefaults.BrowseFavoriteCoverAlpha else 1f
124+
// KMK <--
106125

107126
val context = LocalContext.current
108127
val languageText by produceState("", metadata) {
@@ -162,6 +181,7 @@ fun BrowseSourceEHentaiListItem(
162181

163182
Row(
164183
modifier = Modifier
184+
.selectedBackground(isSelected)
165185
.height(148.dp)
166186
.combinedClickable(
167187
onClick = onClick,
@@ -171,24 +191,36 @@ fun BrowseSourceEHentaiListItem(
171191
verticalAlignment = Alignment.CenterVertically,
172192
) {
173193
Box {
174-
MangaCover.Book(
175-
modifier = Modifier
176-
.fillMaxHeight()
177-
.drawWithContent {
178-
drawContent()
179-
if (manga.favorite) {
180-
drawRect(overlayColor)
181-
}
182-
},
183-
data = manga,
184-
)
194+
// KMK -->
195+
if (DebugToggles.HIDE_COVER_IMAGE_ONLY_SHOW_COLOR.enabled) {
196+
MangaCoverHide.Book(
197+
modifier = Modifier
198+
.fillMaxHeight(),
199+
bgColor = bgColor ?: (MaterialTheme.colorScheme.surface.takeIf { isSelected }),
200+
tint = onBgColor,
201+
)
202+
} else {
203+
// KMK <--
204+
MangaCover.Book(
205+
modifier = Modifier
206+
.fillMaxHeight(),
207+
// KMK -->
208+
alpha = if (isSelected) GridSelectedCoverAlpha else coverAlpha,
209+
bgColor = bgColor ?: (MaterialTheme.colorScheme.surface.takeIf { isSelected }),
210+
tint = onBgColor,
211+
// KMK <--
212+
data = coverData,
213+
)
214+
}
185215
if (manga.favorite) {
186216
BadgeGroup(
187217
modifier = Modifier
188218
.padding(4.dp)
189219
.align(Alignment.TopStart),
190220
) {
191-
Badge(stringResource(MR.strings.in_library))
221+
// KMK -->
222+
InLibraryBadge(enabled = true)
223+
// KMK <--
192224
}
193225
}
194226
}

app/src/main/java/eu/kanade/presentation/library/components/CommonMangaItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private val ContinueReadingButtonIconSizeLarge = 20.dp
6363
private val ContinueReadingButtonGridPadding = 6.dp
6464
private val ContinueReadingButtonListSpacing = 8.dp
6565

66-
private const val GridSelectedCoverAlpha = 0.76f
66+
internal const val GridSelectedCoverAlpha = 0.76f
6767

6868
/**
6969
* Layout of grid list item with title overlaying the cover.

0 commit comments

Comments
 (0)