diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TextComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextComposable.kt
new file mode 100644
index 0000000..4fca2ee
--- /dev/null
+++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextComposable.kt
@@ -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)
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/UserDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/UserDAO.kt
index 28999e6..8b6f357 100644
--- a/app/src/main/java/be/ugent/sel/studeez/domain/UserDAO.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/domain/UserDAO.kt
@@ -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)
}
\ No newline at end of file
diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseUserDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseUserDAO.kt
index ac8f455..8ac779b 100644
--- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseUserDAO.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FirebaseUserDAO.kt
@@ -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")
}
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt
index 641321c..9cf7fcc 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/drawer/DrawerViewModel.kt
@@ -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)
}
}
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt
index ed3297a..d08a5aa 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileScreen.kt
@@ -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()
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileViewModel.kt
index 47286cc..1f6b1a2 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileViewModel.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/profile/ProfileViewModel.kt
@@ -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()
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt
index ec5e515..38146c0 100644
--- a/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/splash/SplashScreen.kt
@@ -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(
diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt
new file mode 100644
index 0000000..b7ca484
--- /dev/null
+++ b/app/src/main/java/be/ugent/sel/studeez/screens/timers/TimerScreen.kt
@@ -0,0 +1,4 @@
+package be.ugent.sel.studeez.screens.timers
+
+class TimerScreen {
+}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f1a46ed..1f23152 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -38,6 +38,7 @@
Profile
+ Unknown username
Log out