implemented friends feed

This commit is contained in:
lbarraga 2023-05-16 10:06:24 +02:00
parent bd9fce4418
commit f5ae4f157c
2 changed files with 85 additions and 12 deletions

View file

@ -1,20 +1,36 @@
package be.ugent.sel.studeez.screens.friends_feed
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.Card
import androidx.compose.material.Divider
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import be.ugent.sel.studeez.common.composable.DateText
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
import be.ugent.sel.studeez.common.composable.StealthButton
import be.ugent.sel.studeez.common.composable.TimerEntry
import be.ugent.sel.studeez.common.composable.drawer.DrawerActions
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
import be.ugent.sel.studeez.common.ext.spacer
import be.ugent.sel.studeez.data.local.models.FeedEntry
import be.ugent.sel.studeez.data.local.models.SessionReport
import be.ugent.sel.studeez.data.local.models.task.Task
import be.ugent.sel.studeez.data.local.models.timer_functional.HoursMinutesSeconds
import be.ugent.sel.studeez.resources
import kotlinx.coroutines.flow.toList
import be.ugent.sel.studeez.R.string as AppText
@Composable
@ -37,17 +53,25 @@ fun FriendsFeedScreen(
viewModel: FriendsFeedViewModel
) {
PrimaryScreenTemplate(
title = resources().getString(AppText.upcoming_sessions),
title = resources().getString(AppText.friends_feed),
drawerActions = drawerActions,
navigationBarActions = navigationBarActions
) {
val friendsSessions = viewModel.getFriendsSessions().collectAsState(initial = emptyList())
LazyColumn() {
// Default Timers, cannot be edited
items(friendsSessions.value) {
FriendsFeedEntry(name = it.first, sessions = it.second)
Divider()
val (day, feedEntries) = it
DateText(date = day)
feedEntries.forEach { (name, feedEntry) ->
FriendsFeedEntry(name = name, feedEntry = feedEntry)
}
Spacer(modifier = Modifier.height(10.dp))
}
}
@ -55,11 +79,56 @@ fun FriendsFeedScreen(
}
@Composable
fun FriendsFeedEntry(name: String, sessions: List<Task>) {
Column() {
Text(text = "$name Werkte ")
sessions.forEach {
Text(text = "${HoursMinutesSeconds(it.time)} aan ${it.name}")
fun FriendsFeedEntry(
name: String,
feedEntry: FeedEntry
) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 10.dp, vertical = 5.dp),
) {
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
Row(
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.padding(start = 10.dp)
.weight(11f)
) {
Box(
modifier = Modifier
.size(20.dp)
.clip(CircleShape)
.background(Color(feedEntry.argb_color)),
)
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
Column(
verticalArrangement = Arrangement.spacedBy(0.dp)
) {
Text(
text = "$name studied for ${feedEntry.subJectName}",
fontWeight = FontWeight.Medium,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
)
Text(
text = feedEntry.taskName,
overflow = TextOverflow.Ellipsis,
maxLines = 1,
)
}
Text(text = HoursMinutesSeconds(feedEntry.totalStudyTime).toString())
}
}
}
}
}

View file

@ -1,21 +1,25 @@
package be.ugent.sel.studeez.screens.friends_feed
import be.ugent.sel.studeez.data.local.models.FeedEntry
import be.ugent.sel.studeez.data.local.models.task.Task
import be.ugent.sel.studeez.domain.FeedDAO
import be.ugent.sel.studeez.domain.LogService
import be.ugent.sel.studeez.domain.SessionDAO
import be.ugent.sel.studeez.screens.StudeezViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.toList
import javax.inject.Inject
@HiltViewModel
class FriendsFeedViewModel @Inject constructor(
private val sessionDAO: SessionDAO,
private val feedDAO: FeedDAO,
logService: LogService
) : StudeezViewModel(logService) {
fun getFriendsSessions(): Flow<List<Pair<String, List<Task>>>> {
return sessionDAO.getFriendsSessions()
fun getFriendsSessions(): Flow<List<Pair<String, List<Pair<String, FeedEntry>>>>> {
return feedDAO.getFriendsSessions().map { it.toList() }
}