Improved account screen implementation

This commit is contained in:
Juha Heinanen
2025-06-11 15:36:23 +03:00
parent f666599397
commit 6f1b1b2ac4
@@ -198,49 +198,27 @@ private val alertTitle = mutableStateOf("")
private val alertMessage = mutableStateOf("")
private val showAlert = mutableStateOf(false)
private var oldNickname = ""
private var newNickname = ""
private var oldDisplayname = ""
private var newDisplayname = ""
private var oldAuthUser = ""
private var newAuthUser = ""
private var oldAuthPass = ""
private var newAuthPass = ""
private val oldOutbound1 = mutableStateOf("")
private val oldOutbound2 = mutableStateOf("")
private var newOutbound1 = ""
private var newOutbound2 = ""
private var oldRegister = false
private var newRegister = false
private var oldRegInt = ""
private var newRegInt = ""
private var oldMediaEnc = ""
private var newMediaEnc = ""
private var oldMediaNat = ""
private var newMediaNat = ""
private var oldStunServer = ""
private var newStunServer = ""
private var oldStunUser = ""
private var newStunUser = ""
private var oldStunPass = ""
private var newStunPass = ""
private var oldRtcpMux = false
private var newRtcpMux = false
private var old100Rel = false
private var new100Rel = false
private var oldDtmfMode = 0
private var newDtmfMode = 0
private var oldAnswerMode = 0
private var newAnswerMode = 0
private var oldAutoRedirect = false
private var newAutoRedirect = false
private var oldVmUri = ""
private var newVmUri = ""
private var oldCountryCode = ""
private var newCountryCode = ""
private var oldTelProvider = ""
private var newTelProvider = ""
private var oldDefaultAccount = false
private var newDefaultAccount = false
private var newNumericKeypad = false
@@ -256,138 +234,11 @@ private fun AccountContent(
val acc = ua.account
val aor = acc.aor
var mediaNatState by remember { mutableStateOf(oldMediaNat) }
var mediaNatState by remember { mutableStateOf(acc.mediaNat) }
val showStun by remember { derivedStateOf { mediaNatState != "" } }
LaunchedEffect(acc) {
if (acc.outbound.isNotEmpty()) {
oldOutbound1.value = acc.outbound[0]
newOutbound1 = oldOutbound1.value
if (acc.outbound.size > 1) {
oldOutbound2.value = acc.outbound[1]
newOutbound2 = oldOutbound2.value
} else {
oldOutbound2.value = ""
newOutbound2 = ""
}
} else {
oldOutbound1.value = ""
newOutbound1 = ""
oldOutbound2.value = ""
newOutbound2 = ""
}
oldMediaNat = acc.mediaNat
newMediaNat = oldMediaNat
mediaNatState = oldMediaNat
}
if (showAlert.value) {
AlertDialog(
showDialog = showAlert,
title = alertTitle.value,
message = alertMessage.value,
positiveButtonText = stringResource(R.string.ok),
)
}
oldNickname = acc.nickName.value
newNickname = oldNickname
oldDisplayname = acc.displayName
newDisplayname = oldDisplayname
oldAuthUser = acc.authUser
newAuthUser = oldAuthUser
if (BaresipService.aorPasswords[aor] == null && acc.authPass != NO_AUTH_PASS) {
oldAuthPass = acc.authPass
newAuthPass = oldAuthPass
}
else {
oldAuthPass = ""
newAuthPass = ""
}
oldRegister = acc.regint > 0
newRegister = oldRegister
oldRegInt = acc.configuredRegInt.toString()
newRegInt = oldRegInt
oldMediaEnc = acc.mediaEnc
newMediaEnc = oldMediaEnc
oldStunServer = acc.stunServer
newStunServer = oldStunServer
oldStunUser = acc.stunUser
newStunUser = oldStunUser
oldStunPass = acc.stunPass
newStunPass = oldStunPass
oldRtcpMux = acc.rtcpMux
newRtcpMux = oldRtcpMux
old100Rel = acc.rel100Mode == Api.REL100_ENABLED
new100Rel = old100Rel
oldDtmfMode = acc.dtmfMode
newDtmfMode = oldDtmfMode
oldAnswerMode = acc.answerMode
newAnswerMode = oldAnswerMode
oldAutoRedirect = acc.autoRedirect
newAutoRedirect = oldAutoRedirect
oldVmUri = acc.vmUri
newVmUri = oldVmUri
oldCountryCode = acc.countryCode
newCountryCode = oldCountryCode
oldTelProvider = acc.telProvider
newTelProvider = oldTelProvider
newNumericKeypad = acc.numericKeypad
oldDefaultAccount = UserAgent.findAorIndex(aor)!! == 0
newDefaultAccount = oldDefaultAccount
keyboardController = LocalSoftwareKeyboardController.current
val scrollState = rememberScrollState()
Column(
modifier = Modifier
.fillMaxWidth()
.padding(contentPadding)
.padding(start = 16.dp, end = 4.dp, top = 8.dp, bottom = 16.dp)
.verticalScrollbar(scrollState)
.verticalScroll(state = scrollState),
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
AoR(acc)
Nickname()
DisplayName()
AuthUser()
AuthPass()
if (showPasswordDialog.value)
AskPassword(ctx, navController, ua)
Outbound()
Register()
RegInt()
AudioCodecs(navController, aor)
MediaEnc()
MediaNat(
currentMediaNat = mediaNatState,
onMediaNatSelected = { selectedMediaNat ->
mediaNatState = selectedMediaNat
newMediaNat = selectedMediaNat
}
)
if (showStun) {
StunServer()
StunUser()
StunPass()
}
RtcpMux()
Rel100()
Dtmf()
Answer()
Redirect()
Voicemail()
CountryCode()
TelProvider()
NumericKeypad(acc)
DefaultAccount()
}
}
@Composable
private fun AoR(acc: Account) {
@Composable
fun AoR() {
Row(
Modifier
.fillMaxWidth()
@@ -410,10 +261,10 @@ private fun AoR(acc: Account) {
}
)
}
}
}
@Composable
private fun Nickname() {
@Composable
fun Nickname() {
Row(
Modifier
.fillMaxWidth()
@@ -422,7 +273,8 @@ private fun Nickname() {
horizontalArrangement = Arrangement.Start
) {
val ctx = LocalContext.current
var nickName by remember { mutableStateOf(oldNickname) }
var nickName by remember { mutableStateOf(acc.nickName.value) }
newNickname = nickName
OutlinedTextField(
value = nickName,
placeholder = { Text(stringResource(R.string.nickname)) },
@@ -445,10 +297,10 @@ private fun Nickname() {
keyboardType = KeyboardType.Text),
)
}
}
}
@Composable
private fun DisplayName() {
@Composable
fun DisplayName() {
val ctx = LocalContext.current
Row(
Modifier
@@ -457,7 +309,8 @@ private fun DisplayName() {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
var displayName by remember { mutableStateOf(oldDisplayname) }
var displayName by remember { mutableStateOf(acc.displayName) }
newDisplayname = displayName
OutlinedTextField(
value = displayName,
placeholder = { Text(stringResource(R.string.display_name)) },
@@ -480,10 +333,10 @@ private fun DisplayName() {
keyboardType = KeyboardType.Text),
)
}
}
}
@Composable
private fun AuthUser() {
@Composable
fun AuthUser() {
val ctx = LocalContext.current
Row(
Modifier
@@ -492,7 +345,8 @@ private fun AuthUser() {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
var authUser by remember { mutableStateOf(oldAuthUser) }
var authUser by remember { mutableStateOf(acc.authUser) }
newAuthUser = authUser
OutlinedTextField(
value = authUser,
placeholder = { Text(stringResource(R.string.authentication_username)) },
@@ -513,10 +367,10 @@ private fun AuthUser() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun AuthPass() {
@Composable
fun AuthPass() {
val ctx = LocalContext.current
val showPassword = remember { mutableStateOf(false) }
Row(
@@ -526,7 +380,13 @@ private fun AuthPass() {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
var authPass by remember { mutableStateOf(oldAuthPass) }
var authPass by remember { mutableStateOf(
if (BaresipService.aorPasswords[acc.aor] == null && acc.authPass != NO_AUTH_PASS)
acc.authPass
else
""
) }
newAuthPass = authPass
OutlinedTextField(
value = authPass,
placeholder = { Text(stringResource(R.string.authentication_password)) },
@@ -567,10 +427,10 @@ private fun AuthPass() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun AskPassword(ctx: Context, navController: NavController, ua: UserAgent) {
@Composable
fun AskPassword(ctx: Context, navController: NavController, ua: UserAgent) {
CustomElements.PasswordDialog(
ctx = ctx,
showPasswordDialog = showPasswordDialog,
@@ -591,10 +451,10 @@ private fun AskPassword(ctx: Context, navController: NavController, ua: UserAgen
navController.popBackStack()
}
)
}
}
@Composable
private fun Outbound() {
@Composable
fun Outbound() {
val ctx = LocalContext.current
Text(text = stringResource(R.string.outbound_proxies),
color = LocalCustomColors.current.itemText,
@@ -614,13 +474,16 @@ private fun Outbound() {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
var outbound1 by remember { mutableStateOf(oldOutbound1) }
var outbound1 by remember { mutableStateOf(
if (acc.outbound.isNotEmpty()) acc.outbound[0] else "")
}
newOutbound1 = outbound1
OutlinedTextField(
value = outbound1.value,
value = outbound1,
placeholder = { Text(stringResource(R.string.sip_uri_of_proxy_server)) },
onValueChange = {
outbound1.value = it
newOutbound1 = outbound1.value
outbound1= it
newOutbound1 = outbound1
},
modifier = Modifier.fillMaxWidth(),
singleLine = true,
@@ -637,13 +500,16 @@ private fun Outbound() {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
var outbound2 by remember { mutableStateOf(oldOutbound2) }
var outbound2 by remember { mutableStateOf(
if (acc.outbound.size > 1) acc.outbound[1] else "")
}
newOutbound2 = outbound2
OutlinedTextField(
value = outbound2.value,
value = outbound2,
placeholder = { Text(stringResource(R.string.sip_uri_of_another_proxy_server)) },
onValueChange = {
outbound2.value = it
newOutbound2 = outbound2.value
outbound2 = it
newOutbound2 = outbound2
},
modifier = Modifier.fillMaxWidth(),
singleLine = true,
@@ -653,10 +519,10 @@ private fun Outbound() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun Register() {
@Composable
fun Register() {
val ctx = LocalContext.current
Row(
Modifier
@@ -675,7 +541,8 @@ private fun Register() {
},
fontSize = 18.sp,
color = LocalCustomColors.current.itemText)
var register by remember { mutableStateOf(oldRegister) }
var register by remember { mutableStateOf(acc.regint > 0) }
newRegister = register
Switch(
checked = register,
onCheckedChange = {
@@ -684,10 +551,10 @@ private fun Register() {
}
)
}
}
}
@Composable
private fun RegInt() {
@Composable
fun RegInt() {
val ctx = LocalContext.current
Row(
Modifier
@@ -696,7 +563,8 @@ private fun RegInt() {
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.Start
) {
var regInt by remember { mutableStateOf(oldRegInt) }
var regInt by remember { mutableStateOf(acc.configuredRegInt.toString()) }
newRegInt = regInt
OutlinedTextField(
value = regInt,
placeholder = { Text(stringResource(R.string.reg_int)) },
@@ -717,10 +585,10 @@ private fun RegInt() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
)
}
}
}
@Composable
private fun AudioCodecs(navController: NavController, aor: String) {
@Composable
fun AudioCodecs(navController: NavController, aor: String) {
Row(
Modifier
.fillMaxWidth()
@@ -741,10 +609,10 @@ private fun AudioCodecs(navController: NavController, aor: String) {
fontWeight = FontWeight. Bold
)
}
}
}
@Composable
private fun MediaEnc() {
@Composable
fun MediaEnc() {
val ctx = LocalContext.current
Row(
Modifier
@@ -764,7 +632,8 @@ private fun MediaEnc() {
color = LocalCustomColors.current.itemText,
fontSize = 18.sp)
val isDropDownExpanded = remember { mutableStateOf(false) }
val mediaEnc = remember { mutableStateOf(oldMediaEnc) }
var mediaEnc by remember { mutableStateOf(acc.mediaEnc) }
newMediaEnc = mediaEnc
Box {
Row(
horizontalArrangement = Arrangement.Center,
@@ -773,7 +642,7 @@ private fun MediaEnc() {
isDropDownExpanded.value = true
}
) {
Text(text = mediaEncMap[mediaEnc.value]!!,
Text(text = mediaEncMap[mediaEnc]!!,
color = LocalCustomColors.current.itemText)
CustomElements.DrawDrawable(R.drawable.arrow_drop_down,
tint = LocalCustomColors.current.itemText)
@@ -791,8 +660,8 @@ private fun MediaEnc() {
},
onClick = {
isDropDownExpanded.value = false
mediaEnc.value = it.key
newMediaEnc = mediaEnc.value
mediaEnc = it.key
newMediaEnc = mediaEnc
})
if (index < 4)
HorizontalDivider(
@@ -804,10 +673,10 @@ private fun MediaEnc() {
}
}
}
}
}
@Composable
private fun MediaNat(currentMediaNat: String, onMediaNatSelected: (String) -> Unit) {
@Composable
fun MediaNat(currentMediaNat: String, onMediaNatSelected: (String) -> Unit) {
val ctx = LocalContext.current
Row(
Modifier
@@ -865,10 +734,10 @@ private fun MediaNat(currentMediaNat: String, onMediaNatSelected: (String) -> Un
}
}
}
}
}
@Composable
private fun StunServer() {
@Composable
fun StunServer() {
Row(
Modifier
.fillMaxWidth()
@@ -877,7 +746,8 @@ private fun StunServer() {
horizontalArrangement = Arrangement.Start
) {
val ctx = LocalContext.current
var stunServer by remember { mutableStateOf(oldStunServer) }
var stunServer by remember { mutableStateOf(acc.stunServer) }
newStunServer = stunServer
OutlinedTextField(
value = stunServer,
placeholder = { Text(stringResource(R.string.stun_server)) },
@@ -898,10 +768,10 @@ private fun StunServer() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun StunUser() {
@Composable
fun StunUser() {
Row(
Modifier
.fillMaxWidth()
@@ -910,7 +780,8 @@ private fun StunUser() {
horizontalArrangement = Arrangement.Start
) {
val ctx = LocalContext.current
var stunUser by remember { mutableStateOf(oldStunUser) }
var stunUser by remember { mutableStateOf(acc.stunUser) }
newStunUser = stunUser
OutlinedTextField(
value = stunUser,
placeholder = { Text(stringResource(R.string.stun_username)) },
@@ -931,10 +802,10 @@ private fun StunUser() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun StunPass() {
@Composable
fun StunPass() {
Row(
Modifier
.fillMaxWidth()
@@ -944,7 +815,8 @@ private fun StunPass() {
) {
val ctx = LocalContext.current
val showPassword = remember { mutableStateOf(false) }
var stunPass by remember { mutableStateOf(oldStunPass) }
var stunPass by remember { mutableStateOf(acc.stunPass) }
newStunPass = stunPass
OutlinedTextField(
value = stunPass,
placeholder = { Text(stringResource(R.string.stun_password)) },
@@ -991,10 +863,10 @@ private fun StunPass() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun RtcpMux() {
@Composable
fun RtcpMux() {
Row(
Modifier
.fillMaxWidth()
@@ -1013,7 +885,8 @@ private fun RtcpMux() {
},
fontSize = 18.sp,
color = LocalCustomColors.current.itemText)
var rtcpMux by remember { mutableStateOf(oldRtcpMux) }
var rtcpMux by remember { mutableStateOf(acc.rtcpMux) }
newRtcpMux = rtcpMux
Switch(
checked = rtcpMux,
onCheckedChange = {
@@ -1022,10 +895,10 @@ private fun RtcpMux() {
}
)
}
}
}
@Composable
private fun Rel100() {
@Composable
fun Rel100() {
Row(
Modifier
.fillMaxWidth()
@@ -1044,7 +917,8 @@ private fun Rel100() {
},
fontSize = 18.sp,
color = LocalCustomColors.current.itemText)
var rel100 by remember { mutableStateOf(old100Rel) }
var rel100 by remember { mutableStateOf(acc.rel100Mode == Api.REL100_ENABLED) }
new100Rel = rel100
Switch(
checked = rel100,
onCheckedChange = {
@@ -1053,10 +927,10 @@ private fun Rel100() {
}
)
}
}
}
@Composable
private fun Dtmf() {
@Composable
fun Dtmf() {
Row(
Modifier
.fillMaxWidth()
@@ -1081,7 +955,8 @@ private fun Dtmf() {
val isDropDownExpanded = remember {
mutableStateOf(false)
}
val dtmfMode = remember { mutableIntStateOf(oldDtmfMode) }
val dtmfMode = remember { mutableIntStateOf(acc.dtmfMode) }
newDtmfMode = dtmfMode.intValue
Box {
Row(
horizontalArrangement = Arrangement.Center,
@@ -1120,10 +995,10 @@ private fun Dtmf() {
}
}
}
}
}
@Composable
private fun Answer() {
@Composable
fun Answer() {
Row(
Modifier
.fillMaxWidth()
@@ -1147,7 +1022,8 @@ private fun Answer() {
val isDropDownExpanded = remember {
mutableStateOf(false)
}
val answerMode = remember { mutableIntStateOf(oldAnswerMode) }
var answerMode by remember { mutableIntStateOf(acc.answerMode) }
newAnswerMode = answerMode
Box {
Row(
horizontalArrangement = Arrangement.Center,
@@ -1156,7 +1032,7 @@ private fun Answer() {
isDropDownExpanded.value = true
}
) {
Text(text = answerModeMap[answerMode.intValue]!!,
Text(text = answerModeMap[answerMode]!!,
color = LocalCustomColors.current.itemText)
CustomElements.DrawDrawable(R.drawable.arrow_drop_down,
tint = LocalCustomColors.current.itemText)
@@ -1171,8 +1047,8 @@ private fun Answer() {
DropdownMenuItem(text = { Text(text = it.value) },
onClick = {
isDropDownExpanded.value = false
answerMode.intValue = it.key
newAnswerMode = answerMode.intValue
answerMode = it.key
newAnswerMode = answerMode
})
if (index < 1)
HorizontalDivider(
@@ -1184,10 +1060,10 @@ private fun Answer() {
}
}
}
}
}
@Composable
private fun Redirect() {
@Composable
fun Redirect() {
Row(
Modifier
.fillMaxWidth()
@@ -1211,7 +1087,8 @@ private fun Redirect() {
val isDropDownExpanded = remember {
mutableStateOf(false)
}
val autoRedirect = remember { mutableStateOf(oldAutoRedirect) }
var autoRedirect by remember { mutableStateOf(acc.autoRedirect) }
newAutoRedirect = autoRedirect
Box {
Row(
horizontalArrangement = Arrangement.Center,
@@ -1220,7 +1097,7 @@ private fun Redirect() {
isDropDownExpanded.value = true
}
) {
Text(text = redirectModeMap[autoRedirect.value]!!,
Text(text = redirectModeMap[autoRedirect]!!,
color = LocalCustomColors.current.itemText)
CustomElements.DrawDrawable(R.drawable.arrow_drop_down,
tint = LocalCustomColors.current.itemText)
@@ -1237,8 +1114,8 @@ private fun Redirect() {
},
onClick = {
isDropDownExpanded.value = false
autoRedirect.value = it.key
newAutoRedirect = autoRedirect.value
autoRedirect = it.key
newAutoRedirect = autoRedirect
})
if (index < 1)
HorizontalDivider(
@@ -1250,10 +1127,10 @@ private fun Redirect() {
}
}
}
}
}
@Composable
private fun Voicemail() {
@Composable
fun Voicemail() {
Row(
Modifier
.fillMaxWidth()
@@ -1262,7 +1139,8 @@ private fun Voicemail() {
horizontalArrangement = Arrangement.Start
) {
val ctx = LocalContext.current
var vmUri by remember { mutableStateOf(oldVmUri) }
var vmUri by remember { mutableStateOf(acc.vmUri) }
newVmUri = vmUri
OutlinedTextField(
value = vmUri,
placeholder = { Text(stringResource(R.string.voicemail_uri)) },
@@ -1283,10 +1161,10 @@ private fun Voicemail() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun CountryCode() {
@Composable
fun CountryCode() {
Row(
Modifier
.fillMaxWidth()
@@ -1295,7 +1173,8 @@ private fun CountryCode() {
horizontalArrangement = Arrangement.Start
) {
val ctx = LocalContext.current
var countryCode by remember { mutableStateOf(oldCountryCode) }
var countryCode by remember { mutableStateOf(acc.countryCode) }
newCountryCode = countryCode
OutlinedTextField(
value = countryCode,
placeholder = { Text(stringResource(R.string.country_code)) },
@@ -1316,10 +1195,10 @@ private fun CountryCode() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun TelProvider() {
@Composable
fun TelProvider() {
Row(
Modifier
.fillMaxWidth()
@@ -1328,7 +1207,8 @@ private fun TelProvider() {
horizontalArrangement = Arrangement.Start
) {
val ctx = LocalContext.current
var telProvider by remember { mutableStateOf(oldTelProvider) }
var telProvider by remember { mutableStateOf(acc.telProvider) }
newTelProvider = telProvider
OutlinedTextField(
value = telProvider,
placeholder = { Text(stringResource(R.string.telephony_provider)) },
@@ -1349,10 +1229,10 @@ private fun TelProvider() {
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text)
)
}
}
}
@Composable
private fun NumericKeypad(acc: Account) {
@Composable
fun NumericKeypad() {
Row(
Modifier
.fillMaxWidth()
@@ -1372,6 +1252,7 @@ private fun NumericKeypad(acc: Account) {
fontSize = 18.sp,
color = LocalCustomColors.current.itemText)
var numericKeypad by remember { mutableStateOf(acc.numericKeypad) }
newNumericKeypad = numericKeypad
Switch(
checked = numericKeypad,
onCheckedChange = {
@@ -1380,10 +1261,10 @@ private fun NumericKeypad(acc: Account) {
}
)
}
}
}
@Composable
private fun DefaultAccount() {
@Composable
fun DefaultAccount() {
Row(
Modifier
.fillMaxWidth()
@@ -1402,7 +1283,8 @@ private fun DefaultAccount() {
},
fontSize = 18.sp,
color = LocalCustomColors.current.itemText)
var defaultAccount by remember { mutableStateOf(oldDefaultAccount) }
var defaultAccount by remember { mutableStateOf(UserAgent.findAorIndex(acc.aor)!! == 0) }
newDefaultAccount = defaultAccount
Switch(
checked = defaultAccount,
onCheckedChange = {
@@ -1411,6 +1293,65 @@ private fun DefaultAccount() {
}
)
}
}
if (showAlert.value) {
AlertDialog(
showDialog = showAlert,
title = alertTitle.value,
message = alertMessage.value,
positiveButtonText = stringResource(R.string.ok),
)
}
keyboardController = LocalSoftwareKeyboardController.current
val scrollState = rememberScrollState()
Column(
modifier = Modifier
.fillMaxWidth()
.padding(contentPadding)
.padding(start = 16.dp, end = 4.dp, top = 8.dp, bottom = 16.dp)
.verticalScrollbar(scrollState)
.verticalScroll(state = scrollState),
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
AoR()
Nickname()
DisplayName()
AuthUser()
AuthPass()
if (showPasswordDialog.value)
AskPassword(ctx, navController, ua)
Outbound()
Register()
RegInt()
AudioCodecs(navController, aor)
MediaEnc()
MediaNat(
currentMediaNat = mediaNatState,
onMediaNatSelected = { selectedMediaNat ->
mediaNatState = selectedMediaNat
newMediaNat = selectedMediaNat
}
)
if (showStun) {
StunServer()
StunUser()
StunPass()
}
RtcpMux()
Rel100()
Dtmf()
Answer()
Redirect()
Voicemail()
CountryCode()
TelProvider()
NumericKeypad()
DefaultAccount()
}
}
private fun checkOnClick(ctx: Context, ua: UserAgent): Boolean {
@@ -1418,7 +1359,7 @@ private fun checkOnClick(ctx: Context, ua: UserAgent): Boolean {
val acc = ua.account
val nn = newNickname.trim()
if (nn != oldNickname) {
if (nn != acc.nickName.value) {
if (Account.checkDisplayName(nn)) {
if (nn == "" || Account.uniqueNickName(nn)) {
acc.nickName.value = nn
@@ -1458,7 +1399,7 @@ private fun checkOnClick(ctx: Context, ua: UserAgent): Boolean {
}
val au = newAuthUser.trim()
if (au != oldAuthUser) {
if (au != acc.authUser) {
if (Account.checkAuthUser(au)) {
if (Api.account_set_auth_user(acc.accp, au) == 0) {
acc.authUser = Api.account_auth_user(acc.accp)
@@ -1480,7 +1421,7 @@ private fun checkOnClick(ctx: Context, ua: UserAgent): Boolean {
val ap = newAuthPass.trim()
if (ap != "") {
if (ap != oldAuthPass) {
if (ap != acc.authPass) {
if (Account.checkAuthPass(ap)) {
if (Api.account_set_auth_pass(acc.accp, ap) == 0) {
acc.authPass = Api.account_auth_pass(acc.accp)
@@ -1575,28 +1516,28 @@ private fun checkOnClick(ctx: Context, ua: UserAgent): Boolean {
Log.d(TAG, "New regint is ${acc.regint}")
reRegister = true
}
} else {
if (regInt != acc.configuredRegInt) {
acc.configuredRegInt = regInt
}
else {
if (regInt != acc.configuredRegInt)
acc.configuredRegInt = regInt
}
if (newMediaEnc != acc.mediaEnc) {
if (Api.account_set_mediaenc(acc.accp, newMediaEnc) == 0) {
acc.mediaEnc = Api.account_mediaenc(acc.accp)
Log.d(TAG, "New mediaenc is ${acc.mediaEnc}")
} else {
Log.e(TAG, "Setting of mediaenc $newMediaEnc failed")
}
else
Log.e(TAG, "Setting of mediaenc $newMediaEnc failed")
}
if (newMediaNat != acc.mediaNat) {
if (Api.account_set_medianat(acc.accp, newMediaNat) == 0) {
acc.mediaNat = Api.account_medianat(acc.accp)
Log.d(TAG, "New medianat is ${acc.mediaNat}")
} else {
Log.e(TAG, "Setting of medianat $newMediaNat failed")
}
else
Log.e(TAG, "Setting of medianat $newMediaNat failed")
}
newStunServer = newStunServer.trim()