From c036d26a3fb7c5bd7c74cb2cc4854e5bfce37fc1 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 22 Feb 2023 13:04:25 -0800 Subject: [PATCH] display labels on saved item card cells --- .../omnivore/ui/components/LabelChipColors.kt | 20 ++++++++++ .../omnivore/ui/library/LibraryView.kt | 2 +- .../ui/savedItemViews/SavedItemCard.kt | 39 +++++++++++++++++-- 3 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelChipColors.kt diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelChipColors.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelChipColors.kt new file mode 100644 index 000000000..2ee6b8434 --- /dev/null +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/components/LabelChipColors.kt @@ -0,0 +1,20 @@ +package app.omnivore.omnivore.ui.components + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance + +data class LabelChipColors( + val textColor: Color, + val containerColor: Color +) { + companion object { + fun fromHex(hex: String): LabelChipColors { + val labelColor = Color(android.graphics.Color.parseColor(hex)) + + return LabelChipColors( + textColor = if (labelColor.luminance() > 0.5) Color.Black else Color.White, + containerColor = labelColor + ) + } + } +} diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt index 05d02e9fa..00b8a6315 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/library/LibraryView.kt @@ -65,7 +65,6 @@ fun LibraryViewContent(libraryViewModel: LibraryViewModel, modifier: Modifier) { val cardsData: List by libraryViewModel.itemsLiveData.observeAsState(listOf()) val searchedCardsData: List by libraryViewModel.searchItemsLiveData.observeAsState(listOf()) - val searchText: String by libraryViewModel.searchTextLiveData.observeAsState("") Box( modifier = Modifier @@ -89,6 +88,7 @@ fun LibraryViewContent(libraryViewModel: LibraryViewModel, modifier: Modifier) { items(if (libraryViewModel.showSearchField) searchedCardsData else cardsData) { cardDataWithLabels -> SavedItemCard( cardData = cardDataWithLabels.cardData, + labels = cardDataWithLabels.labels, onClickHandler = { val activityClass = if (cardDataWithLabels.cardData.isPDF()) PDFReaderActivity::class.java else WebReaderLoadingContainerActivity::class.java val intent = Intent(context, activityClass) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemCard.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemCard.kt index d179667e6..c97ba8609 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemCard.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/savedItemViews/SavedItemCard.kt @@ -1,27 +1,35 @@ package app.omnivore.omnivore.ui.savedItemViews +import android.content.res.Resources.Theme import androidx.compose.foundation.* import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.* +import androidx.compose.material3.SuggestionChipDefaults.elevatedSuggestionChipColors import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import app.omnivore.omnivore.persistence.entities.SavedItem import app.omnivore.omnivore.persistence.entities.SavedItemCardData +import app.omnivore.omnivore.persistence.entities.SavedItemLabel +import app.omnivore.omnivore.ui.components.LabelChipColors import app.omnivore.omnivore.ui.library.SavedItemAction import coil.compose.rememberAsyncImagePainter -@OptIn(ExperimentalFoundationApi::class) +@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) @Composable -fun SavedItemCard(cardData: SavedItemCardData, onClickHandler: () -> Unit, actionHandler: (SavedItemAction) -> Unit) { +fun SavedItemCard(cardData: SavedItemCardData, labels: List, onClickHandler: () -> Unit, actionHandler: (SavedItemAction) -> Unit) { var isMenuExpanded by remember { mutableStateOf(false) } val publisherDisplayName = cardData.publisherDisplayName() + val listState = rememberLazyListState() Column { Row( @@ -79,6 +87,31 @@ fun SavedItemCard(cardData: SavedItemCardData, onClickHandler: () -> Unit, actio } } + LazyRow( + state = listState, + horizontalArrangement = Arrangement.Start, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .padding(start = 6.dp) + ) { + items(labels.sortedBy { it.name }) { label -> + val chipColors = LabelChipColors.fromHex(label.color) + + SuggestionChip( + onClick = {}, + label = { Text(label.name) }, + border = null, + colors = elevatedSuggestionChipColors( + containerColor = chipColors.containerColor, + labelColor = chipColors.textColor, + iconContentColor = chipColors.textColor + ), + modifier = Modifier + .padding(horizontal = 4.dp) + ) + } + } + Divider(color = MaterialTheme.colorScheme.outlineVariant, thickness = 1.dp) SavedItemContextMenu(