implemented friends feed
This commit is contained in:
		
							parent
							
								
									bd9fce4418
								
							
						
					
					
						commit
						f5ae4f157c
					
				
					 2 changed files with 85 additions and 12 deletions
				
			
		|  | @ -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()) | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -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() } | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Reference in a new issue
	
	 lbarraga
						lbarraga