Select any joined channel when opening an Android server link

This commit is contained in:
evgeny committed 2026-10-28 11:06:24 +01:00
1 parent f2d6561509
commit 3daacc07b7
3 files changed
+35 -2

No files matched your search

@@ -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))
}
},
@@ -600,4 +600,7 @@
<string name="media_audio_failed">Не удалось использовать выбранное аудиоустройство. Проверьте текущие микрофон и выход.</string>
<string name="settings_update_failed">Не удалось обновить настройки. Повторите попытку.</string>
<string name="database_reset_failed">Не удалось завершить очистку базы. Повторите попытку.</string>
<string name="server_add_channel">Добавить сервер в канал</string>
<string name="server_add_no_channels">Создайте канал перед добавлением сервера.</string>
<string name="server_add_bad_key">Ключ доступа к серверу неверен или был изменён.</string>
</resources>
@@ -599,4 +599,7 @@
<string name="media_audio_failed">Could not use the selected audio device. Check the current microphone and output.</string>
<string name="settings_update_failed">Could not update the settings. Try again.</string>
<string name="database_reset_failed">Could not finish clearing the database. Try again.</string>
<string name="server_add_channel">Add server to channel</string>
<string name="server_add_no_channels">Create a channel before adding a server.</string>
<string name="server_add_bad_key">The server access key is invalid or has changed.</string>
</resources>