#14 temporary update does not work

This commit is contained in:
Tibo De Peuter 2023-04-15 13:32:38 +02:00
parent e4066dedd7
commit b790b55ab2
9 changed files with 79 additions and 10 deletions

View file

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

View file

@ -1,10 +1,7 @@
package be.ugent.sel.studeez.domain
import kotlinx.coroutines.flow.Flow
interface UserDAO {
suspend fun getUserName(): String?
suspend fun getUsername(): String?
suspend fun save(newUsername: String)
}

View file

@ -1,18 +1,26 @@
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.UserDAO
import com.google.firebase.firestore.DocumentReference
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 javax.inject.Inject
import kotlin.coroutines.coroutineContext
class FirebaseUserDAO @Inject constructor(
private val firestore: FirebaseFirestore,
private val auth: AccountDAO
) : UserDAO {
override suspend fun getUserName(): String? {
override suspend fun getUsername(): String? {
return currentUserDocument().get().await().getString("username")
}

View file

@ -2,8 +2,8 @@ package be.ugent.sel.studeez.screens.drawer
import be.ugent.sel.studeez.domain.AccountDAO
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.LOGIN_SCREEN
import be.ugent.sel.studeez.screens.StudeezViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@ -29,7 +29,7 @@ class DrawerViewModel @Inject constructor(
fun onLogoutClick(openAndPopUp: (String, String) -> Unit) {
launchCatching {
accountDAO.signOut()
openAndPopUp(StudeezDestinations.LOGIN_SCREEN, StudeezDestinations.HOME_SCREEN)
openAndPopUp(LOGIN_SCREEN, HOME_SCREEN)
}
}

View file

@ -1,10 +1,16 @@
package be.ugent.sel.studeez.screens.profile
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.rememberCoroutineScope
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.resources
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import be.ugent.sel.studeez.R.string as AppText
@Composable
@ -13,11 +19,22 @@ fun ProfileScreen(
openAndPopUp: (String, String) -> Unit,
viewModel: ProfileViewModel = hiltViewModel()
) {
val coroutineScope: CoroutineScope = rememberCoroutineScope()
var username: String? = null
PrimaryScreenTemplate(
title = resources().getString(AppText.profile),
open = open,
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()
}
}
}

View file

@ -1,13 +1,30 @@
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.UserDAO
import be.ugent.sel.studeez.resources
import be.ugent.sel.studeez.screens.StudeezViewModel
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
@HiltViewModel
class ProfileViewModel @Inject constructor(
private val userDAO: UserDAO,
logService: LogService
) : StudeezViewModel(logService) {
suspend fun getUsername(): String? {
return userDAO.getUsername()
}
}

View file

@ -21,7 +21,7 @@ import be.ugent.sel.studeez.common.ext.basicButton
import kotlinx.coroutines.delay
import be.ugent.sel.studeez.R.string as AppText
private const val SPLASH_TIMEOUT = 1000L
private const val SPLASH_TIMEOUT = 500L
@Composable
fun SplashScreen(

View file

@ -0,0 +1,4 @@
package be.ugent.sel.studeez.screens.timers
class TimerScreen {
}

View file

@ -38,6 +38,7 @@
<!-- Profile -->
<string name="profile">Profile</string>
<string name="no_username">Unknown username</string>
<!-- Drawer / SideMenu -->
<string name="log_out">Log out</string>