From 12a242c11a232bee8f72f1c4149a6f99c569c738 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Sun, 5 Mar 2023 06:12:14 +0200 Subject: [PATCH 01/11] Work on support for multiple numbers in Android contacts --- .../main/kotlin/com/tutpro/baresip/Contact.kt | 51 +++++++++++++++---- .../kotlin/com/tutpro/baresip/MainActivity.kt | 22 +++++++- 2 files changed, 62 insertions(+), 11 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Contact.kt b/app/src/main/kotlin/com/tutpro/baresip/Contact.kt index e35b73e5..81a97828 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Contact.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Contact.kt @@ -51,16 +51,14 @@ sealed class Contact { return uri } - // Return uri of contact name or null if contact is not found - // If Android contact has more than one uri, return latest if given and found fun contactUri(name: String, latest: String?): String? { for (c in contacts()) when (c) { is BaresipContact -> { if (c.name.equals(name, ignoreCase = true)) return c.uri.removePrefix("<") - .replaceAfter(">", "") - .replace(">", "") + .replaceAfter(">", "") + .replace(">", "") } is AndroidContact -> { if (c.name == name) { @@ -83,6 +81,30 @@ sealed class Contact { return null } + // Return URIs of contact name or null if contact is not found + fun contactUris(name: String): ArrayList { + val uris = ArrayList() + for (c in contacts()) + when (c) { + is BaresipContact -> { + if (c.name.equals(name, ignoreCase = true)) { + uris.add(c.uri.removePrefix("<") + .replaceAfter(">", "") + .replace(">", "")) + return uris + } + } + is AndroidContact -> { + if (c.name == name) { + for (u in c.uris) + uris.add(u) + return uris + } + } + } + return uris + } + fun findContact(uri: String): Contact? { for (c in contacts()) when (c) { @@ -127,7 +149,7 @@ sealed class Contact { // cursor using getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE val projection = arrayOf(ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME, ContactsContract.Data.MIMETYPE, ContactsContract.Data.DATA1, - ContactsContract.Data.PHOTO_THUMBNAIL_URI) + /* ContactsContract.Data.DATA2 ,*/ ContactsContract.Data.PHOTO_THUMBNAIL_URI) val selection = ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE + "' OR " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'" @@ -149,8 +171,10 @@ sealed class Contact { contact.name = name if (contact.thumbnailUri == null && thumb != null) contact.thumbnailUri = thumb - if (mime == ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) - contact.uris.add("tel:${data.filterNot{setOf('-', ' ', '(', ')').contains(it)}}") + if (mime == ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) { + contact.uris.add("tel:${data.filterNot { setOf('-', ' ', '(', ')').contains(it) }}") + // contact.types.add(typeToString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))) + } else if (mime == ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE) contact.uris.add("sip:$data") else @@ -164,6 +188,16 @@ sealed class Contact { BaresipService.androidContacts.add(value) } + @Suppress("unused") + private fun typeToString(type: Int): String { + return when(type) { + ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> "Home" + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE -> "Mobile" + ContactsContract.CommonDataKinds.Phone.TYPE_WORK -> "Work" + else -> "Unknown" + } + } + fun restoreBaresipContacts(): Boolean { val content = Utils.getFileContents(BaresipService.filesPath + "/contacts") ?: return false @@ -235,8 +269,7 @@ sealed class Contact { is BaresipContact -> BaresipService.contactNames.add(c.name) is AndroidContact -> - if (c.uris.size == 1) - BaresipService.contactNames.add(c.name) + BaresipService.contactNames.add(c.name) } } diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 6c494f10..c9cefdae 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1751,14 +1751,31 @@ class MainActivity : AppCompatActivity() { } } - private fun makeCall() { + private fun makeCall(lookContact: Boolean = true) { callUri.setAdapter(null) val ua = BaresipService.uas[aorSpinner.selectedItemPosition] val aor = ua.account.aor if (Call.calls().isEmpty()) { var uriText = callUri.text.toString().trim() if (uriText.isNotEmpty()) { - uriText = Contact.contactUri(uriText, NewCallHistory.aorLatestPeerUri(aor)) ?: uriText + if (lookContact) { + val uris = Contact.contactUris(uriText) + if (uris.size == 1) + uriText = uris[0] + else if (uris.size > 1) { + val builder = MaterialAlertDialogBuilder(this, R.style.AlertDialogTheme) + with(builder) { + setTitle("Choose Destination") + setItems(uris.toTypedArray()) { _, which -> + callUri.setText(uris[which]) + makeCall(false) + } + setNeutralButton(getString(R.string.cancel)) { _: DialogInterface, _: Int -> } + show() + } + return + } + } if (Utils.isTelNumber(uriText)) uriText = "tel:$uriText" val uri = if (Utils.isTelUri(uriText)) { @@ -1785,6 +1802,7 @@ class MainActivity : AppCompatActivity() { } else { Utils.uriComplete(uriText, aor) } + Log.d(TAG, "********* uriText = $uriText") if (!Utils.checkUri(uri)) { Utils.alertView(this, getString(R.string.notice), String.format(getString(R.string.invalid_sip_or_tel_uri), uri) From 444aa4e02e0646385d2607a05797ffd896d5f41e Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 6 Mar 2023 07:13:01 +0200 Subject: [PATCH 02/11] Added multiple contact number support to chats --- .../com/tutpro/baresip/ChatsActivity.kt | 74 +++++++++++++------ 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt index 3c3c41e8..d6b0ee84 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt @@ -8,6 +8,7 @@ import android.view.Menu import android.view.MenuItem import android.widget.* import androidx.activity.OnBackPressedCallback +import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -23,6 +24,7 @@ class ChatsActivity: AppCompatActivity() { private lateinit var plusButton: ImageButton internal lateinit var aor: String internal lateinit var account: Account + private lateinit var chatRequest: ActivityResultLauncher private var scrollPosition = -1 private val onBackPressedCallback = object : OnBackPressedCallback(true) { @@ -57,7 +59,7 @@ class ChatsActivity: AppCompatActivity() { listView.adapter = clAdapter listView.isLongClickable = true - val chatRequest = + chatRequest = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { if (it.resultCode == RESULT_OK) { clAdapter.clear() @@ -135,34 +137,60 @@ class ChatsActivity: AppCompatActivity() { Contact.contactNames())) plusButton.setOnClickListener { - val uriText = peerUri.text.toString().trim() - if (uriText.isNotEmpty()) { - var uri = Contact.contactUri(uriText, null) - if (uri == null) - uri = if (Utils.isTelNumber(uriText)) - "tel:$uriText" - else - Utils.uriComplete(uriText, aor) - if (!Utils.checkUri(uri)) { - Utils.alertView(this, getString(R.string.notice), - String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) - } else { - peerUri.text.clear() - peerUri.isCursorVisible = false - val i = Intent(this@ChatsActivity, ChatActivity::class.java) - val b = Bundle() - b.putString("aor", aor) - b.putString("peer", uri) - i.putExtras(b) - chatRequest.launch(i) - } - } + makeChat(true) } onBackPressedDispatcher.addCallback(this, onBackPressedCallback) } + private fun makeChat(lookForContact: Boolean = true) { + var uriText = peerUri.text.toString().trim() + if (uriText.isNotEmpty()) { + if (lookForContact) { + val uris = Contact.contactUris(uriText) + if (uris.size == 1) + uriText = uris[0] + else if (uris.size > 1) { + val builder = MaterialAlertDialogBuilder(this, R.style.AlertDialogTheme) + with(builder) { + setTitle("Choose Destination") + setItems(uris.toTypedArray()) { _, which -> + peerUri.setText(uris[which]) + makeChat(false) + } + setNeutralButton(getString(R.string.cancel)) { _: DialogInterface, _: Int -> } + show() + } + return + } + } + if (Utils.isTelNumber(uriText)) + uriText = "tel:$uriText" + val uri = if (Utils.isTelUri(uriText)) { + if (account.telProvider == "") { + Utils.alertView(this, getString(R.string.notice), getString(R.string.no_telephony_provider)) + return + } + Utils.telToSip(uriText, account) + } else { + Utils.uriComplete(uriText, aor) + } + if (!Utils.checkUri(uri)) { + Utils.alertView(this, getString(R.string.notice), + String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) + } else { + peerUri.text.clear() + peerUri.isCursorVisible = false + val i = Intent(this@ChatsActivity, ChatActivity::class.java) + val b = Bundle() + b.putString("peer", uri) + i.putExtras(b) + chatRequest.launch(i) + } + } + } + override fun onPause() { MainActivity.activityAor = aor super.onPause() From a98982c2ed182b9bd223f7c3a432e79224b031c0 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 6 Mar 2023 07:15:44 +0200 Subject: [PATCH 03/11] Require that the active account has telephony provider when making call to tel uri --- .../kotlin/com/tutpro/baresip/MainActivity.kt | 26 ++++--------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index c9cefdae..ae900518 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1751,14 +1751,14 @@ class MainActivity : AppCompatActivity() { } } - private fun makeCall(lookContact: Boolean = true) { + private fun makeCall(lookForContact: Boolean = true) { callUri.setAdapter(null) val ua = BaresipService.uas[aorSpinner.selectedItemPosition] val aor = ua.account.aor if (Call.calls().isEmpty()) { var uriText = callUri.text.toString().trim() if (uriText.isNotEmpty()) { - if (lookContact) { + if (lookForContact) { val uris = Contact.contactUris(uriText) if (uris.size == 1) uriText = uris[0] @@ -1780,33 +1780,17 @@ class MainActivity : AppCompatActivity() { uriText = "tel:$uriText" val uri = if (Utils.isTelUri(uriText)) { if (ua.account.telProvider == "") { - val telAccounts = Account.telProviderAccounts() - if (telAccounts.isEmpty()) { - Utils.alertView(this, getString(R.string.notice), - getString(R.string.no_telephony_providers)) - } else { - val builder = MaterialAlertDialogBuilder(this, R.style.AlertDialogTheme) - with(builder) { - setTitle(getString(R.string.choose_telephony_provider_account)) - setItems(telAccounts) { _, which -> - spinToAor("sip:${telAccounts[which]}") - makeCall() - } - setNeutralButton("Cancel") { _: DialogInterface, _: Int -> } - show() - } - } + Utils.alertView(this, getString(R.string.notice), + getString(R.string.no_telephony_provider)) return } Utils.telToSip(uriText, ua.account) } else { Utils.uriComplete(uriText, aor) } - Log.d(TAG, "********* uriText = $uriText") if (!Utils.checkUri(uri)) { Utils.alertView(this, getString(R.string.notice), - String.format(getString(R.string.invalid_sip_or_tel_uri), uri) - ) + String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) } else { callUri.isFocusable = false uaAdapter.notifyDataSetChanged() From 44a6839aeeab3c0b8bbc46474f8f7990b403efe3 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 6 Mar 2023 07:26:34 +0200 Subject: [PATCH 04/11] In order to simplify the code, active account needs to have telephony provider when making call or sending message to tel uri --- app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt | 3 ++- app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt | 4 ++-- app/src/main/res/values-fi/strings.xml | 3 --- app/src/main/res/values-pt-rBR/strings.xml | 2 -- app/src/main/res/values-pt/strings.xml | 2 -- app/src/main/res/values-sv/strings.xml | 2 -- app/src/main/res/values/strings.xml | 2 -- 7 files changed, 4 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt index d6b0ee84..60d46b4d 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt @@ -169,7 +169,8 @@ class ChatsActivity: AppCompatActivity() { uriText = "tel:$uriText" val uri = if (Utils.isTelUri(uriText)) { if (account.telProvider == "") { - Utils.alertView(this, getString(R.string.notice), getString(R.string.no_telephony_provider)) + Utils.alertView(this, getString(R.string.notice), + String.format(getString(R.string.no_telephony_provider), account.aor)) return } Utils.telToSip(uriText, account) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index ae900518..6b8d0975 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1781,7 +1781,7 @@ class MainActivity : AppCompatActivity() { val uri = if (Utils.isTelUri(uriText)) { if (ua.account.telProvider == "") { Utils.alertView(this, getString(R.string.notice), - getString(R.string.no_telephony_provider)) + String.format(getString(R.string.no_telephony_provider), aor)) return } Utils.telToSip(uriText, ua.account) @@ -1790,7 +1790,7 @@ class MainActivity : AppCompatActivity() { } if (!Utils.checkUri(uri)) { Utils.alertView(this, getString(R.string.notice), - String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) + String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) } else { callUri.isFocusable = false uaAdapter.notifyDataSetChanged() diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index cabe6a33..9ff27e8c 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -463,8 +463,6 @@ Siirtäjä … Puhelun siirto … Virheellinen SIP URI \'%1$s\' - Millekään tilille ei ole konfiguroitu puhelinpalvelun - tarjoajaa Tilille \'%1$s\' ei ole konfiguroitu puhelinpalvelun tarjoajaa Puhelun kohde @@ -541,7 +539,6 @@ Sinulla ei ole yhtään tuettua video-kameraa. Näytä salasana Ei verkkoyhteyttä! - Valitse puhelinpalvelun tarjoava tili Puhelutiedot Et voi käyttää Androidin yhteystietoja ilman Yhteystiedot-lupaa. Audio fokus evätty! diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 90874673..308ec0f2 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -274,10 +274,8 @@ Parte inválida do host SIP URI \'%1$s\' SIP ou tel. URI usuário@domínio ou o número de telefone - Escolha a conta da operadora de telefonia SIP URI host é parcialmente usado nas chamadas para números de telefone. O padrão de fábrica é domínio da conta. Caso não seja informada, essa conta não pode ser usada para ligar para os números de telefone. SIP ou tel. URI inválido \'%1$s\' - A operadora de telefonia não foi configurada para nenhuma conta. Escolha se ambos os contatos do baresip e do Android serão usados. Caso use ambos, o contato do baresip será usado se houver um contato repetido no Android. Ambos Você não pode acessar os contatos do Android sem a permissão \"Contatos\". diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 349d4258..f14f782c 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -273,11 +273,9 @@ Você não pode acessar os contatos do Android sem a permissão \"Contatos\". SIP ou tel URI usuário@domínio ou número de telefone - Escolha a conta do provedor de telefonia Escolhe se os contatos do Baresip, os contatos do Android ou ambos são usados. Se ambos e contato com o mesmo nome existirem em ambos, o contato Baresip será escolhido. Ambos SIP ou tel URI \'%1$s\' inválido - O Provedor de Telefonia não foi configurado para nenhuma conta. Cego Participou Provedor de telefonia diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 32d3383f..1d5cfd09 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -275,9 +275,7 @@ SIP- eller tel-URI användare@domän eller telefonnummer Tappade - Telefonileverantör har inte konfigurerats för något konto. Ogiltig SIP- eller tel-URI \'%1$s\' - Välj telefonileverantör-konto Välj om baresips kontakter, Androids kontakter eller båda ska användas. Om du väljer båda och en kontakt med samma namn finns i båda, då används baresips kontakt. Båda Det går inte att komma åt Androids kontakter utan behörigheten \"Kontakter\". diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 03f822e9..7ca04b1f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -438,8 +438,6 @@ Transferring call to … Invalid SIP URI \'%1$s\' Account \'%1$s\' has no Telephony Provider - Telephony Provider has not been configured for any account. - Choose Telephony Provider account Callee Hangup Video call From 739fddcff87ee1ecb03af6462da76a715bbdb64f Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 6 Mar 2023 07:36:51 +0200 Subject: [PATCH 05/11] Always use Contact.contactUris function --- .../main/kotlin/com/tutpro/baresip/Contact.kt | 32 +------------------ .../kotlin/com/tutpro/baresip/MainActivity.kt | 4 ++- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Contact.kt b/app/src/main/kotlin/com/tutpro/baresip/Contact.kt index 81a97828..d46ee67b 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Contact.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Contact.kt @@ -51,37 +51,7 @@ sealed class Contact { return uri } - fun contactUri(name: String, latest: String?): String? { - for (c in contacts()) - when (c) { - is BaresipContact -> { - if (c.name.equals(name, ignoreCase = true)) - return c.uri.removePrefix("<") - .replaceAfter(">", "") - .replace(">", "") - } - is AndroidContact -> { - if (c.name == name) { - return if (c.uris.isNotEmpty()) { - var uri = c.uris.first() - if (c.uris.size > 1 && latest != null) { - for (u in c.uris) - if (u == latest) { - uri = latest - break - } - } - uri - } else { - null - } - } - } - } - return null - } - - // Return URIs of contact name or null if contact is not found + // Return URIs of contact name fun contactUris(name: String): ArrayList { val uris = ArrayList() for (c in contacts()) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 6b8d0975..58ce86fd 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1448,7 +1448,9 @@ class MainActivity : AppCompatActivity() { dialog.dismiss() var uriText = transferUri.text.toString().trim() if (uriText.isNotEmpty()) { - uriText = Contact.contactUri(uriText, null) ?: uriText + val uris = Contact.contactUris(uriText) + if (uris.size >= 1) + uriText = uris[0] if (Utils.isTelNumber(uriText)) uriText = "tel:$uriText" val uri = if (Utils.isTelUri(uriText)) From 586da68932a9c61a02a111d934ae9f84735bc68c Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Mon, 6 Mar 2023 22:15:29 +0200 Subject: [PATCH 06/11] Fixed bug in friendlyUri --- app/src/main/kotlin/com/tutpro/baresip/Utils.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt index f8ebac03..ba44da0a 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt @@ -123,15 +123,13 @@ object Utils { } fun friendlyUri(ctx: Context, uri: String, account: Account, e164Check: Boolean = true): String { - Log.d(TAG, "******* uri=$uri, country_code=${account.countryCode}, aor=${account.aor}") var u = Contact.contactName(uri) - Log.d(TAG, "******* Contact.contactName=$u") if (u != uri) return u if (e164Check) { - u = Contact.contactName(e164Uri(uri, account.countryCode)) - Log.d(TAG, "******* Contact.contactName(e164Uri)=$u") - if (u != uri) + val e164Uri = e164Uri(uri, account.countryCode) + u = Contact.contactName(e164Uri) + if (u != e164Uri) return u } if (u.contains("@")) { From cbd3ae228d90f908029550a5bdcce5cfb0a1f65f Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 7 Mar 2023 07:25:08 +0200 Subject: [PATCH 07/11] Fixed adding of new chat peer --- app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt index 60d46b4d..11380fec 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/ChatsActivity.kt @@ -185,6 +185,7 @@ class ChatsActivity: AppCompatActivity() { peerUri.isCursorVisible = false val i = Intent(this@ChatsActivity, ChatActivity::class.java) val b = Bundle() + b.putString("aor", aor) b.putString("peer", uri) i.putExtras(b) chatRequest.launch(i) From 48ef1d4e2a34566511c18016070be5f59500d5e4 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 7 Mar 2023 07:26:20 +0200 Subject: [PATCH 08/11] Added support for call transfer to contact with multiple numbers --- .../kotlin/com/tutpro/baresip/MainActivity.kt | 74 ++++++++++++------- app/src/main/res/values-fi/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt index 58ce86fd..152a0d90 100644 --- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt +++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt @@ -1449,34 +1449,30 @@ class MainActivity : AppCompatActivity() { var uriText = transferUri.text.toString().trim() if (uriText.isNotEmpty()) { val uris = Contact.contactUris(uriText) - if (uris.size >= 1) - uriText = uris[0] - if (Utils.isTelNumber(uriText)) - uriText = "tel:$uriText" - val uri = if (Utils.isTelUri(uriText)) - Utils.telToSip(uriText, ua.account) - else - Utils.uriComplete(uriText, ua.account.aor) - if (!Utils.checkUri(uri)) { - Utils.alertView(this@MainActivity, getString(R.string.notice), - String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) - } else { - val call = ua.currentCall() - if (call != null) { - if (attended.isChecked) { - if (call.hold()) { - call.referTo = uri - call(ua, uri, call) - } - } else { - if (!call.transfer(uri)) { - Utils.alertView(this@MainActivity, getString(R.string.notice), - String.format(getString(R.string.transfer_failed))) - } + if (uris.size > 1) { + val destinationBuilder = MaterialAlertDialogBuilder( + this@MainActivity, + R.style.AlertDialogTheme + ) + with(destinationBuilder) { + setTitle(R.string.choose_destination_uri) + setItems(uris.toTypedArray()) { _, which -> + uriText = uris[which] + transfer( + ua, + if (Utils.isTelNumber(uriText)) "tel:$uriText" else uriText, + attended.isChecked + ) } - showCall(ua) + setNeutralButton(getString(R.string.cancel)) { _: DialogInterface, _: Int -> } + show() } + } else { + if (uris.size == 1) + uriText = uris[0] } + transfer(ua, if (Utils.isTelNumber(uriText)) "tel:$uriText" else uriText, + attended.isChecked) } } setNeutralButton(android.R.string.cancel) { dialog, _ -> @@ -1511,6 +1507,32 @@ class MainActivity : AppCompatActivity() { alertDialog.show() } + private fun transfer(ua: UserAgent, uriText: String, attended: Boolean) { + val uri = if (Utils.isTelUri(uriText)) + Utils.telToSip(uriText, ua.account) + else + Utils.uriComplete(uriText, ua.account.aor) + if (!Utils.checkUri(uri)) { + Utils.alertView(this@MainActivity, getString(R.string.notice), + String.format(getString(R.string.invalid_sip_or_tel_uri), uri)) + } else { + val call = ua.currentCall() + if (call != null) { + if (attended) { + if (call.hold()) { + call.referTo = uri + call(ua, uri, call) + } + } else { + if (!call.transfer(uri)) { + Utils.alertView(this@MainActivity, getString(R.string.notice), + String.format(getString(R.string.transfer_failed))) + } + } + showCall(ua) + } + } + } private fun askPassword(title: String, ua: UserAgent? = null) { val layout = LayoutInflater.from(this) .inflate(R.layout.password_dialog, findViewById(android.R.id.content), @@ -1767,7 +1789,7 @@ class MainActivity : AppCompatActivity() { else if (uris.size > 1) { val builder = MaterialAlertDialogBuilder(this, R.style.AlertDialogTheme) with(builder) { - setTitle("Choose Destination") + setTitle(R.string.choose_destination_uri) setItems(uris.toTypedArray()) { _, which -> callUri.setText(uris[which]) makeCall(false) diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 9ff27e8c..63b1efb7 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -479,6 +479,7 @@ Sokeasti Osallistu Siirron kohde + Valitse kohteen URI Siirto Siirto epäonnistui DTMF diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ca04b1f..32ed7baf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -452,6 +452,7 @@ Blind Attended Transfer destination + Choose destination URI Transfer Transfer failed DTMF From fa0a3234e204742ab7872ad9c096224006ab2dad Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 7 Mar 2023 07:35:00 +0200 Subject: [PATCH 09/11] Merged sv, es, pt, and pt-rBR strings --- app/src/main/res/values-es/strings.xml | 75 ++++++++++++++++++---- app/src/main/res/values-pt-rBR/strings.xml | 2 + app/src/main/res/values-pt/strings.xml | 2 + app/src/main/res/values-sv/strings.xml | 13 ++-- 4 files changed, 74 insertions(+), 18 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 184b7b51..a973b1f3 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -23,7 +23,7 @@ Registrar Si está marcado, el registro está habilitado y las solicitudes de REGISTRO se envían en el intervalo especificado por Intervalo de registro. Códecs de audio - Lista de códecs de audio compatibles en orden de prioridad + Lista de códecs de audio por orden de prioridad. Arrastre para reordenar, deslice a la derecha para activar o desactivar. Media NAT transversal Selecciona el protocolo transversal de NAT media (si lo hay). Las posibles opciones son STUN (Utilidades de recorrido de sesión para NAT, RFC 5389) e ICE (conectividad interactiva @@ -92,7 +92,7 @@ Hoy Usted Nuevo compañero de chat - URI de SIP no válido + URI de chat no válido ¿Quieres eliminar el chat con un compañero? \'%1$s\' o agregar pares a los contactos? ¿Quiere eliminar el chat con «%1$s»\? @@ -178,8 +178,8 @@ Acerca de Reiniciar Salir - Llamada saliente a… - Llamada entrante de … + Llamar a … + Llamada de … Transfiriendo llamada a … URI de SIP no válido \'%1$s\' Destinatario @@ -187,9 +187,9 @@ Retención/desconexión de llamadas DTMF Información de llamada - Duración + Duración: %1$s (segs) Códecs - Tasa + Velocidad actual: %1$s (Kbits/s) Mensaje de voz Mensajes de correo de voz Tiene @@ -218,21 +218,21 @@ Los datos de la aplicación han sido respaldados en el archivo \'%1$s\'. En las versiones de Android 9 e inferiores, el archivo está en la carpeta Download. Ha fallado la copia de seguridad de los datos de la aplicación en el archivo \'%1$s\'. Compruebe Apps → baresip → Permisos → Almacenamiento. Se restauraron los datos de la aplicación. Baresip necesita reiniciarse. ¿Quiere reiniciar ahora\? - No se han podido restaurar los datos de la aplicación. Comprueba que has dado la contraseña correcta. En las versiones de Android 9 e inferiores, compruebe también Apps → baresip → Permisos → Almacenamiento y que el archivo \'%1$s\' existe en la carpeta Download. + No se han podido restaurar los datos de la aplicación. Compruebe que ha dado la contraseña correcta y que el archivo de copia de seguridad es de esta aplicación. En las versiones de Android 9 e inferiores, compruebe también Aplicaciones → baresip → Permisos → Almacenamiento y que el archivo \'%1$s\' existe en la carpeta Download. Es necesario reiniciar Baresip para que surta efecto la configuración nueva. ¿Quiere reiniciar ahora\? Módulos de audio Las cuentas pueden utiilzar códecs de audio provistos por los módulos comprobados. Falló la carga del módulo. - No es posible hacer o responder llamadas sin el permiso Micrófono. + baresip necesita permiso de \"Micrófono\" para las llamadas de voz. Contraseña incorrecta%1$s Nombre de usuario no válido \'%1$s\' - Lista de códecs de audio compatibles en orden de prioridad + Lista de códecs de vídeo por orden de prioridad. Arrastre para reordenar, deslice a la derecha para activar o desactivar. Mostrar contraseña No tiene ninguna cámara de video compatible. - Otorga permiso a la \"Cámara\" para realizar o contestar videollamadas. + Concede permiso a \"Cámara\" para realizar o responder videollamadas. Solicitud de reinicio No hay información disponible - Ha fallado la transferencia + Error en la transferencia Transferir Destino de transferencia Transferencia de llamadas @@ -244,10 +244,10 @@ Videollamada Confirmación Ayuda - Si se marca, este contacto está disponible también en los contactos de Android. + Si está marcada, este contacto se añade a los contactos de Android. Reiniciar ¿Estás seguro de que quieres restablecer los valores de fábrica\? - Si está marcada y si la opción Debug está marcada, proporciona también la petición SIP y el seguimiento de la respuesta a Logcat. Desmarcado automáticamente al iniciar baresip. + Si está marcada y si Debug está marcada, los mensajes Logcat incluyen también la petición SIP y la traza de respuesta. Desmarcado automáticamente al iniciar baresip. Seguimiento SIP Tamaño de los cuadros de vídeo transmitidos (ancho x alto). El valor predeterminado de fábrica es 800x600. Tamaño del fotograma de vídeo @@ -295,4 +295,53 @@ Apodo de la cuenta no válido \"%1$s El apodo \'%1$s\' ya existe Apodo + Ambos + +código + Detalles de la llamada + Interlocutores + Dirección + Duración + Configuración del audio + usuario@dominio o número de teléfono + Imagen del perfil + Proveedor de telefonía + Parte del host SIP URI utilizada en las llamadas a números de teléfono. Por defecto es el dominio de la cuenta. Si no se indica, esta cuenta no puede utilizarse para llamar a números de teléfono. + Parte del host SIP URI + Código del país \"%1$s\" no válido + Parte del host SIP URI \'%1$s\' no válida + Reordenar + Elige si se utilizan contactos baresip, contactos Android o ambos. Si ambos y el contacto con el mismo nombre existe en ambos, se elige el contacto baresip. + Solicitud de autorización + SIP o teléfono URI + Llamada en espera + No es posible restaurar la copia de seguridad sin el permiso de \"Almacenamiento\". + ¡No hay conexion de red! + La cuenta \'%1$s\' no tiene proveedor de telefonía + Velocidad media: %1$s (Kbits/s) + Perdidos + Oscilación: %1$s (ms) + Fundamentos de los permisos + Oculto + Asistió + %1$d llamadas perdidas + Optimizaciones de la batería + No podrá crear copias de seguridad sin el permiso \"Almacenamiento\". + Anónimo + Desconocido + URI del teléfono o SIP no válido \'%1$s\' + Paquetes + baresip necesita el permiso \"Micrófono\" para las llamadas de voz, el permiso \"Dispositivos cercanos\" para la detección de micrófonos/altavoces Bluetooth y el permiso \"Notificaciones\" para la publicación de notificaciones. + Llamadas perdidas + Elija la cuenta del proveedor de telefonía + El proveedor de telefonía no se ha configurado para ninguna cuenta. + Código de país E.164 de esta cuenta. Si la parte de usuario From URI de la llamada entrante o del mensaje contiene un número de teléfono que no empieza por el signo \"+\" y si falla la búsqueda de contacto, se antepone al número este prefijo de país y se vuelve a intentar la búsqueda de contacto. Si el número de teléfono comienza con un solo dígito \"0\", el dígito \"0\" se elimina antes de anteponer el prefijo al número. + Tiempo + Desviada por … + No podrá utilizar esta aplicación sin el permiso de \"Notificaciones\". + Desactive las optimizaciones de batería (recomendado) si desea reducir la probabilidad de que Android restrinja el acceso de baresip a la red o lo ponga en estado de espera. + Si se eligen los contactos de Android, se pueden usar en llamadas y mensajes como referencias a SIP y tel URI. La aplicación baresip no almacena contactos de Android ni los comparte con nadie. Para que los contactos de Android estén disponibles en baresip, Google requiere que acepte su uso como se describe aquí y en la Política de Privacidad. + baresip no es capaz de detectar la conectividad Bluetooth sin el permiso \"Dispositivos cercanos\". + No se puede acceder a los contactos de Android sin el permiso \"Contactos\". + ¡Enfoque de audio denegado! + baresip+ necesita el permiso \"Micrófono\" para las llamadas de voz, el permiso \"Cámara\" para las videollamadas, el permiso \"Dispositivos cercanos\" para la detección de micrófonos/altavoces Bluetooth y el permiso \"Notificaciones\" para la publicación de notificaciones. \ No newline at end of file diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 308ec0f2..90874673 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -274,8 +274,10 @@ Parte inválida do host SIP URI \'%1$s\' SIP ou tel. URI usuário@domínio ou o número de telefone + Escolha a conta da operadora de telefonia SIP URI host é parcialmente usado nas chamadas para números de telefone. O padrão de fábrica é domínio da conta. Caso não seja informada, essa conta não pode ser usada para ligar para os números de telefone. SIP ou tel. URI inválido \'%1$s\' + A operadora de telefonia não foi configurada para nenhuma conta. Escolha se ambos os contatos do baresip e do Android serão usados. Caso use ambos, o contato do baresip será usado se houver um contato repetido no Android. Ambos Você não pode acessar os contatos do Android sem a permissão \"Contatos\". diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index f14f782c..349d4258 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -273,9 +273,11 @@ Você não pode acessar os contatos do Android sem a permissão \"Contatos\". SIP ou tel URI usuário@domínio ou número de telefone + Escolha a conta do provedor de telefonia Escolhe se os contatos do Baresip, os contatos do Android ou ambos são usados. Se ambos e contato com o mesmo nome existirem em ambos, o contato Baresip será escolhido. Ambos SIP ou tel URI \'%1$s\' inválido + O Provedor de Telefonia não foi configurado para nenhuma conta. Cego Participou Provedor de telefonia diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 1d5cfd09..97350119 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -114,7 +114,7 @@ Videokodekar Lista över ljudkodekar i prioritetsordning. Dra för att ändra ordning, svep höger för att slå på eller av. Ljudkodekar - Kryssa i för att aktivera registrering och att REGISTER-förfrågningar skickas var 12:e minut. + Kryssa i för att aktivera registrering och att REGISTER-förfrågningar skickas periodiskt enligt angett registreringsintervall. Registrera Ogiltig proxyserver-URI \'%1$s\' SIP-URI för en proxyserver @@ -138,7 +138,7 @@ Konto Om baresip+ Om baresip - <h1>SIP-klient baserad på baresip-biblioteket</h1> <p>Juha Heinanen <jh@tutpro.com></p> <p>Version %1$s</p> <h2>Användartips</h2> <ul> <li>I Androids inställningar för Appar och aviseringar, tillåt aviseringar för appen baresip.</li> <li>Anpassa baresips inställningar efter dina behov (tryck på en inställnings titel för hjälp).</li> <li>Skapa sedan ett eller flera konton (igen, tryck på en inställnings titel för hjälp).</li> <li>Ett nytt konto kan delvis konfigureras automatiskt. Se <a href=https://github.com/juha-h/baresip-studio/wiki/Automatic-Account-Configuration>Wiki</a> för mer information.</li> <li>Registreringsstatus för ett konto visas med en färgad prick: grön (registrering lyckades), gul (registrering pågår), röd (registrering misslyckades), vit (registrering är inte aktiverad).</li> <li>Om du trycker på den färgade pricken tas du till kontots konfiguration.</li> <li>Om du sveper ner över skärmen registrerar det valda kontot om sig.</li> <li>Långt tryck på det valda kontot aktiverar eller inaktiverar registrering för kontot.</li> <li>Svepningar åt vänster/höger växlar mellan konton.</li> <li>Ikonen överst på startsidan slår på/av högtalartelefonfunktionen.</li> <li>Ikonerna längst ner på startsidan tar dig till röstbrevlådan (om URI för röstbrevlåda har angetts för kontot), dina kontakter, meddelanden, samtalshistorik och låter dig växla mellan numeriskt och alfanumeriskt tangentbord.</li> <li>Senast uppringda nummer kan fyllas i igen genom att trycka på ring upp-ikonen när inget nummer att ringa har angetts.</li> <li>Samtal- och meddelandemotparter kan läggas till i dina kontakter genom ett långt tryck på motparten.</li> <li>Långa tryck kan också användas för att ta bort samtal, chattar, meddelanden och kontakter.</li> <li>Genom tryck/långt tryck på en kontakts ikon kan en bild läggas till/tas bort för kontakten.</li> </ul> <h2>Källkod</h2> Källkoden finns tillgänglig på <a href=https://github.com/juha-h/baresip-studio>GitHub</a> där även fel och problem kan rapporteras. <h2>Licenser</h2> <ul> <li><b>BSD-3-Clause</b> förutom följande:</li> <li><b>Apache 2.0</b> AMR-kodek, TLS-säkerhet och ZRTP-mediakryptering</li> <li><b>LGPL 2.1</b> G.722- och G.726-kodekar</li> <li><b>GNU GPLv3</b> G.729-kodek</li> </ul> + <h1>SIP-klient baserad på baresip-biblioteket</h1> <p>Juha Heinanen <jh@tutpro.com></p> <p>Version %1$s</p> <h2>Användartips</h2> <ul> <li>Anpassa baresips inställningar efter dina behov (tryck på en inställnings titel för hjälp).</li> <li>Skapa sedan ett eller flera konton (igen, tryck på en inställnings titel för hjälp).</li> <li>Ett nytt konto kan delvis konfigureras automatiskt. Se <a href=https://github.com/juha-h/baresip-studio/wiki/Automatic-Account-Configuration>Wiki</a> för mer information.</li> <li>Registreringsstatus för ett konto visas med en färgad prick: grön (registrering lyckades), gul (registrering pågår), röd (registrering misslyckades), vit (registrering är inte aktiverad).</li> <li>Om du trycker på den färgade pricken tas du till kontots konfiguration.</li> <li>Om du sveper ner över skärmen registrerar det valda kontot om sig.</li> <li>Långt tryck på det valda kontot aktiverar eller inaktiverar registrering för kontot.</li> <li>Svepningar åt vänster/höger växlar mellan konton.</li> <li>Ikonen överst på startsidan slår på/av högtalartelefonfunktionen.</li> <li>Ikonerna längst ner på startsidan tar dig till röstbrevlådan (om URI för röstbrevlåda har angetts för kontot), dina kontakter, meddelanden, samtalshistorik och låter dig växla mellan numeriskt och alfanumeriskt tangentbord.</li> <li>Senast uppringda nummer kan fyllas i igen genom att trycka på ring upp-ikonen när inget nummer att ringa har angetts.</li> <li>Samtal- och meddelandemotparter kan läggas till i dina kontakter genom ett långt tryck på motparten.</li> <li>Långa tryck kan också användas för att ta bort samtal, chattar, meddelanden och kontakter.</li> <li>Genom tryck/långt tryck på en kontakts ikon kan en bild läggas till/tas bort för kontakten.</li> </ul> <h2>Källkod</h2> Källkoden finns tillgänglig på <a href=https://github.com/juha-h/baresip-studio>GitHub</a> där även fel och problem kan rapporteras. <h2>Licenser</h2> <ul> <li><b>BSD-3-Clause</b> förutom följande:</li> <li><b>Apache 2.0</b> AMR-kodek, TLS-säkerhet och ZRTP-mediakryptering</li> <li><b>LGPL 2.1</b> G.722- och G.726-kodekar</li> <li><b>GNU GPLv3</b> G.729-kodek</li> </ul> Accepterar du att koppla det här samtalet till \'%1$s\'\? Ljudmoduler Baresip kunde inte starta. Det kan bero på ett ogiltigt värde för en inställning. Kontrollera Adress att lyssna på, TLS certifikat-fil och TLS CA-fil. Starta sedan om baresip. @@ -211,7 +211,7 @@ Lösenord för avkryptering Lösenord för kryptering När ett nytt konto skapas är det möjligt, men inte nödvändigt, att ange port och transportprotokoll för kontot: <användare>@<domän>[:<port>][;transport=udp|tcp|tls]. Om <port> anges men transportprotokoll utelämnas kommer UDP användas som transportprotokoll. Om <port> utelämnas, men transportprotokoll anges används port 5060 eller 5061 (TLS). Om ingendera anges och ingen utgående proxy är angiven kommer registreringsserver för kontot bestämmas enbart baserat på domänens DNS-information. - <h1>SIP-klient med videostöd baserad på baresip-biblioteket</h1> <p>Juha Heinanen &lt;jh@tutpro.com&gt;</p> <p>Version %1$s</p> <h2>Användartips</h2> <ul> <li>I Androids inställningar för Appar och aviseringar, tillåt aviseringar för appen baresip.</li> <li>Anpassa baresip+:s inställningar efter dina behov (tryck på en inställnings titel för hjälp).</li> <li>Skapa sedan ett eller flera konton (igen, tryck på en inställnings titel för hjälp).</li> <li>Ett nytt konto kan delvis konfigureras automatiskt. Se <a href=https://github.com/juha-h/baresip-studio/wiki/Automatic-Account-Configuration>Wiki</a> för mer information.</li> <li>Registreringsstatus för ett konto visas med en färgad prick: grön (registrering lyckades), gul (registrering pågår), röd (registrering misslyckades), vit (registrering är inte aktiverad).</li> <li>Om du trycker på den färgade pricken tas du till kontots konfiguration.</li> <li>Om du sveper ner över skärmen registrerar det valda kontot om sig.</li> <li>Långt tryck på det valda kontot aktiverar eller inaktiverar registrering för kontot.</li> <li>Svepningar åt vänster/höger växlar mellan konton.</li> <li>Ikonen överst på startsidan slår på/av högtalartelefonfunktionen.</li> <li>Ikonerna längst ner på startsidan tar dig till röstbrevlådan (om URI för röstbrevlåda har angetts för kontot), dina kontakter, meddelanden, samtalshistorik och låter dig växla mellan numeriskt och alfanumeriskt tangentbord.</li> <li>Senast uppringda nummer kan fyllas i igen genom att trycka på ring upp-ikonen när inget nummer att ringa har angetts.</li> <li>Samtal- och meddelandemotparter kan läggas till i dina kontakter genom ett långt tryck på motparten.</li> <li>Långa tryck kan också användas för att ta bort samtal, chattar, meddelanden och kontakter.</li> <li>Genom tryck/långt tryck på en kontakts ikon kan en bild läggas till/tas bort för kontakten.</li> </ul> <h2>Kända problem</h2> <ul><li>Under videosamtal måste enheten och skärmen hållas i liggande läge; roterad 90 grader åt vänster från stående läge.</li> <li>Du ser inte din egen video korrekt om du skickar video medan motparten inte skickar video.</li> <h2>Integritetspolicy</h2> Integritetspolicy finns tillgänglig <a href=https://raw.githubusercontent.com/juha-h/baresip-studio/video/PrivacyPolicy.txt>här</a>.</ul> <h2>Källkod</h2> Källkoden finns tillgänglig på <a href=https://github.com/juha-h/baresip-studio>GitHub</a> där även fel och problem kan rapporteras. <h2>Licenser</h2> <ul> <li><b>BSD-3-Clause</b> förutom följande:</li> <li><b>Apache 2.0</b> AMR-kodek och TLS-kryptering</li> <li><b>LGPL 2.1</b> G.722- och G.726-kodekar</li> <li><b>AGPLv4</b> ZRTP mediakryptering</li> <li><b>GNU GPLv2</b> H.264- och H.265-kodekar</li> <li><b>GNU GPLv3</b> G.729-kodek</li><li><b>AOMedia</b> AV1-kodek</li> </ul> + <h1>SIP-klient med videostöd baserad på baresip-biblioteket</h1> <p>Juha Heinanen &lt;jh@tutpro.com&gt;</p> <p>Version %1$s</p> <h2>Användartips</h2> <ul> <li>Anpassa baresip+:s inställningar efter dina behov (tryck på en inställnings titel för hjälp).</li> <li>Skapa sedan ett eller flera konton (igen, tryck på en inställnings titel för hjälp).</li> <li>Ett nytt konto kan delvis konfigureras automatiskt. Se <a href=https://github.com/juha-h/baresip-studio/wiki/Automatic-Account-Configuration>Wiki</a> för mer information.</li> <li>Registreringsstatus för ett konto visas med en färgad prick: grön (registrering lyckades), gul (registrering pågår), röd (registrering misslyckades), vit (registrering är inte aktiverad).</li> <li>Om du trycker på den färgade pricken tas du till kontots konfiguration.</li> <li>Om du sveper ner över skärmen registrerar det valda kontot om sig.</li> <li>Långt tryck på det valda kontot aktiverar eller inaktiverar registrering för kontot.</li> <li>Svepningar åt vänster/höger växlar mellan konton.</li> <li>Ikonen överst på startsidan slår på/av högtalartelefonfunktionen.</li> <li>Ikonerna längst ner på startsidan tar dig till röstbrevlådan (om URI för röstbrevlåda har angetts för kontot), dina kontakter, meddelanden, samtalshistorik och låter dig växla mellan numeriskt och alfanumeriskt tangentbord.</li> <li>Senast uppringda nummer kan fyllas i igen genom att trycka på ring upp-ikonen när inget nummer att ringa har angetts.</li> <li>Samtal- och meddelandemotparter kan läggas till i dina kontakter genom ett långt tryck på motparten.</li> <li>Långa tryck kan också användas för att ta bort samtal, chattar, meddelanden och kontakter.</li> <li>Genom tryck/långt tryck på en kontakts ikon kan en bild läggas till/tas bort för kontakten.</li> </ul> <h2>Kända problem</h2> <ul><li>Under videosamtal måste enheten och skärmen hållas i liggande läge; roterad 90 grader åt vänster från stående läge.</li> <li>Du ser inte din egen video korrekt om du skickar video medan motparten inte skickar video.</li> <h2>Integritetspolicy</h2> Integritetspolicy finns tillgänglig <a href=https://raw.githubusercontent.com/juha-h/baresip-studio/video/PrivacyPolicy.txt>här</a>.</ul> <h2>Källkod</h2> Källkoden finns tillgänglig på <a href=https://github.com/juha-h/baresip-studio>GitHub</a> där även fel och problem kan rapporteras. <h2>Licenser</h2> <ul> <li><b>BSD-3-Clause</b> förutom följande:</li> <li><b>Apache 2.0</b> AMR-kodek och TLS-kryptering</li> <li><b>LGPL 2.1</b> G.722- och G.726-kodekar</li> <li><b>AGPLv4</b> ZRTP mediakryptering</li> <li><b>GNU GPLv2</b> H.264- och H.265-kodekar</li> <li><b>GNU GPLv3</b> G.729-kodek</li><li><b>AOMedia</b> AV1-kodek</li> </ul> Förvald samtalsvolym Ogiltig procentuell paketförlust för Opus Förväntad procentuell paketförlust för Opus-ljudström. Giltiga värden mellan 0-100. Förvalt värde är 0, vilket stänger av föregripande felkorrigering. @@ -244,7 +244,7 @@ Storlek på bildrutor Du har ingen videokamera som stöds. Aktivera behörigheten \"Kamera\" för att ringa eller ta emot samtal. - Det går inte att ringa eller ta emot samtal utan behörigheten \"Mikrofon\". + baresip behöver behörigheten \"Mikrofon\" för röstsamtal. Kunde inte återställa programdata. Kontrollera att du angav rätt lösenord och att backup-filen skapats av den här appen. I Android 9 och tidigare versioner, kontrollera Appar → baresip → Behörigheter → Lagring och att filen \'%1$s\' finns i katalogen Nedladdningar. Programdata återställd. baresip behöver startas om. Starta om nu\? Kunde inte säkerhetskopiera programdata till filen \'%1$s\'. Kontrollera Appar → baresip → Behörigheter → Lagring. @@ -275,14 +275,16 @@ SIP- eller tel-URI användare@domän eller telefonnummer Tappade + Telefonileverantör har inte konfigurerats för något konto. Ogiltig SIP- eller tel-URI \'%1$s\' + Välj telefonileverantör-konto Välj om baresips kontakter, Androids kontakter eller båda ska användas. Om du väljer båda och en kontakt med samma namn finns i båda, då används baresips kontakt. Båda Det går inte att komma åt Androids kontakter utan behörigheten \"Kontakter\". Landsnummer +nummer Ogiltigt landsnummer \'%1$s\' - Det här kontots landsnummer, enligt E.164. Om telefonnumret i From-URI för ett inkommande samtal inte börjar med en \'+\'-symbol och en matchande kontakt inte kan hittas, då läggs landsnumret till telefonnumret och en kontaktsökning görs igen. Om telefonnumret börjar med siffran \'0\' tas denna siffra bort innan landsnumret läggs till. + Det här kontots landsnummer, enligt E.164. Om telefonnumret i From-URI för ett inkommande samtal, eller meddelande, inte börjar med en \'+\'-symbol och en matchande kontakt inte kan hittas, då läggs landsnumret till telefonnumret och en kontaktsökning görs igen. Om telefonnumret börjar med siffran \'0\' tas denna siffra bort innan landsnumret läggs till. Anonym Okänd Begäran om medgivande @@ -300,4 +302,5 @@ Ogiltigt kontonamn \'%1$s\' Namnet \'%1$s\' används redan Ljudfokus nekad! + Registreringsintervall \ No newline at end of file From 5d8b8f61d1a69e63d5d1e14096750ef0bdbc2c30 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 7 Mar 2023 07:43:58 +0200 Subject: [PATCH 10/11] Removed unused strings --- app/src/main/res/values-es/strings.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a973b1f3..9a1d1ab2 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -332,8 +332,6 @@ Paquetes baresip necesita el permiso \"Micrófono\" para las llamadas de voz, el permiso \"Dispositivos cercanos\" para la detección de micrófonos/altavoces Bluetooth y el permiso \"Notificaciones\" para la publicación de notificaciones. Llamadas perdidas - Elija la cuenta del proveedor de telefonía - El proveedor de telefonía no se ha configurado para ninguna cuenta. Código de país E.164 de esta cuenta. Si la parte de usuario From URI de la llamada entrante o del mensaje contiene un número de teléfono que no empieza por el signo \"+\" y si falla la búsqueda de contacto, se antepone al número este prefijo de país y se vuelve a intentar la búsqueda de contacto. Si el número de teléfono comienza con un solo dígito \"0\", el dígito \"0\" se elimina antes de anteponer el prefijo al número. Tiempo Desviada por … @@ -344,4 +342,4 @@ No se puede acceder a los contactos de Android sin el permiso \"Contactos\". ¡Enfoque de audio denegado! baresip+ necesita el permiso \"Micrófono\" para las llamadas de voz, el permiso \"Cámara\" para las videollamadas, el permiso \"Dispositivos cercanos\" para la detección de micrófonos/altavoces Bluetooth y el permiso \"Notificaciones\" para la publicación de notificaciones. - \ No newline at end of file + From ae65b6beb4aece4e2dc3b3cbfe04c772d094cad9 Mon Sep 17 00:00:00 2001 From: Juha Heinanen Date: Tue, 7 Mar 2023 07:47:31 +0200 Subject: [PATCH 11/11] Removed unused strings --- app/src/main/res/values-pt-rBR/strings.xml | 4 +--- app/src/main/res/values-pt/strings.xml | 4 +--- app/src/main/res/values-sv/strings.xml | 4 +--- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 90874673..b32e8eb9 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -274,10 +274,8 @@ Parte inválida do host SIP URI \'%1$s\' SIP ou tel. URI usuário@domínio ou o número de telefone - Escolha a conta da operadora de telefonia SIP URI host é parcialmente usado nas chamadas para números de telefone. O padrão de fábrica é domínio da conta. Caso não seja informada, essa conta não pode ser usada para ligar para os números de telefone. SIP ou tel. URI inválido \'%1$s\' - A operadora de telefonia não foi configurada para nenhuma conta. Escolha se ambos os contatos do baresip e do Android serão usados. Caso use ambos, o contato do baresip será usado se houver um contato repetido no Android. Ambos Você não pode acessar os contatos do Android sem a permissão \"Contatos\". @@ -310,4 +308,4 @@ Intervalo de registro inválido\'%1$s\' Informa com que frequência (em segundos) o baresip envia solicitações REGISTER. Os valores válidos são entre 60 a 3600. A conta \'%1$s\' não tem provedor telefonico - \ No newline at end of file + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 349d4258..7e85a458 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -273,14 +273,12 @@ Você não pode acessar os contatos do Android sem a permissão \"Contatos\". SIP ou tel URI usuário@domínio ou número de telefone - Escolha a conta do provedor de telefonia Escolhe se os contatos do Baresip, os contatos do Android ou ambos são usados. Se ambos e contato com o mesmo nome existirem em ambos, o contato Baresip será escolhido. Ambos SIP ou tel URI \'%1$s\' inválido - O Provedor de Telefonia não foi configurado para nenhuma conta. Cego Participou Provedor de telefonia Parte do host SIP URI Parte do host URI SIP inválida \'%1$s\' - \ No newline at end of file + diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 97350119..c2d9b0f6 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -275,9 +275,7 @@ SIP- eller tel-URI användare@domän eller telefonnummer Tappade - Telefonileverantör har inte konfigurerats för något konto. Ogiltig SIP- eller tel-URI \'%1$s\' - Välj telefonileverantör-konto Välj om baresips kontakter, Androids kontakter eller båda ska användas. Om du väljer båda och en kontakt med samma namn finns i båda, då används baresips kontakt. Båda Det går inte att komma åt Androids kontakter utan behörigheten \"Kontakter\". @@ -303,4 +301,4 @@ Namnet \'%1$s\' används redan Ljudfokus nekad! Registreringsintervall - \ No newline at end of file +