fix(#220): implement edit soul and set model dialogs (#248)

This commit is contained in:
M57 authored and GitHub committed 2026-06-21 20:03:31 +03:00
1 parent 4715c85185
commit 32def80694
2 files changed
+127

No files matched your search

@@ -17,6 +17,7 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Edit
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
@@ -25,7 +26,9 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@@ -251,4 +254,124 @@ fun ProfilesScreen(
} }
} }
} }
if (soulEditProfileName != null) {
val initialText = state.selectedSoulContent ?: ""
var soulText by remember(initialText) { mutableStateOf(initialText) }
AlertDialog(
onDismissRequest = {
soulEditProfileName = null
viewModel.closeSoulDialog()
},
title = {
Text(
text =
stringResource(
R.string.profiles_title_edit_soul,
soulEditProfileName.orEmpty(),
),
)
},
text = {
if (state.isLoadingSoul) {
Box(
modifier =
Modifier
.fillMaxWidth()
.height(100.dp),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator()
}
} else {
OutlinedTextField(
value = soulText,
onValueChange = { soulText = it },
modifier = Modifier.fillMaxWidth(),
maxLines = 10,
)
}
},
confirmButton = {
TextButton(
onClick = {
val profileName = soulEditProfileName
if (profileName != null) {
viewModel.saveSoul(profileName, soulText)
}
soulEditProfileName = null
},
enabled = !state.isLoadingSoul,
) {
Text(stringResource(R.string.action_ok))
}
},
dismissButton = {
TextButton(
onClick = {
soulEditProfileName = null
viewModel.closeSoulDialog()
},
) {
Text(stringResource(R.string.action_cancel))
}
},
)
}
if (modelEditProfileName != null) {
AlertDialog(
onDismissRequest = { modelEditProfileName = null },
title = {
Text(
text =
stringResource(
R.string.profiles_title_set_model,
modelEditProfileName.orEmpty(),
),
)
},
text = {
Column(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
OutlinedTextField(
value = tempModelProvider,
onValueChange = { tempModelProvider = it },
label = { Text(stringResource(R.string.profiles_label_provider_input)) },
modifier = Modifier.fillMaxWidth(),
singleLine = true,
)
OutlinedTextField(
value = tempModelName,
onValueChange = { tempModelName = it },
label = { Text(stringResource(R.string.profiles_label_model_input)) },
modifier = Modifier.fillMaxWidth(),
singleLine = true,
)
}
},
confirmButton = {
TextButton(
onClick = {
val profileName = modelEditProfileName
if (profileName != null) {
viewModel.updateModel(profileName, tempModelProvider, tempModelName)
}
modelEditProfileName = null
},
) {
Text(stringResource(R.string.action_ok))
}
},
dismissButton = {
TextButton(
onClick = { modelEditProfileName = null },
) {
Text(stringResource(R.string.action_cancel))
}
},
)
}
} }
+4
View File
@@ -271,6 +271,10 @@
<string name="profiles_action_edit_soul">Edit Soul</string> <string name="profiles_action_edit_soul">Edit Soul</string>
<string name="profiles_action_set_model">Set Model</string> <string name="profiles_action_set_model">Set Model</string>
<string name="profiles_content_desc_active">Active Profile</string> <string name="profiles_content_desc_active">Active Profile</string>
<string name="profiles_title_edit_soul">Edit Soul Profile: %1$s</string>
<string name="profiles_title_set_model">Set Model: %1$s</string>
<string name="profiles_label_provider_input">Provider</string>
<string name="profiles_label_model_input">Model Name</string>
<!-- Plugins Screen --> <!-- Plugins Screen -->
<string name="plugins_empty_title">No plugins found</string> <string name="plugins_empty_title">No plugins found</string>