From 76b66b0f936c7f74537816f08a73d6945978e226 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sat, 18 Jun 2022 18:30:58 +0300 Subject: [PATCH] Added possibility to nickname accounts --- .../main/kotlin/com/tutpro/baresip/Account.kt | 26 +++++++++------ .../com/tutpro/baresip/AccountActivity.kt | 32 ++++++++++++++++++- .../com/tutpro/baresip/AccountsActivity.kt | 2 +- .../com/tutpro/baresip/CallsActivity.kt | 6 +++- .../kotlin/com/tutpro/baresip/ChatActivity.kt | 6 +++- .../com/tutpro/baresip/ChatsActivity.kt | 6 +++- .../com/tutpro/baresip/UaSpinnerAdapter.kt | 5 ++- app/src/main/res/layout/activity_account.xml | 18 +++++++++++ app/src/main/res/values-fi/strings.xml | 6 ++++ app/src/main/res/values/strings.xml | 6 ++++ 10 files changed, 98 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Account.kt b/app/src/main/kotlin/com/tutpro/baresip/Account.kt index c3aa8221..a98f5908 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Account.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Account.kt @@ -8,6 +8,7 @@ import java.net.URLDecoder class Account(val accp: Long) { + var nickName = "" var displayName = Api.account_display_name(accp) val aor = Api.account_aor(accp) var luri = Api.account_luri(accp) @@ -59,16 +60,13 @@ class Account(val accp: Long) { } val extra = Api.account_extra(accp) + if (Utils.paramExists(extra, "nickname")) + nickName = Utils.paramValue(extra,"nickname") callHistory = Utils.paramValue(extra,"call_history") == "" - countryCode = if (Utils.paramExists(extra, "country_code")) - Utils.paramValue(extra,"country_code") - else - "" - telProvider = if (Utils.paramExists(extra, "tel_provider")) - URLDecoder.decode(Utils.paramValue(extra,"tel_provider"), "UTF-8") - else - Utils.aorDomain(aor) - + if (Utils.paramExists(extra, "country_code")) + countryCode = Utils.paramValue(extra,"country_code") + if (Utils.paramExists(extra, "tel_provider")) + telProvider = URLDecoder.decode(Utils.paramValue(extra,"tel_provider"), "UTF-8") } fun print() : String { @@ -128,6 +126,9 @@ class Account(val accp: Long) { var extra = "" + if (nickName != "") + extra += ";nickname=$nickName" + if (!callHistory) extra += ";call_history=no" @@ -240,5 +241,12 @@ class Account(val accp: Long) { return (ap.isNotEmpty()) && (ap.length <= 64) && Regex("^[ -~]*\$").matches(ap) && !ap.contains('"') } + + fun uniqueNickName(nickName: String): Boolean { + for (ua in BaresipService.uas) + if (ua.account.nickName == nickName) + return false + return true + } } } diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt index feb9bc81..d0d5318d 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountActivity.kt @@ -27,6 +27,7 @@ class AccountActivity : AppCompatActivity() { private lateinit var acc: Account private lateinit var ua: UserAgent private lateinit var uri: TextView + private lateinit var nickName: EditText private lateinit var displayName: EditText private lateinit var aor: String private lateinit var authUser: EditText @@ -70,6 +71,7 @@ class AccountActivity : AppCompatActivity() { supportActionBar?.setDisplayHomeAsUpEnabled(true) uri = binding.Uri + nickName = binding.NickName displayName = binding.DisplayName authUser = binding.AuthUser authPass = binding.AuthPass @@ -99,7 +101,10 @@ class AccountActivity : AppCompatActivity() { if (intent.getBooleanExtra("new", false)) initAccountFromConfig(this) - title = aor.split(":")[1] + title = if (acc.nickName != "") + acc.nickName + else + aor.split(":")[1] initLayoutFromAccount(acc) @@ -202,6 +207,7 @@ class AccountActivity : AppCompatActivity() { private fun initLayoutFromAccount(acc: Account) { uri.text = acc.luri + nickName.setText(acc.nickName) displayName.setText(acc.displayName) authUser.setText(acc.authUser) @@ -346,6 +352,26 @@ class AccountActivity : AppCompatActivity() { when (item.itemId) { R.id.checkIcon -> { + + val nn = nickName.text.toString().trim() + if (nn != acc.nickName) { + if (Account.checkDisplayName(nn)) { + if (nn == "" || Account.uniqueNickName(nn)) { + acc.nickName = nn + Log.d(TAG, "New nickname is ${acc.nickName}") + save = true + } else { + Utils.alertView(this, getString(R.string.notice), + String.format(getString(R.string.non_unique_account_nickname), nn)) + return false + } + } else { + Utils.alertView(this, getString(R.string.notice), + String.format(getString(R.string.invalid_account_nickname), nn)) + return false + } + } + val dn = displayName.text.toString().trim() if (dn != acc.displayName) { if (Account.checkDisplayName(dn)) { @@ -649,6 +675,10 @@ class AccountActivity : AppCompatActivity() { } private fun bindTitles() { + binding.NickNameTitle.setOnClickListener{ + Utils.alertView(this, getString(R.string.nickname), + getString(R.string.account_nickname_help)) + } binding.DisplayNameTitle.setOnClickListener{ Utils.alertView(this, getString(R.string.display_name), getString(R.string.display_name_help)) diff --git a/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt index cacaa4a3..ea980bb9 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/AccountsActivity.kt @@ -171,7 +171,7 @@ class AccountsActivity : AppCompatActivity() { accounts = accounts + a.print() + "\n" } Utils.putFileContents(BaresipService.filesPath + "/accounts", accounts.toByteArray()) - // Log.d(TAG, "Saved accounts '${accounts}' to '${BaresipService.filesPath}/accounts'") + Log.d(TAG, "Saved accounts '${accounts}' to '${BaresipService.filesPath}/accounts'") } fun noAccounts(): Boolean { diff --git a/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt index edd7d256..6454d500 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/CallsActivity.kt @@ -35,7 +35,11 @@ class CallsActivity : AppCompatActivity() { account = ua.account val headerView = binding.account - val headerText = "${getString(R.string.account)} ${aor.split(":")[1]}" + val headerText = getString(R.string.account) + " " + + if (account.nickName != "") + account.nickName + else + aor.split(":")[1] headerView.text = headerText val listView = binding.calls diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt index a5062eaf..c400dae8 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatActivity.kt @@ -71,7 +71,11 @@ class ChatActivity : AppCompatActivity() { title = String.format(getString(R.string.chat_with), chatPeer) val headerView = binding.account - val headerText = "${getString(R.string.account)} ${aor.substringAfter(":")}" + val headerText = getString(R.string.account) + " " + + if (ua.account.nickName != "") + ua.account.nickName + else + aor.split(":")[1] headerView.text = headerText listView = binding.messages diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt index a154c25e..48f9a359 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt @@ -38,7 +38,11 @@ class ChatsActivity: AppCompatActivity() { account = UserAgent.ofAor(aor)!!.account val headerView = binding.account - val headerText = "${getString(R.string.account)} ${aor.split(":")[1]}" + val headerText = getString(R.string.account) + " " + + if (account.nickName != "") + account.nickName + else + aor.split(":")[1] headerView.text = headerText uaMessages = uaMessages(aor) diff --git a/app/src/main/kotlin/com/tutpro/baresip/UaSpinnerAdapter.kt b/app/src/main/kotlin/com/tutpro/baresip/UaSpinnerAdapter.kt index b0101c9a..ff69b0b5 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/UaSpinnerAdapter.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/UaSpinnerAdapter.kt @@ -42,7 +42,10 @@ class UaSpinnerAdapter(cxt: Context, private val uas: ArrayList) : } val ua = uas[position] - viewHolder.textView.text = ua.account.aor.split(":")[1] + viewHolder.textView.text = if (ua.account.nickName != "") + ua.account.nickName + else + ua.account.aor.split(":")[1] viewHolder.textView.textSize = 17f if (BaresipService.uas.size > 1 && ua.calls().isNotEmpty()) viewHolder.textView.setTypeface(null, Typeface.BOLD) diff --git a/app/src/main/res/layout/activity_account.xml b/app/src/main/res/layout/activity_account.xml index 757890e3..ee2a216d 100644 --- a/app/src/main/res/layout/activity_account.xml +++ b/app/src/main/res/layout/activity_account.xml @@ -26,6 +26,24 @@ android:text="" > + + + + + + Tili + Tilin lempinimi + Lempinimi (jos annettu) millä tämä tili identifioidaan + baresip sovelluksessa. + Tilin lempinimi + Virheellinen tilin lempinimi \'%1$s\' + Lempinimi \'%1$s\' on jo olemassa Tilin käyttäjän nimi Tilin käyttäjän nimi Tilin käyttäjän nimi, joka esiintyy diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3b63a8bd..e8570abf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,6 +101,12 @@ Account + Account Nickname + Nickname (if any) used to identify this account within + baresip app. + Nickname of Account + Invalid Account Nickname \'%1$s\' + Nickname \'%1$s\' already exists Display Name Your Name Name (if any) used in From URI of outbound requests.