Merge "NewsResourceCard: Display Title, Bookmark Icon and Description" into main

pull/2/head
Caren Chang 3 years ago committed by Gerrit Code Review
commit 4f3776406c

@ -16,28 +16,83 @@
package com.google.samples.apps.nowinandroid.ui package com.google.samples.apps.nowinandroid.ui
import android.content.res.Configuration import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.MaterialTheme
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Bookmark import androidx.compose.material.icons.filled.Bookmark
import androidx.compose.material.icons.filled.BookmarkBorder import androidx.compose.material.icons.filled.BookmarkBorder
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconToggleButton import androidx.compose.material3.IconToggleButton
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.onClick import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import com.google.samples.apps.nowinandroid.R import com.google.samples.apps.nowinandroid.R
import com.google.samples.apps.nowinandroid.data.fake.FakeDataSource
import com.google.samples.apps.nowinandroid.data.model.NewsResource import com.google.samples.apps.nowinandroid.data.model.NewsResource
import com.google.samples.apps.nowinandroid.data.network.NetworkAuthor
import com.google.samples.apps.nowinandroid.data.network.NetworkEpisode
import com.google.samples.apps.nowinandroid.data.network.NetworkTopic
import com.google.samples.apps.nowinandroid.data.network.asEntity
import com.google.samples.apps.nowinandroid.ui.theme.NiaTheme import com.google.samples.apps.nowinandroid.ui.theme.NiaTheme
/** /**
* [com.google.samples.apps.nowinandroid.data.model.NewsResource] card used on the following screens: * [NewsResource] card used on the following screens: For You, Episodes, Saved
* For You, Episodes, Saved
*/ */
@Composable
fun NewsResourceCardExpanded(
newsResource: NewsResource,
isBookmarked: Boolean,
onToggleBookmark: () -> Unit
) {
Column(
modifier = Modifier.padding(16.dp)
) {
Row {
NewsResourceTitle(newsResource.entity.title, modifier = Modifier.fillMaxWidth((.8f)))
Spacer(modifier = Modifier.weight(1f))
BookmarkButton(isBookmarked, onToggleBookmark)
}
Spacer(modifier = Modifier.height(12.dp))
NewsResourceShortDescription(newsResource.entity.content)
}
}
@Composable
fun NewsResourceHeaderImage(
newsResource: NewsResource
) {
TODO()
}
@Composable
fun NewsResourceAuthors(
newsResource: NewsResource
) {
TODO()
}
@Composable
fun NewsResourceTitle(
newsResourceTitle: String,
modifier: Modifier = Modifier
) {
Text(newsResourceTitle, style = MaterialTheme.typography.h4, modifier = modifier)
}
@Composable @Composable
fun BookmarkButton( fun BookmarkButton(
isBookmarked: Boolean, isBookmarked: Boolean,
@ -63,27 +118,6 @@ fun BookmarkButton(
} }
} }
@Composable
fun NewsResourceAuthors(
newsResource: NewsResource
) {
TODO()
}
@Composable
fun NewsResourceHeaderImage(
newsResource: NewsResource
) {
TODO()
}
@Composable
fun NewsResourceTitle(
newsResource: NewsResource
) {
TODO()
}
@Composable @Composable
fun NewsResourceDate( fun NewsResourceDate(
newsResource: NewsResource newsResource: NewsResource
@ -100,9 +134,9 @@ fun NewsResourceLink(
@Composable @Composable
fun NewsResourceShortDescription( fun NewsResourceShortDescription(
newsResource: NewsResource newsResourceShortDescription: String
) { ) {
TODO() Text(newsResourceShortDescription, style = MaterialTheme.typography.body1)
} }
@Composable @Composable
@ -112,11 +146,6 @@ fun NewsResourceTopics(
TODO() TODO()
} }
@Composable
fun NewsResourceCardExpanded() {
TODO()
}
@Preview("Bookmark Button") @Preview("Bookmark Button")
@Composable @Composable
fun BookmarkButtonPreview() { fun BookmarkButtonPreview() {
@ -137,13 +166,43 @@ fun BookmarkButtonBookmarkedPreview() {
} }
} }
@Preview("Expanded resource card")
@Preview("Expanded resource card (dark)", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable @Composable
fun ExpandedNewsResourcePreview() { fun ExpandedNewsResourcePreview(
@PreviewParameter(NewsResourcePreviewParameterProvider::class) newsResource: NewsResource
) {
NiaTheme { NiaTheme {
Surface { Surface {
NewsResourceCardExpanded() NewsResourceCardExpanded(newsResource, true, {})
} }
} }
} }
class NewsResourcePreviewParameterProvider : PreviewParameterProvider<NewsResource> {
override val values = sequenceOf(
NewsResource(
FakeDataSource.sampleResource.asEntity(),
NetworkEpisode(
id = 1,
name = "Now in Android 40",
alternateVideo = null,
alternateAudio = null,
publishDate = FakeDataSource.sampleResource.publishDate
).asEntity(),
listOf(
NetworkAuthor(
id = 1,
name = "Android",
imageUrl = ""
)
.asEntity()
),
listOf(
NetworkTopic(
id = 3,
name = "Performance",
description = ""
).asEntity()
)
)
)
}

Loading…
Cancel
Save