diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt index 5cde3e2ace..f8f3727e9c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SMPServersView.kt @@ -30,12 +30,17 @@ fun SMPServersView(m: ChatModel) { } val testing = rememberSaveable { mutableStateOf(false) } val serversUnchanged = remember { derivedStateOf { servers == m.userSMPServers.value || testing.value } } + val allServersDisabled = remember { derivedStateOf { servers.all { !it.enabled } } } val saveDisabled = remember { derivedStateOf { - servers.isEmpty() || servers == m.userSMPServers.value || testing.value || !servers.all { srv -> + servers.isEmpty() || + servers == m.userSMPServers.value || + testing.value || + !servers.all { srv -> val address = parseServerAddress(srv.server) address != null && uniqueAddress(srv, address, servers) - } + } || + allServersDisabled.value } } @@ -66,10 +71,11 @@ fun SMPServersView(m: ChatModel) { val scope = rememberCoroutineScope() SMPServersLayout( - testing.value, - servers, - serversUnchanged.value, - saveDisabled.value, + testing = testing.value, + servers = servers, + serversUnchanged = serversUnchanged.value, + saveDisabled = saveDisabled.value, + allServersDisabled = allServersDisabled.value, addServer = { AlertManager.shared.showAlertDialogButtonsColumn( title = generalGetString(R.string.smp_servers_add), @@ -149,6 +155,7 @@ private fun SMPServersLayout( servers: List, serversUnchanged: Boolean, saveDisabled: Boolean, + allServersDisabled: Boolean, addServer: () -> Unit, testServers: () -> Unit, resetServers: () -> Unit, @@ -185,8 +192,9 @@ private fun SMPServersLayout( Text(stringResource(R.string.reset_verb), color = if (!serversUnchanged) MaterialTheme.colors.onBackground else HighOrLowlight) } SectionDivider() - SectionItemView(testServers, disabled = testing) { - Text(stringResource(R.string.smp_servers_test_servers), color = if (!testing) MaterialTheme.colors.onBackground else HighOrLowlight) + val testServersDisabled = testing || allServersDisabled + SectionItemView(testServers, disabled = testServersDisabled) { + Text(stringResource(R.string.smp_servers_test_servers), color = if (!testServersDisabled) MaterialTheme.colors.onBackground else HighOrLowlight) } SectionDivider() SectionItemView(saveSMPServers, disabled = saveDisabled) { diff --git a/apps/ios/Shared/Views/UserSettings/SMPServersView.swift b/apps/ios/Shared/Views/UserSettings/SMPServersView.swift index 6f4755d136..8b03bf415c 100644 --- a/apps/ios/Shared/Views/UserSettings/SMPServersView.swift +++ b/apps/ios/Shared/Views/UserSettings/SMPServersView.swift @@ -63,7 +63,7 @@ struct SMPServersView: View { Button("Reset") { servers = m.userSMPServers ?? [] } .disabled(servers == m.userSMPServers || testing) Button("Test servers", action: testServers) - .disabled(testing) + .disabled(testing || allServersDisabled) Button("Save servers", action: saveSMPServers) .disabled(saveDisabled) howToButton() @@ -101,12 +101,20 @@ struct SMPServersView: View { } private var saveDisabled: Bool { - servers.count == 0 || servers == m.userSMPServers || testing || !servers.allSatisfy { srv in + servers.isEmpty || + servers == m.userSMPServers || + testing || + !servers.allSatisfy { srv in if let address = parseServerAddress(srv.server) { return uniqueAddress(srv, address) } return false - } + } || + allServersDisabled + } + + private var allServersDisabled: Bool { + servers.allSatisfy { !$0.enabled } } private func smpServerView(_ server: Binding) -> some View {