Extract components
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
46
app/src/main/java/de/sebse/fuplanner2/ui/shared/FuCard.kt
Normal file
46
app/src/main/java/de/sebse/fuplanner2/ui/shared/FuCard.kt
Normal 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
|
||||
)
|
||||
}
|
||||
}
|
||||
13
app/src/main/java/de/sebse/fuplanner2/ui/shared/Heading.kt
Normal file
13
app/src/main/java/de/sebse/fuplanner2/ui/shared/Heading.kt
Normal 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
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user