#14 temporary update does not work
This commit is contained in:
		
							parent
							
								
									e4066dedd7
								
							
						
					
					
						commit
						b790b55ab2
					
				
					 9 changed files with 79 additions and 10 deletions
				
			
		|  | @ -0,0 +1,25 @@ | ||||||
|  | package be.ugent.sel.studeez.common.composable | ||||||
|  | 
 | ||||||
|  | import androidx.compose.foundation.layout.Row | ||||||
|  | import androidx.compose.foundation.layout.fillMaxWidth | ||||||
|  | import androidx.compose.foundation.layout.height | ||||||
|  | import androidx.compose.foundation.layout.size | ||||||
|  | import androidx.compose.material.Text | ||||||
|  | import androidx.compose.runtime.Composable | ||||||
|  | import androidx.compose.ui.Modifier | ||||||
|  | import androidx.compose.ui.unit.dp | ||||||
|  | 
 | ||||||
|  | @Composable | ||||||
|  | fun Headline( | ||||||
|  |     text: String | ||||||
|  | ) { | ||||||
|  |     Row ( | ||||||
|  |         modifier = Modifier.fillMaxWidth() | ||||||
|  |     ) { | ||||||
|  |         Text( | ||||||
|  |             text = text, | ||||||
|  |             modifier = Modifier.size(34.dp) | ||||||
|  |                 .height(45.dp) | ||||||
|  |         ) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -1,10 +1,7 @@ | ||||||
| package be.ugent.sel.studeez.domain | package be.ugent.sel.studeez.domain | ||||||
| 
 | 
 | ||||||
| import kotlinx.coroutines.flow.Flow |  | ||||||
| 
 |  | ||||||
| interface UserDAO { | interface UserDAO { | ||||||
| 
 | 
 | ||||||
|     suspend fun getUserName(): String? |     suspend fun getUsername(): String? | ||||||
| 
 |  | ||||||
|     suspend fun save(newUsername: String) |     suspend fun save(newUsername: String) | ||||||
| } | } | ||||||
|  | @ -1,18 +1,26 @@ | ||||||
| package be.ugent.sel.studeez.domain.implementation | package be.ugent.sel.studeez.domain.implementation | ||||||
| 
 | 
 | ||||||
|  | import androidx.compose.runtime.rememberCoroutineScope | ||||||
| import be.ugent.sel.studeez.domain.AccountDAO | import be.ugent.sel.studeez.domain.AccountDAO | ||||||
| import be.ugent.sel.studeez.domain.UserDAO | import be.ugent.sel.studeez.domain.UserDAO | ||||||
| import com.google.firebase.firestore.DocumentReference | import com.google.firebase.firestore.DocumentReference | ||||||
| import com.google.firebase.firestore.FirebaseFirestore | import com.google.firebase.firestore.FirebaseFirestore | ||||||
|  | import kotlinx.coroutines.CoroutineScope | ||||||
|  | import kotlinx.coroutines.channels.awaitClose | ||||||
|  | import kotlinx.coroutines.coroutineScope | ||||||
|  | import kotlinx.coroutines.flow.Flow | ||||||
|  | import kotlinx.coroutines.flow.callbackFlow | ||||||
|  | import kotlinx.coroutines.flow.flow | ||||||
| import kotlinx.coroutines.tasks.await | import kotlinx.coroutines.tasks.await | ||||||
| import javax.inject.Inject | import javax.inject.Inject | ||||||
|  | import kotlin.coroutines.coroutineContext | ||||||
| 
 | 
 | ||||||
| class FirebaseUserDAO @Inject constructor( | class FirebaseUserDAO @Inject constructor( | ||||||
|     private val firestore: FirebaseFirestore, |     private val firestore: FirebaseFirestore, | ||||||
|     private val auth: AccountDAO |     private val auth: AccountDAO | ||||||
|     ) : UserDAO { |     ) : UserDAO { | ||||||
| 
 | 
 | ||||||
|     override suspend fun getUserName(): String? { |     override suspend fun getUsername(): String? { | ||||||
|         return currentUserDocument().get().await().getString("username") |         return currentUserDocument().get().await().getString("username") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,8 +2,8 @@ package be.ugent.sel.studeez.screens.drawer | ||||||
| 
 | 
 | ||||||
| import be.ugent.sel.studeez.domain.AccountDAO | import be.ugent.sel.studeez.domain.AccountDAO | ||||||
| import be.ugent.sel.studeez.domain.LogService | import be.ugent.sel.studeez.domain.LogService | ||||||
| import be.ugent.sel.studeez.navigation.StudeezDestinations |  | ||||||
| import be.ugent.sel.studeez.navigation.StudeezDestinations.HOME_SCREEN | import be.ugent.sel.studeez.navigation.StudeezDestinations.HOME_SCREEN | ||||||
|  | import be.ugent.sel.studeez.navigation.StudeezDestinations.LOGIN_SCREEN | ||||||
| import be.ugent.sel.studeez.screens.StudeezViewModel | import be.ugent.sel.studeez.screens.StudeezViewModel | ||||||
| import dagger.hilt.android.lifecycle.HiltViewModel | import dagger.hilt.android.lifecycle.HiltViewModel | ||||||
| import javax.inject.Inject | import javax.inject.Inject | ||||||
|  | @ -29,7 +29,7 @@ class DrawerViewModel @Inject constructor( | ||||||
|     fun onLogoutClick(openAndPopUp: (String, String) -> Unit) { |     fun onLogoutClick(openAndPopUp: (String, String) -> Unit) { | ||||||
|         launchCatching { |         launchCatching { | ||||||
|             accountDAO.signOut() |             accountDAO.signOut() | ||||||
|             openAndPopUp(StudeezDestinations.LOGIN_SCREEN, StudeezDestinations.HOME_SCREEN) |             openAndPopUp(LOGIN_SCREEN, HOME_SCREEN) | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,10 +1,16 @@ | ||||||
| package be.ugent.sel.studeez.screens.profile | package be.ugent.sel.studeez.screens.profile | ||||||
| 
 | 
 | ||||||
| import androidx.compose.material.Text |  | ||||||
| import androidx.compose.runtime.Composable | import androidx.compose.runtime.Composable | ||||||
|  | import androidx.compose.runtime.LaunchedEffect | ||||||
|  | import androidx.compose.runtime.rememberCoroutineScope | ||||||
| import androidx.hilt.navigation.compose.hiltViewModel | import androidx.hilt.navigation.compose.hiltViewModel | ||||||
|  | import be.ugent.sel.studeez.R | ||||||
|  | import be.ugent.sel.studeez.common.composable.Headline | ||||||
| import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate | import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate | ||||||
| import be.ugent.sel.studeez.resources | import be.ugent.sel.studeez.resources | ||||||
|  | import kotlinx.coroutines.CoroutineScope | ||||||
|  | import kotlinx.coroutines.coroutineScope | ||||||
|  | import kotlinx.coroutines.launch | ||||||
| import be.ugent.sel.studeez.R.string as AppText | import be.ugent.sel.studeez.R.string as AppText | ||||||
| 
 | 
 | ||||||
| @Composable | @Composable | ||||||
|  | @ -13,11 +19,22 @@ fun ProfileScreen( | ||||||
|     openAndPopUp: (String, String) -> Unit, |     openAndPopUp: (String, String) -> Unit, | ||||||
|     viewModel: ProfileViewModel = hiltViewModel() |     viewModel: ProfileViewModel = hiltViewModel() | ||||||
| ) { | ) { | ||||||
|  |     val coroutineScope: CoroutineScope = rememberCoroutineScope() | ||||||
|  | 
 | ||||||
|  |     var username: String? = null | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     PrimaryScreenTemplate( |     PrimaryScreenTemplate( | ||||||
|         title = resources().getString(AppText.profile), |         title = resources().getString(AppText.profile), | ||||||
|         open = open, |         open = open, | ||||||
|         openAndPopUp = openAndPopUp |         openAndPopUp = openAndPopUp | ||||||
|     ) { |     ) { | ||||||
|         Text(text = "This is your profile!") // TODO |         Headline(text = (username ?: resources().getString(R.string.no_username))) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     LaunchedEffect(true) { | ||||||
|  |         coroutineScope.launch { | ||||||
|  |             username = viewModel.getUsername() | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -1,13 +1,30 @@ | ||||||
| package be.ugent.sel.studeez.screens.profile | package be.ugent.sel.studeez.screens.profile | ||||||
| 
 | 
 | ||||||
|  | import androidx.compose.runtime.rememberCoroutineScope | ||||||
|  | import androidx.lifecycle.viewModelScope | ||||||
|  | import be.ugent.sel.studeez.R | ||||||
| import be.ugent.sel.studeez.domain.LogService | import be.ugent.sel.studeez.domain.LogService | ||||||
|  | import be.ugent.sel.studeez.domain.UserDAO | ||||||
|  | import be.ugent.sel.studeez.resources | ||||||
| import be.ugent.sel.studeez.screens.StudeezViewModel | import be.ugent.sel.studeez.screens.StudeezViewModel | ||||||
| import dagger.hilt.android.lifecycle.HiltViewModel | import dagger.hilt.android.lifecycle.HiltViewModel | ||||||
|  | import kotlinx.coroutines.CoroutineScope | ||||||
|  | import kotlinx.coroutines.coroutineScope | ||||||
|  | import kotlinx.coroutines.flow.SharingStarted | ||||||
|  | import kotlinx.coroutines.flow.StateFlow | ||||||
|  | import kotlinx.coroutines.flow.map | ||||||
|  | import kotlinx.coroutines.flow.stateIn | ||||||
|  | 
 | ||||||
| import javax.inject.Inject | import javax.inject.Inject | ||||||
| 
 | 
 | ||||||
| @HiltViewModel | @HiltViewModel | ||||||
| class ProfileViewModel @Inject constructor( | class ProfileViewModel @Inject constructor( | ||||||
|  |     private val userDAO: UserDAO, | ||||||
|     logService: LogService |     logService: LogService | ||||||
| ) : StudeezViewModel(logService) { | ) : StudeezViewModel(logService) { | ||||||
| 
 | 
 | ||||||
|  |     suspend fun getUsername(): String? { | ||||||
|  |         return userDAO.getUsername() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | @ -21,7 +21,7 @@ import be.ugent.sel.studeez.common.ext.basicButton | ||||||
| import kotlinx.coroutines.delay | import kotlinx.coroutines.delay | ||||||
| import be.ugent.sel.studeez.R.string as AppText | import be.ugent.sel.studeez.R.string as AppText | ||||||
| 
 | 
 | ||||||
| private const val SPLASH_TIMEOUT = 1000L | private const val SPLASH_TIMEOUT = 500L | ||||||
| 
 | 
 | ||||||
| @Composable | @Composable | ||||||
| fun SplashScreen( | fun SplashScreen( | ||||||
|  |  | ||||||
|  | @ -0,0 +1,4 @@ | ||||||
|  | package be.ugent.sel.studeez.screens.timers | ||||||
|  | 
 | ||||||
|  | class TimerScreen { | ||||||
|  | } | ||||||
|  | @ -38,6 +38,7 @@ | ||||||
| 
 | 
 | ||||||
|     <!-- Profile --> |     <!-- Profile --> | ||||||
|     <string name="profile">Profile</string> |     <string name="profile">Profile</string> | ||||||
|  |     <string name="no_username">Unknown username</string> | ||||||
| 
 | 
 | ||||||
|     <!-- Drawer / SideMenu --> |     <!-- Drawer / SideMenu --> | ||||||
|     <string name="log_out">Log out</string> |     <string name="log_out">Log out</string> | ||||||
|  |  | ||||||
		Reference in a new issue