diff --git a/core-designsystem/build.gradle.kts b/core-designsystem/build.gradle.kts
index bada9e329..053081bbf 100644
--- a/core-designsystem/build.gradle.kts
+++ b/core-designsystem/build.gradle.kts
@@ -41,4 +41,10 @@ dependencies {
api(libs.androidx.compose.runtime)
lintPublish(project(":lint"))
androidTestImplementation(project(":core-testing"))
+
+ // TODO : Remove these dependency once we upgrade to Android Studio Dolphin b/228889042
+ // These dependencies are currently necessary to render Compose previews
+ debugImplementation(libs.androidx.customview.poolingcontainer)
+ debugImplementation(libs.androidx.lifecycle.viewModelCompose)
+ debugImplementation(libs.androidx.savedstate.ktx)
}
\ No newline at end of file
diff --git a/core-designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt b/core-designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt
index c2790c538..d45bdb226 100644
--- a/core-designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt
+++ b/core-designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt
@@ -18,6 +18,7 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component
import androidx.compose.foundation.layout.Box
import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -26,6 +27,8 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import com.google.samples.apps.nowinandroid.core.designsystem.R
@Composable
fun NiaTopicTag(
@@ -36,9 +39,9 @@ fun NiaTopicTag(
modifier: Modifier = Modifier,
enabled: Boolean = true,
text: @Composable () -> Unit,
- followText: @Composable () -> Unit,
- unFollowText: @Composable () -> Unit,
- browseText: @Composable () -> Unit
+ followText: @Composable () -> Unit = { Text(stringResource(R.string.follow)) },
+ unFollowText: @Composable () -> Unit = { Text(stringResource(R.string.unfollow)) },
+ browseText: @Composable () -> Unit = { Text(stringResource(R.string.browse_topic)) }
) {
var expanded by remember { mutableStateOf(false) }
Box(modifier = modifier) {
diff --git a/core-designsystem/src/main/res/values/strings.xml b/core-designsystem/src/main/res/values/strings.xml
new file mode 100644
index 000000000..5d1158888
--- /dev/null
+++ b/core-designsystem/src/main/res/values/strings.xml
@@ -0,0 +1,21 @@
+
+
+
+ Follow
+ Unfollow
+ Browse topic
+
diff --git a/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt
index ac3de4363..117b2ae47 100644
--- a/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt
+++ b/core-ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt
@@ -17,6 +17,8 @@
package com.google.samples.apps.nowinandroid.core.ui
import androidx.compose.foundation.background
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -26,6 +28,7 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card
@@ -45,7 +48,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
-import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.res.painterResource
@@ -54,16 +56,18 @@ import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import androidx.core.os.ConfigurationCompat
import coil.compose.AsyncImage
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaToggleButton
+import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopicTag
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
import com.google.samples.apps.nowinandroid.core.model.data.Author
import com.google.samples.apps.nowinandroid.core.model.data.NewsResource
+import com.google.samples.apps.nowinandroid.core.model.data.Topic
import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources
import java.time.ZoneId
import java.time.format.DateTimeFormatter
+import java.util.Locale
import kotlinx.datetime.Instant
import kotlinx.datetime.toJavaInstant
@@ -117,6 +121,8 @@ fun NewsResourceCardExpanded(
NewsResourceDate(newsResource.publishDate)
Spacer(modifier = Modifier.height(12.dp))
NewsResourceShortDescription(newsResource.content)
+ Spacer(modifier = Modifier.height(12.dp))
+ NewsResourceTopics(newsResource.topics)
}
}
}
@@ -152,13 +158,7 @@ fun NewsResourceAuthors(
// Only display first author for now
val author = authors[0]
- val locale = ConfigurationCompat.getLocales(LocalConfiguration.current).get(0)
-
- val authorNameFormatted = if (locale != null) {
- author.name.uppercase(locale)
- } else {
- author.name.uppercase()
- }
+ val authorNameFormatted = author.name.uppercase(Locale.getDefault())
val authorImageUrl = author.imageUrl
@@ -265,9 +265,23 @@ fun NewsResourceShortDescription(
@Composable
fun NewsResourceTopics(
- newsResource: NewsResource
+ topics: List,
+ modifier: Modifier = Modifier
) {
- TODO()
+ Row(
+ modifier = modifier.horizontalScroll(rememberScrollState()), // causes narrow chips
+ horizontalArrangement = Arrangement.spacedBy(4.dp),
+ ) {
+ for (topic in topics) {
+ NiaTopicTag(
+ followed = true, // ToDo: Check if topic is followed
+ onFollowClick = { }, // ToDo
+ onUnfollowClick = { }, // ToDo
+ onBrowseClick = { }, // ToDo
+ text = { Text(text = topic.name.uppercase(Locale.getDefault())) }
+ )
+ }
+ }
}
@Preview("Bookmark Button")