update android feed card layout

This commit is contained in:
Satindar Dhillon 2022-09-02 10:26:12 -07:00
parent 687352920c
commit a0b56f43a1
3 changed files with 63 additions and 38 deletions

View file

@ -13,6 +13,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.compose.ui.window.Dialog
import androidx.core.net.toUri
import androidx.lifecycle.*
import app.omnivore.omnivore.AppleConstants
import app.omnivore.omnivore.Constants
@ -67,6 +68,8 @@ class HomeViewModel @Inject constructor(
readingProgressAnchor = it.node.readingProgressAnchorIndex,
imageURLString = it.node.image,
descriptionText = it.node.description,
publisherURLString = it.node.originalArticleUrl,
author = it.node.author,
slug = it.node.slug
)
}
@ -90,12 +93,16 @@ public data class LinkedItem(
// public val documentDirectoryPath: String?,
// public val pageURLString: String,
public val descriptionText: String?,
// public val publisherURLString: String?,
public val publisherURLString: String?,
// public val siteName: String?,
// public val author: String?,
public val author: String?,
// public val publishDate: Any?,
public val slug: String,
// public val isArchived: Boolean,
// public val contentReader: String?,
// public val originalHtml: String?,
)
) {
fun publisherDisplayName(): String? {
return publisherURLString?.toUri()?.host
}
}

View file

@ -2,52 +2,75 @@ package app.omnivore.omnivore.ui.home
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.Image
import androidx.compose.material3.Card
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.foundation.clickable
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Divider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
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.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.compose.rememberAsyncImagePainter
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun LinkedItemCard(
item: LinkedItem,
onClickHandler: () -> Unit,
modifier: Modifier = Modifier
) {
Card(
onClick = { onClickHandler() },
shape = MaterialTheme.shapes.medium,
modifier = modifier
.fillMaxWidth()
.padding(15.dp)
) {
Row {
Image(
painter = rememberAsyncImagePainter(item.imageURLString),
contentDescription = "Image associated with linked item",
modifier = Modifier.size(100.dp)
)
fun LinkedItemCard(item: LinkedItem, onClickHandler: () -> Unit) {
val publisherDisplayName = item.publisherDisplayName()
Column(modifier = Modifier.padding(8.dp)) {
Column {
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.Top,
modifier = Modifier
.fillMaxWidth()
.padding(12.dp)
.clickable(onClick = onClickHandler)
) {
Column(
verticalArrangement = Arrangement.spacedBy(4.dp),
modifier = Modifier
.weight(1f, fill = false)
.padding(end = 8.dp)
) {
Text(
text = item.title,
style = MaterialTheme.typography.titleMedium,
maxLines = 2,
overflow = TextOverflow.Ellipsis
lineHeight = 20.sp
)
Text(
text = item.descriptionText ?: "",
maxLines = 1,
overflow = TextOverflow.Ellipsis,
style = MaterialTheme.typography.bodyMedium
)
if (item.author != null) {
Text(
text = "By ${item.author}",
style = MaterialTheme.typography.bodyMedium,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
if (publisherDisplayName != null) {
Text(
text = publisherDisplayName,
style = MaterialTheme.typography.bodyMedium,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
Image(
painter = rememberAsyncImagePainter(item.imageURLString),
contentDescription = "Image associated with linked item",
modifier = Modifier
.padding(top = 6.dp)
.clip(RoundedCornerShape(6.dp))
.size(80.dp)
)
}
Divider(color = MaterialTheme.colorScheme.outlineVariant, thickness = 1.dp)
}
}

View file

@ -27,20 +27,15 @@ fun RootView(
homeViewModel: HomeViewModel
) {
val hasAuthToken: Boolean by loginViewModel.hasAuthTokenLiveData.observeAsState(false)
// Remember a SystemUiController
val systemUiController = rememberSystemUiController()
val useDarkIcons = !isSystemInDarkTheme()
DisposableEffect(systemUiController, useDarkIcons) {
// Update all of the system bar colors to be transparent, and use
// dark icons if we're in light theme
systemUiController.setSystemBarsColor(
color = Color.Black,
darkIcons = false
)
// setStatusBarColor() and setNavigationBarColor() also exist
onDispose {}
}