Extract components

This commit is contained in:
Sebastian Seedorf
2021-11-19 21:46:04 +01:00
parent adff1fea0c
commit c07730587d
5 changed files with 103 additions and 75 deletions

View File

@@ -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<Announcement>?, 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
}
}

View File

@@ -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,16 +21,9 @@ fun AnnouncementItem(announcement: Announcement) {
@Composable
fun AnnouncementItem(announcement: Announcement, click: () -> Unit) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(dimensionResource(R.dimen.card_view_margin)),
elevation = dimensionResource(R.dimen.card_view_elevation)
) {
Column(
FuCardColumn(
modifier = Modifier
.clickable(true, onClick = click)
.padding(dimensionResource(R.dimen.card_view_padding))
) {
Text(
text = announcement.title ?: "Title",
@@ -47,7 +35,6 @@ fun AnnouncementItem(announcement: Announcement, click: () -> Unit) {
)
}
}
}
@Preview
@Composable

View File

@@ -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,17 +35,10 @@ fun LecturerItem(lecturer: Lecturer, courseTitle: String) {
@Composable
fun LecturerItem(lecturer: Lecturer, click: () -> Unit) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(dimensionResource(R.dimen.card_view_margin)),
elevation = dimensionResource(R.dimen.card_view_elevation)
) {
Row(
FuCardRow(
modifier = Modifier
.clickable(true, onClick = click)
.padding(dimensionResource(R.dimen.card_view_padding)),
verticalAlignment = Alignment.CenterVertically
.height(IntrinsicSize.Min)
) {
Column(
modifier = Modifier
@@ -75,13 +65,12 @@ fun LecturerItem(lecturer: Lecturer, click: () -> Unit) {
contentDescription = stringResource(R.string.mail_icon),
tint = MaterialTheme.colors.secondary,
modifier = Modifier
.height(70.dp)
.fillMaxHeight()
.aspectRatio(1f, true)
)
}
}
}
}
@Preview
@Composable

View File

@@ -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
)
}
}

View File

@@ -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
)
}