diff --git a/tools/chatgui-android/app/src/main/java/com/utun/chat/MainActivity.kt b/tools/chatgui-android/app/src/main/java/com/utun/chat/MainActivity.kt
index 94b1f78f..8c3749f4 100644
--- a/tools/chatgui-android/app/src/main/java/com/utun/chat/MainActivity.kt
+++ b/tools/chatgui-android/app/src/main/java/com/utun/chat/MainActivity.kt
@@ -42,6 +42,8 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.heightIn
+import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.material3.SnackbarHostState
@@ -271,6 +273,8 @@ class MainActivity : AppCompatActivity() {
}
val pmInvite by vm.pmInvite.collectAsState()
val linkJoin by vm.linkJoin.collectAsState()
+ val serverLink by vm.serverLink.collectAsState()
+ val serverChannels by vm.channels.collectAsState()
val joinedChannel by vm.joinedChannel.collectAsState()
LaunchedEffect(joinedChannel) {
joinedChannel?.let { channel ->
@@ -598,6 +602,26 @@ class MainActivity : AppCompatActivity() {
} }
)
}
+ serverLink?.let { link ->
+ val channels = serverChannels.filter { NativeLib.isChannelMember(it.id, NativeLib.getMyNodeId()) }
+ AlertDialog(
+ onDismissRequest = vm::dismissServerLink,
+ title = { Text(stringResource(R.string.server_add_channel)) },
+ text = {
+ if (channels.isEmpty()) Text(stringResource(R.string.server_add_no_channels))
+ else LazyColumn(Modifier.heightIn(max = 320.dp)) {
+ items(channels.size) { index ->
+ val channel = channels[index]
+ TextButton(onClick = { vm.openInviteLink(link, channel.id.toLong()) }) {
+ Text(channel.name + " (" + channel.id + ")")
+ }
+ }
+ }
+ },
+ confirmButton = {},
+ dismissButton = { TextButton(onClick = vm::dismissServerLink) { Text(stringResource(R.string.cancel)) } }
+ )
+ }
linkJoin?.let { state ->
AlertDialog(
onDismissRequest = vm::dismissLinkJoin,
@@ -609,14 +633,17 @@ class MainActivity : AppCompatActivity() {
LinearProgressIndicator(Modifier.fillMaxWidth())
Text(stringResource(R.string.connecting_peer))
} else {
- Text(if (state.channelId == 0L) stringResource(R.string.invalid_invite_link)
+ Text(if (state.result == -10) stringResource(R.string.server_add_bad_key)
+ else if (state.channelId == 0L) stringResource(R.string.invalid_invite_link)
else stringResource(R.string.invite_join_failed, state.result ?: -1),
color = MaterialTheme.colorScheme.error)
}
}
},
confirmButton = {
- if (!state.pending && state.channelId != 0L) TextButton(onClick = { vm.openInviteLink(state.link) }) {
+ if (!state.pending && state.channelId != 0L) TextButton(onClick = {
+ vm.openInviteLink(state.link, if (state.serverAddition) state.channelId else 0)
+ }) {
Text(stringResource(R.string.retry))
}
},
diff --git a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml
index 9aadb56f..e2a3b0cc 100644
--- a/tools/chatgui-android/app/src/main/res/values-ru/strings.xml
+++ b/tools/chatgui-android/app/src/main/res/values-ru/strings.xml
@@ -600,4 +600,7 @@
Не удалось использовать выбранное аудиоустройство. Проверьте текущие микрофон и выход.
Не удалось обновить настройки. Повторите попытку.
Не удалось завершить очистку базы. Повторите попытку.
+ Добавить сервер в канал
+ Создайте канал перед добавлением сервера.
+ Ключ доступа к серверу неверен или был изменён.
diff --git a/tools/chatgui-android/app/src/main/res/values/strings.xml b/tools/chatgui-android/app/src/main/res/values/strings.xml
index e1e53d17..61953305 100644
--- a/tools/chatgui-android/app/src/main/res/values/strings.xml
+++ b/tools/chatgui-android/app/src/main/res/values/strings.xml
@@ -599,4 +599,7 @@
Could not use the selected audio device. Check the current microphone and output.
Could not update the settings. Try again.
Could not finish clearing the database. Try again.
+ Add server to channel
+ Create a channel before adding a server.
+ The server access key is invalid or has changed.