From c07730587dd4aa8415086724ef924be1532f7e5e Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Fri, 19 Nov 2021 21:46:04 +0100 Subject: [PATCH] Extract components --- .../ui/details/CourseDetailsScreen.kt | 15 ++-- .../ui/details/components/AnnouncementItem.kt | 35 +++------- .../ui/details/components/LecturerItem.kt | 69 ++++++++----------- .../de/sebse/fuplanner2/ui/shared/FuCard.kt | 46 +++++++++++++ .../de/sebse/fuplanner2/ui/shared/Heading.kt | 13 ++++ 5 files changed, 103 insertions(+), 75 deletions(-) create mode 100644 app/src/main/java/de/sebse/fuplanner2/ui/shared/FuCard.kt create mode 100644 app/src/main/java/de/sebse/fuplanner2/ui/shared/Heading.kt diff --git a/app/src/main/java/de/sebse/fuplanner2/ui/details/CourseDetailsScreen.kt b/app/src/main/java/de/sebse/fuplanner2/ui/details/CourseDetailsScreen.kt index fcf5441..404db36 100644 --- a/app/src/main/java/de/sebse/fuplanner2/ui/details/CourseDetailsScreen.kt +++ b/app/src/main/java/de/sebse/fuplanner2/ui/details/CourseDetailsScreen.kt @@ -2,8 +2,6 @@ package de.sebse.fuplanner2.ui.details import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -20,6 +18,7 @@ import de.sebse.fuplanner2.database.Course import de.sebse.fuplanner2.ui.details.components.AnnouncementItem import de.sebse.fuplanner2.ui.details.components.LecturerItem import de.sebse.fuplanner2.ui.details.components.QuickLinks +import de.sebse.fuplanner2.ui.shared.Heading import de.sebse.fuplanner2.ui.theme.AppTheme import de.sebse.fuplanner2.ui.tools.previews.AnnouncementPreviewProvider import de.sebse.fuplanner2.ui.tools.previews.CoursePreviewProvider @@ -49,24 +48,18 @@ fun CourseDetailsScreen(course: Course?, announcement: List?, id: LazyColumn { item { QuickLinks(courseId = id) - Text( - text = stringResource(R.string.lecturers), - style = MaterialTheme.typography.h5 - ) + Heading(stringResource(R.string.lecturers)) } items(course?.lecturers ?: listOf()) { LecturerItem(lecturer = it, courseTitle = course?.title ?: "") } item { - Text( - text = stringResource(R.string.announcements), - style = MaterialTheme.typography.h5 - ) + Heading(stringResource(R.string.announcements)) } items(items = announcements) { AnnouncementItem(it) } - // TODO: Add latest announcements, current assignments, upcoming events + // TODO: Add current assignments, upcoming events } } diff --git a/app/src/main/java/de/sebse/fuplanner2/ui/details/components/AnnouncementItem.kt b/app/src/main/java/de/sebse/fuplanner2/ui/details/components/AnnouncementItem.kt index cbc0dcb..e671271 100644 --- a/app/src/main/java/de/sebse/fuplanner2/ui/details/components/AnnouncementItem.kt +++ b/app/src/main/java/de/sebse/fuplanner2/ui/details/components/AnnouncementItem.kt @@ -1,20 +1,15 @@ package de.sebse.fuplanner2.ui.details.components import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material.Card import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import de.sebse.fuplanner2.R import de.sebse.fuplanner2.database.Announcement +import de.sebse.fuplanner2.ui.shared.FuCardColumn import de.sebse.fuplanner2.ui.theme.AppTheme import de.sebse.fuplanner2.ui.tools.previews.AnnouncementPreviewProvider import de.sebse.fuplanner2.utils.toDateTimeString @@ -26,26 +21,18 @@ fun AnnouncementItem(announcement: Announcement) { @Composable fun AnnouncementItem(announcement: Announcement, click: () -> Unit) { - Card( + FuCardColumn( modifier = Modifier - .fillMaxWidth() - .padding(dimensionResource(R.dimen.card_view_margin)), - elevation = dimensionResource(R.dimen.card_view_elevation) + .clickable(true, onClick = click) ) { - Column( - modifier = Modifier - .clickable(true, onClick = click) - .padding(dimensionResource(R.dimen.card_view_padding)) - ) { - Text( - text = announcement.title ?: "Title", - style = MaterialTheme.typography.h6 - ) - Text( - text = announcement.createdOn.toDateTimeString(LocalContext.current) ?: "", - style = MaterialTheme.typography.subtitle1 - ) - } + Text( + text = announcement.title ?: "Title", + style = MaterialTheme.typography.h6 + ) + Text( + text = announcement.createdOn.toDateTimeString(LocalContext.current) ?: "", + style = MaterialTheme.typography.subtitle1 + ) } } diff --git a/app/src/main/java/de/sebse/fuplanner2/ui/details/components/LecturerItem.kt b/app/src/main/java/de/sebse/fuplanner2/ui/details/components/LecturerItem.kt index 0818e07..24399e4 100644 --- a/app/src/main/java/de/sebse/fuplanner2/ui/details/components/LecturerItem.kt +++ b/app/src/main/java/de/sebse/fuplanner2/ui/details/components/LecturerItem.kt @@ -5,24 +5,21 @@ import android.content.Intent import android.net.Uri import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* -import androidx.compose.material.Card import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Email import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter -import androidx.compose.ui.unit.dp import de.sebse.fuplanner2.R import de.sebse.fuplanner2.database.Lecturer +import de.sebse.fuplanner2.ui.shared.FuCardRow import de.sebse.fuplanner2.ui.theme.AppTheme import de.sebse.fuplanner2.ui.tools.previews.LecturerPreviewProvider @@ -38,47 +35,39 @@ fun LecturerItem(lecturer: Lecturer, courseTitle: String) { @Composable fun LecturerItem(lecturer: Lecturer, click: () -> Unit) { - Card( + FuCardRow( modifier = Modifier - .fillMaxWidth() - .padding(dimensionResource(R.dimen.card_view_margin)), - elevation = dimensionResource(R.dimen.card_view_elevation) + .clickable(true, onClick = click) + .height(IntrinsicSize.Min) ) { - Row( + Column( modifier = Modifier - .clickable(true, onClick = click) - .padding(dimensionResource(R.dimen.card_view_padding)), - verticalAlignment = Alignment.CenterVertically + .weight(1f) ) { - Column( + val textDecor = if (lecturer.isResponsible) TextDecoration.Underline else null + Text( + text = stringResource( + R.string.full_name, + lecturer.firstName, + lecturer.lastName + ), + textDecoration = textDecor, + style = MaterialTheme.typography.h6 + ) + Text( + text = lecturer.email, + style = MaterialTheme.typography.subtitle1 + ) + } + Column { + Icon( + Icons.Filled.Email, + contentDescription = stringResource(R.string.mail_icon), + tint = MaterialTheme.colors.secondary, modifier = Modifier - .weight(1f) - ) { - val textDecor = if (lecturer.isResponsible) TextDecoration.Underline else null - Text( - text = stringResource( - R.string.full_name, - lecturer.firstName, - lecturer.lastName - ), - textDecoration = textDecor, - style = MaterialTheme.typography.h6 - ) - Text( - text = lecturer.email, - style = MaterialTheme.typography.subtitle1 - ) - } - Column { - Icon( - Icons.Filled.Email, - contentDescription = stringResource(R.string.mail_icon), - tint = MaterialTheme.colors.secondary, - modifier = Modifier - .height(70.dp) - .aspectRatio(1f, true) - ) - } + .fillMaxHeight() + .aspectRatio(1f, true) + ) } } } diff --git a/app/src/main/java/de/sebse/fuplanner2/ui/shared/FuCard.kt b/app/src/main/java/de/sebse/fuplanner2/ui/shared/FuCard.kt new file mode 100644 index 0000000..71ecc25 --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner2/ui/shared/FuCard.kt @@ -0,0 +1,46 @@ +package de.sebse.fuplanner2.ui.shared + +import androidx.compose.foundation.layout.* +import androidx.compose.material.Card +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.dimensionResource +import de.sebse.fuplanner2.R + +@Composable +fun FuCardColumn( + modifier: Modifier, + content :@Composable (ColumnScope.() -> Unit) +) { + Card( + modifier = Modifier + .fillMaxWidth() + .padding(dimensionResource(R.dimen.card_view_margin)), + elevation = dimensionResource(R.dimen.card_view_elevation) + ) { + Column( + modifier = modifier + .padding(dimensionResource(R.dimen.card_view_padding)), + content = content + ) + } +} + +@Composable +fun FuCardRow( + modifier: Modifier, + content :@Composable (RowScope.() -> Unit) +) { + Card( + modifier = Modifier + .fillMaxWidth() + .padding(dimensionResource(R.dimen.card_view_margin)), + elevation = dimensionResource(R.dimen.card_view_elevation) + ) { + Row ( + modifier = modifier + .padding(dimensionResource(R.dimen.card_view_padding)), + content = content + ) + } +} diff --git a/app/src/main/java/de/sebse/fuplanner2/ui/shared/Heading.kt b/app/src/main/java/de/sebse/fuplanner2/ui/shared/Heading.kt new file mode 100644 index 0000000..152635a --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner2/ui/shared/Heading.kt @@ -0,0 +1,13 @@ +package de.sebse.fuplanner2.ui.shared + +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.runtime.Composable + +@Composable +fun Heading(text: String) { + Text( + text = text, + style = MaterialTheme.typography.h5 + ) +}