package su.reya.coop.screens import android.net.Uri import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.LoadingIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage @OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun NewIdentityScreen( isLoading: Boolean, onSave: (name: String, bio: String, picture: Uri?) -> Unit ) { var name by remember { mutableStateOf("") } var bio by remember { mutableStateOf("") } var picture by remember { mutableStateOf(null) } val launcher = rememberLauncherForActivityResult(contract = ActivityResultContracts.GetContent()) { uri: Uri? -> picture = uri } Column( modifier = Modifier .fillMaxSize() .padding(16.dp) .verticalScroll(rememberScrollState()), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(16.dp) ) { Text( text = "New Identity", style = MaterialTheme.typography.headlineMediumEmphasized ) Box( modifier = Modifier .size(120.dp) .clip(CircleShape), contentAlignment = Alignment.Center ) { if (picture != null) { AsyncImage( model = picture, contentDescription = "Profile picture", modifier = Modifier.fillMaxSize(), contentScale = ContentScale.Crop ) } else { Surface( color = MaterialTheme.colorScheme.surfaceVariant, modifier = Modifier.fillMaxSize() ) { // } } } OutlinedTextField( value = name, onValueChange = { name = it }, label = { Text("Name") }, modifier = Modifier.fillMaxWidth(), singleLine = true, ) OutlinedTextField( value = bio, onValueChange = { bio = it }, label = { Text("Bio:") }, modifier = Modifier .fillMaxWidth() .height(150.dp), minLines = 3, ) Spacer(modifier = Modifier.weight(1f)) Button( onClick = { onSave(name, bio, picture) }, modifier = Modifier.fillMaxWidth(), enabled = name.isNotBlank() && !isLoading, ) { if (isLoading) { LoadingIndicator() } else { Text("Save & Continue") } } } }