Use AccountViewModel to store account modifications before they are saved

This commit is contained in:
Juha Heinanen
2025-10-16 18:11:31 +03:00
parent eb1952a42e
commit 0f275d54b2
4 changed files with 221 additions and 327 deletions

View File

@ -101,4 +101,5 @@ dependencies {
implementation(libs.androidx.lifecycle.viewmodel.ktx)
implementation(libs.androidx.compose.material.icons.core)
implementation(libs.androidx.compose.material.icons.extended)
implementation(libs.androidx.compose.foundation.layout)
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,63 @@
package com.tutpro.baresip
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.flow.MutableStateFlow
class AccountViewModel: ViewModel() {
val nickName = MutableStateFlow("")
val displayName = MutableStateFlow("")
val authUser = MutableStateFlow("")
val authPass = MutableStateFlow("")
val outbound1 = MutableStateFlow("")
val outbound2 = MutableStateFlow("")
val register = MutableStateFlow(false)
val regInt = MutableStateFlow("")
val mediaEnc = MutableStateFlow("")
val mediaNat = MutableStateFlow("")
val stunServer = MutableStateFlow("")
val stunUser = MutableStateFlow("")
val stunPass = MutableStateFlow("")
val rtcpMux = MutableStateFlow(false)
val rel100 = MutableStateFlow(false)
val dtmfMode = MutableStateFlow(0)
val answerMode = MutableStateFlow(0)
val autoRedirect = MutableStateFlow(false)
val vmUri = MutableStateFlow("")
val countryCode = MutableStateFlow("")
val telProvider = MutableStateFlow("")
val defaultAccount = MutableStateFlow(false)
val numericKeypad = MutableStateFlow(false)
private var isLoaded = false
fun loadAccount(acc: Account) {
if (isLoaded) return else isLoaded = true
nickName.value = acc.nickName
displayName.value = acc.displayName
authUser.value = acc.authUser
authPass.value = if (BaresipService.aorPasswords[acc.aor] == null && acc.authPass != NO_AUTH_PASS)
acc.authPass
else
""
outbound1.value = if (acc.outbound.isNotEmpty()) acc.outbound[0] else ""
outbound2.value = if (acc.outbound.size > 1) acc.outbound[1] else ""
register.value = acc.regint > 0
regInt.value = acc.configuredRegInt.toString()
mediaEnc.value = acc.mediaEnc
mediaNat.value = acc.mediaNat
stunServer.value = acc.stunServer
stunUser.value = acc.stunUser
stunPass.value = acc.stunPass
rtcpMux.value = acc.rtcpMux
rel100.value = acc.rel100Mode == Api.REL100_ENABLED
dtmfMode.value = acc.dtmfMode
answerMode.value = acc.answerMode
autoRedirect.value = acc.autoRedirect
vmUri.value = acc.vmUri
countryCode.value = acc.countryCode
telProvider.value = acc.telProvider
numericKeypad.value = acc.numericKeypad
defaultAccount.value = UserAgent.findAorIndex(acc.aor)!! == 0
}
}

View File

@ -22,6 +22,7 @@ runtimeLivedata = "1.9.3"
composeMaterial3 = "1.4.0"
navigationRuntimeAndroid = "2.9.5"
composeMaterialIcons = "1.7.8"
foundationLayout = "1.9.3"
[libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" }
@ -49,6 +50,7 @@ androidx-compose-material3 = { group = "androidx.compose.material3", name = "mat
androidx-navigation-runtime-android = { group = "androidx.navigation", name = "navigation-runtime-android", version.ref = "navigationRuntimeAndroid" }
androidx-compose-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core", version.ref = "composeMaterialIcons" }
androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "composeMaterialIcons" }
androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "foundationLayout" }
[plugins]
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }