Coverage Summary for Class: OnboardingScreenKt (debug.com.greybox.projectmesh.views)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| OnboardingScreenKt$OnboardingScreen$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/4)
|
| OnboardingScreenKt$OnboardingScreen$1$2 |
0%
(0/1)
|
0%
(0/4)
|
0%
(0/4)
|
0%
(0/44)
|
| OnboardingScreenKt$OnboardingScreen$1$2$1 |
0%
(0/1)
|
|
0%
(0/2)
|
0%
(0/13)
|
| OnboardingScreenKt$OnboardingScreen$1$2$1$1 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/4)
|
| OnboardingScreenKt$OnboardingScreen$1$2$2 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/4)
|
| OnboardingScreenKt$OnboardingScreen$1$2$3 |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/4)
|
| OnboardingScreenKt$OnboardingScreen$2 |
|
| OnboardingScreenKt$OnboardingScreen$factory$1$1 |
0%
(0/2)
|
0%
(0/2)
|
0%
(0/7)
|
0%
(0/21)
|
| Total |
0%
(0/10)
|
0%
(0/6)
|
0%
(0/17)
|
0%
(0/94)
|
package com.greybox.projectmesh.views
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewmodel.compose.viewModel
import com.greybox.projectmesh.GlobalApp
import com.greybox.projectmesh.extension.getLocalIpFromDI
import com.greybox.projectmesh.viewModel.OnboardingViewModel
import org.kodein.di.compose.localDI
@Composable
fun OnboardingScreen(
onComplete: () -> Unit
) {
// Retrieve DI instance
val di = localDI()
// Get the local IP from DI using our helper function
val localIp = getLocalIpFromDI(di)
// Create a custom ViewModelProvider.Factory that passes the local IP to OnboardingViewModel
val factory = remember {
object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(OnboardingViewModel::class.java)) {
@Suppress("UNCHECKED_CAST")
return OnboardingViewModel(
userRepository = GlobalApp.GlobalUserRepo.userRepository,
prefs = GlobalApp.GlobalUserRepo.prefs,
localIp = localIp // pass the local IP here
) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
}
// Obtain the OnboardingViewModel using the custom factory
val onboardingViewModel: OnboardingViewModel = viewModel(factory = factory)
val uiState by onboardingViewModel.uiState.collectAsState()
// Build your UI
Column(modifier = Modifier.padding(16.dp)) {
Text("Welcome to Project Mesh!")
Spacer(modifier = Modifier.height(16.dp))
Text("Please set your username:")
TextField(
value = uiState.username,
onValueChange = { newValue -> onboardingViewModel.onUsernameChange(newValue) }
)
Spacer(modifier = Modifier.height(16.dp))
Button(onClick = {
// Check if the username is null or blank
if (uiState.username.isNullOrBlank()) {
onboardingViewModel.blankUsernameGenerator{ generatedName ->
onboardingViewModel.onUsernameChange(generatedName)
onboardingViewModel.handleFirstTimeSetup { onComplete() }
}
} else {
onboardingViewModel.handleFirstTimeSetup { onComplete() }
}
onboardingViewModel.handleFirstTimeSetup { onComplete() }
}) {
Text("Next")
}
}
}