- Tried to align alerts with material design guidelines.
- Still more work on strings.
This commit is contained in:
@ -74,7 +74,7 @@
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".CallsActivity"
|
||||
android:label="@string/calls"
|
||||
android:label="@string/call_history"
|
||||
android:parentActivityName=".MainActivity" >
|
||||
</activity>
|
||||
<activity
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.tutpro.baresip
|
||||
|
||||
import android.content.Context
|
||||
|
||||
class Account(val accp: String) {
|
||||
|
||||
var displayName = account_display_name(accp)
|
||||
@ -98,28 +100,28 @@ class Account(val accp: String) {
|
||||
return res
|
||||
}
|
||||
|
||||
fun vmMessage() : String {
|
||||
fun vmMessages(cxt: Context) : String {
|
||||
var new = ""
|
||||
var old = ""
|
||||
if (vmNew > 0)
|
||||
if (vmNew == 1)
|
||||
new = "$vmNew new message"
|
||||
new = cxt.getString(R.string.one_new_message)
|
||||
else
|
||||
new = "$vmNew new messages"
|
||||
new = "$vmNew ${cxt.getString(R.string.new_messages)}"
|
||||
if (vmOld > 0)
|
||||
if (vmOld == 1)
|
||||
old = "$vmOld old message"
|
||||
old = cxt.getString(R.string.one_old_message)
|
||||
else
|
||||
old = "$vmOld old messages"
|
||||
var msg = "You have"
|
||||
old = "$vmOld ${cxt.getString(R.string.old_messages)}"
|
||||
var msg = cxt.getString(R.string.you_have)
|
||||
if (new != "") {
|
||||
msg = "$msg $new"
|
||||
if (old != "") msg = "$msg and $old"
|
||||
if (old != "") msg = "$msg ${cxt.getString(R.string.and)} $old"
|
||||
} else {
|
||||
if (old != "")
|
||||
msg = "$msg $old"
|
||||
else
|
||||
msg = "$msg no messages"
|
||||
msg = cxt.getString(R.string.no_messages)
|
||||
}
|
||||
return "$msg."
|
||||
}
|
||||
|
||||
@ -57,33 +57,6 @@ class AccountActivity : AppCompatActivity() {
|
||||
outbound2.setText(acc.outbound[1])
|
||||
}
|
||||
|
||||
mediaNat = acc.mediaNat
|
||||
val mediaNatSpinner = findViewById(R.id.mediaNatSpinner) as Spinner
|
||||
val mediaNatKeys = arrayListOf("stun", "ice", "")
|
||||
val mediaNatVals = arrayListOf("STUN", "ICE", "None")
|
||||
var keyIx = mediaNatKeys.indexOf(acc.mediaNat)
|
||||
var keyVal = mediaNatVals.elementAt(keyIx)
|
||||
mediaNatKeys.removeAt(keyIx)
|
||||
mediaNatVals.removeAt(keyIx)
|
||||
mediaNatKeys.add(0, acc.mediaNat)
|
||||
mediaNatVals.add(0, keyVal)
|
||||
val mediaNatAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,
|
||||
mediaNatVals)
|
||||
mediaNatAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||
mediaNatSpinner.adapter = mediaNatAdapter
|
||||
mediaNatSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
||||
mediaNat = mediaNatKeys[mediaNatVals.indexOf(parent.selectedItem.toString())]
|
||||
stunServer.isEnabled = mediaNat != ""
|
||||
}
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
}
|
||||
}
|
||||
|
||||
stunServer = findViewById(R.id.StunServer) as EditText
|
||||
stunServer.setText(acc.stunServer)
|
||||
stunServer.isEnabled = mediaNat != ""
|
||||
|
||||
regCheck = findViewById(R.id.Register) as CheckBox
|
||||
regCheck.isChecked = acc.regint > 0
|
||||
|
||||
@ -123,10 +96,37 @@ class AccountActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
mediaNat = acc.mediaNat
|
||||
val mediaNatSpinner = findViewById(R.id.mediaNatSpinner) as Spinner
|
||||
val mediaNatKeys = arrayListOf("stun", "ice", "")
|
||||
val mediaNatVals = arrayListOf("STUN", "ICE", "-")
|
||||
var keyIx = mediaNatKeys.indexOf(acc.mediaNat)
|
||||
var keyVal = mediaNatVals.elementAt(keyIx)
|
||||
mediaNatKeys.removeAt(keyIx)
|
||||
mediaNatVals.removeAt(keyIx)
|
||||
mediaNatKeys.add(0, acc.mediaNat)
|
||||
mediaNatVals.add(0, keyVal)
|
||||
val mediaNatAdapter = ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,
|
||||
mediaNatVals)
|
||||
mediaNatAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||
mediaNatSpinner.adapter = mediaNatAdapter
|
||||
mediaNatSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||
override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
||||
mediaNat = mediaNatKeys[mediaNatVals.indexOf(parent.selectedItem.toString())]
|
||||
stunServer.isEnabled = mediaNat != ""
|
||||
}
|
||||
override fun onNothingSelected(parent: AdapterView<*>) {
|
||||
}
|
||||
}
|
||||
|
||||
stunServer = findViewById(R.id.StunServer) as EditText
|
||||
stunServer.setText(acc.stunServer)
|
||||
stunServer.isEnabled = mediaNat != ""
|
||||
|
||||
mediaEnc = acc.mediaEnc
|
||||
val mediaEncSpinner = findViewById(R.id.mediaEncSpinner) as Spinner
|
||||
val mediaEncKeys = arrayListOf("zrtp", "dtls_srtp", "srtp-mandf", "srtp-mand", "srtp", "")
|
||||
val mediaEncVals = arrayListOf("ZRTP", "DTLS-SRTPF", "SRTP-MANDF", "SRTP-MAND", "SRTP", "None")
|
||||
val mediaEncVals = arrayListOf("ZRTP", "DTLS-SRTPF", "SRTP-MANDF", "SRTP-MAND", "SRTP", "-")
|
||||
keyIx = mediaEncKeys.indexOf(acc.mediaEnc)
|
||||
keyVal = mediaEncVals.elementAt(keyIx)
|
||||
mediaEncKeys.removeAt(keyIx)
|
||||
|
||||
@ -41,10 +41,7 @@ class AccountListAdapter(private val cxt: Context, private val rows: ArrayList<A
|
||||
val deleteDialog = AlertDialog.Builder(cxt)
|
||||
deleteDialog.setMessage(String.format(cxt.getString(R.string.delete_account),
|
||||
ua.account.aor))
|
||||
deleteDialog.setPositiveButton(cxt.getText(R.string.cancel)) { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
}
|
||||
deleteDialog.setNegativeButton(cxt.getText(R.string.delete)) { dialog, _ ->
|
||||
deleteDialog.setPositiveButton(cxt.getText(R.string.delete)) { dialog, _ ->
|
||||
Api.ua_destroy(ua.uap)
|
||||
UserAgent.remove(ua)
|
||||
AccountsActivity.generateAccounts()
|
||||
@ -52,6 +49,9 @@ class AccountListAdapter(private val cxt: Context, private val rows: ArrayList<A
|
||||
this.notifyDataSetChanged()
|
||||
dialog.dismiss()
|
||||
}
|
||||
deleteDialog.setNegativeButton(cxt.getText(R.string.cancel)) { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
}
|
||||
deleteDialog.create().show()
|
||||
}
|
||||
return rowView
|
||||
|
||||
@ -36,10 +36,9 @@ class AccountsActivity : AppCompatActivity() {
|
||||
val newAorView = findViewById(R.id.newAor) as EditText
|
||||
addAccountButton.setOnClickListener{
|
||||
var aor = newAorView.text.toString().trim()
|
||||
if (!aor.startsWith("sip:")) aor = "sip:$aor"
|
||||
if (!Utils.checkAorUri(aor)) {
|
||||
Log.d("Baresip", "Invalid SIP Address of Record $aor")
|
||||
Utils.alertView(this, getString(R.string.notice),
|
||||
if (!Utils.checkAor(aor)) {
|
||||
Log.d("Baresip", "Invalid Address of Record $aor")
|
||||
Utils.alertView(this, getString(R.string.error),
|
||||
String.format(getString(R.string.invalid_aor), aor))
|
||||
} else if (Account.exists(aor)) {
|
||||
Log.d("Baresip", "Account $aor already exists")
|
||||
@ -53,7 +52,7 @@ class AccountsActivity : AppCompatActivity() {
|
||||
getString(R.string.account_allocation_failure))
|
||||
} else {
|
||||
newAorView.setText("")
|
||||
newAorView.hint = getString(R.string.sip_uri_user_domain)
|
||||
newAorView.hint = getString(R.string.user_domain)
|
||||
newAorView.clearFocus()
|
||||
UserAgent.add(ua, R.drawable.dot_yellow)
|
||||
generateAccounts()
|
||||
|
||||
@ -690,6 +690,7 @@ class BaresipService: Service() {
|
||||
}
|
||||
|
||||
private fun abandonAudioFocus() {
|
||||
Log.d(LOG_TAG, "Abandonin audio focus")
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
if (audioFocusRequest != null) {
|
||||
am.abandonAudioFocusRequest(audioFocusRequest!!)
|
||||
|
||||
@ -29,7 +29,7 @@ class CallsActivity : AppCompatActivity() {
|
||||
val ua = Account.findUa(aor)!!
|
||||
|
||||
val headerView = findViewById(R.id.account) as TextView
|
||||
val headerText = "Account ${aor.substringAfter(":")}"
|
||||
val headerText = "${getString(R.string.account)} ${aor.substringAfter(":")}"
|
||||
headerView.text = headerText
|
||||
|
||||
val listView = findViewById(R.id.calls) as ListView
|
||||
@ -45,10 +45,10 @@ class CallsActivity : AppCompatActivity() {
|
||||
peerName = Utils.friendlyUri(peerName, Utils.aorDomain(aor))
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEUTRAL, DialogInterface.BUTTON_NEGATIVE -> {
|
||||
DialogInterface.BUTTON_POSITIVE, DialogInterface.BUTTON_NEGATIVE -> {
|
||||
val i = Intent(this@CallsActivity, MainActivity::class.java)
|
||||
i.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP
|
||||
if (which == DialogInterface.BUTTON_NEUTRAL)
|
||||
if (which == DialogInterface.BUTTON_NEGATIVE)
|
||||
i.putExtra("action", "call")
|
||||
else
|
||||
i.putExtra("action", "message")
|
||||
@ -56,15 +56,16 @@ class CallsActivity : AppCompatActivity() {
|
||||
i.putExtra("peer", peerUri)
|
||||
startActivity(i)
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
val builder = AlertDialog.Builder(this@CallsActivity, R.style.Theme_AppCompat)
|
||||
builder.setMessage("Do you want to call or send message to '$peerName'?")
|
||||
.setNeutralButton("Call", dialogClickListener)
|
||||
.setNegativeButton("Send Message", dialogClickListener)
|
||||
.setPositiveButton("Cancel", dialogClickListener)
|
||||
builder.setMessage(String.format(getString(R.string.calls_call_message_question),
|
||||
peerName))
|
||||
.setNeutralButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getString(R.string.call), dialogClickListener)
|
||||
.setPositiveButton(getString(R.string.send_message), dialogClickListener)
|
||||
.show()
|
||||
}
|
||||
listView.onItemLongClickListener = AdapterView.OnItemLongClickListener { _, _, pos, _ ->
|
||||
@ -72,7 +73,7 @@ class CallsActivity : AppCompatActivity() {
|
||||
val peerName = ContactsActivity.contactName(peerUri)
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
DialogInterface.BUTTON_NEGATIVE -> {
|
||||
val i = Intent(this, ContactActivity::class.java)
|
||||
val b = Bundle()
|
||||
b.putBoolean("new", true)
|
||||
@ -80,7 +81,7 @@ class CallsActivity : AppCompatActivity() {
|
||||
i.putExtras(b)
|
||||
startActivityForResult(i, MainActivity.CONTACT_CODE)
|
||||
}
|
||||
DialogInterface.BUTTON_NEGATIVE -> {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
removeUaHistoryAt(pos)
|
||||
if (uaHistory.size == 0) {
|
||||
val i = Intent()
|
||||
@ -89,25 +90,30 @@ class CallsActivity : AppCompatActivity() {
|
||||
}
|
||||
adapter.notifyDataSetChanged()
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
val callText: String
|
||||
if (uaHistory[pos].directions.size > 1) callText = "Calls" else callText = "Call"
|
||||
if (uaHistory[pos].directions.size > 1)
|
||||
callText = getString(R.string.calls_calls)
|
||||
else
|
||||
callText = getString(R.string.calls_call)
|
||||
val builder = AlertDialog.Builder(this@CallsActivity, R.style.Theme_AppCompat)
|
||||
if (peerName.startsWith("sip:"))
|
||||
builder.setMessage("Do you want to add '" +
|
||||
"${Utils.friendlyUri(peerName, Utils.aorDomain(aor))}' to contacts " +
|
||||
"or delete ${callText.toLowerCase()} from history?")
|
||||
.setPositiveButton("Cancel", dialogClickListener)
|
||||
.setNegativeButton("Delete $callText", dialogClickListener)
|
||||
.setNeutralButton("Add Contact", dialogClickListener)
|
||||
builder.setMessage(String.format(getString(R.string.calls_add_delete_question),
|
||||
Utils.friendlyUri(peerName, Utils.aorDomain(aor)), callText))
|
||||
.setNeutralButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getString(R.string.add_contact), dialogClickListener)
|
||||
.setPositiveButton(String.format(getString(R.string.delete), callText),
|
||||
dialogClickListener)
|
||||
.show()
|
||||
else
|
||||
builder.setMessage("Do you want to delete ${callText.toLowerCase()} from history?")
|
||||
.setPositiveButton("Cancel", dialogClickListener)
|
||||
.setNegativeButton("Delete $callText", dialogClickListener)
|
||||
builder.setMessage(String.format(getString(R.string.calls_delete_question),
|
||||
Utils.friendlyUri(peerName, Utils.aorDomain(aor)), callText))
|
||||
.setNeutralButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setPositiveButton(String.format(getString(R.string.delete), callText),
|
||||
dialogClickListener)
|
||||
.show()
|
||||
true
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ class ChatActivity : AppCompatActivity() {
|
||||
listView.onItemLongClickListener = AdapterView.OnItemLongClickListener { _, _, pos, _ ->
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
val i = Intent(this, ContactActivity::class.java)
|
||||
val b = Bundle()
|
||||
b.putBoolean("new", true)
|
||||
@ -94,7 +94,7 @@ class ChatActivity : AppCompatActivity() {
|
||||
}
|
||||
Message.saveMessages(applicationContext.filesDir.absolutePath)
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -102,13 +102,13 @@ class ChatActivity : AppCompatActivity() {
|
||||
if (ContactsActivity.contactName(peerUri) == peerUri)
|
||||
builder.setMessage(String.format(getString(R.string.long_message_question),
|
||||
chatPeer))
|
||||
.setPositiveButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNeutralButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getString(R.string.delete), dialogClickListener)
|
||||
.setNeutralButton(getString(R.string.add_contact), dialogClickListener)
|
||||
.setPositiveButton(getString(R.string.add_contact), dialogClickListener)
|
||||
.show()
|
||||
else
|
||||
builder.setMessage(getText(R.string.short_message_question))
|
||||
.setPositiveButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNeutralButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getString(R.string.delete), dialogClickListener)
|
||||
.show()
|
||||
true
|
||||
|
||||
@ -38,7 +38,7 @@ class ChatListAdapter(private val cxt: Context, private var rows: ArrayList<Mess
|
||||
sender = peer
|
||||
} else {
|
||||
layout.setBackgroundResource(R.drawable.you_bg)
|
||||
sender = "You"
|
||||
sender = cxt.getString(R.string.you)
|
||||
}
|
||||
val peerView = chatView.findViewById(R.id.peer) as TextView
|
||||
peerView.setText(peer)
|
||||
@ -53,14 +53,14 @@ class ChatListAdapter(private val cxt: Context, private var rows: ArrayList<Mess
|
||||
val fmt = SimpleDateFormat("dd/MM, HH:mm")
|
||||
info = fmt.format(cal.time)
|
||||
}
|
||||
if (info.length < 6) info = "Today $info"
|
||||
if (info.length < 6) info = "${cxt.getString(R.string.today)} $info"
|
||||
infoView.text = "$info - $sender"
|
||||
if (message.direction == R.drawable.arrow_up_red) {
|
||||
if (message.responseCode != 0)
|
||||
infoView.text = "${infoView.text} - Failed: ${message.responseCode} " +
|
||||
"${message.responseReason}"
|
||||
infoView.text = "${infoView.text} - ${cxt.getString(R.string.message_failed)}: " +
|
||||
"${message.responseCode} ${message.responseReason}"
|
||||
else
|
||||
infoView.text = "${infoView.text} - Sending of message failed!"
|
||||
infoView.text = "${infoView.text} - ${cxt.getString(R.string.sending_failed)}"
|
||||
infoView.setTextColor(ContextCompat.getColor(cxt, R.color.colorAccent))
|
||||
}
|
||||
val textView = chatView.findViewById(R.id.text) as TextView
|
||||
|
||||
@ -35,7 +35,7 @@ class ChatsActivity: AppCompatActivity() {
|
||||
aor = intent.extras!!.getString("aor")!!
|
||||
|
||||
val headerView = findViewById(R.id.account) as TextView
|
||||
val headerText = "Account ${aor.substringAfter(":")}"
|
||||
val headerText = "${getString(R.string.account)} ${aor.substringAfter(":")}"
|
||||
headerView.text = headerText
|
||||
|
||||
uaMessages = uaMessages(aor)
|
||||
@ -55,7 +55,7 @@ class ChatsActivity: AppCompatActivity() {
|
||||
listView.onItemLongClickListener = AdapterView.OnItemLongClickListener { _, _, pos, _ ->
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
val i = Intent(this, ContactActivity::class.java)
|
||||
val b = Bundle()
|
||||
b.putBoolean("new", true)
|
||||
@ -76,7 +76,7 @@ class ChatsActivity: AppCompatActivity() {
|
||||
Message.saveMessages(filesPath)
|
||||
uaMessages = uaMessages(aor)
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -86,13 +86,13 @@ class ChatsActivity: AppCompatActivity() {
|
||||
if (peer.startsWith("sip:"))
|
||||
builder.setMessage(String.format(getString(R.string.long_chat_question),
|
||||
Utils.friendlyUri(peer, Utils.aorDomain(aor))))
|
||||
.setPositiveButton(getText(R.string.cancel), dialogClickListener)
|
||||
.setNeutralButton(getText(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getText(R.string.delete), dialogClickListener)
|
||||
.setNeutralButton(getText(R.string.add_contact), dialogClickListener)
|
||||
.setPositiveButton(getText(R.string.add_contact), dialogClickListener)
|
||||
.show()
|
||||
else
|
||||
builder.setMessage(String.format(getString(R.string.short_chat_question), peer))
|
||||
.setPositiveButton(getText(R.string.cancel), dialogClickListener)
|
||||
.setNeutralButton(getText(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getText(R.string.delete), dialogClickListener)
|
||||
.show()
|
||||
true
|
||||
@ -115,7 +115,8 @@ class ChatsActivity: AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
if (!Utils.checkSipUri(uri)) {
|
||||
Utils.alertView(this, "Notice", "Invalid SIP URI '$uri'")
|
||||
Utils.alertView(this, getString(R.string.error),
|
||||
getString(R.string.invalid_chat_peer_uri))
|
||||
} else {
|
||||
peerUri.text.clear()
|
||||
peerUri.isCursorVisible = false
|
||||
|
||||
@ -24,13 +24,13 @@ class ContactActivity : AppCompatActivity() {
|
||||
new = intent.getBooleanExtra("new", false)
|
||||
|
||||
if (new) {
|
||||
setTitle("New Contact")
|
||||
setTitle(getString(R.string.new_contact))
|
||||
nameView.setText("")
|
||||
nameView.hint = "Contact name"
|
||||
nameView.hint = getString(R.string.contact_name)
|
||||
nameView.setSelection(nameView.text.length)
|
||||
if (uri == "") {
|
||||
uriView.setText("")
|
||||
uriView.hint = "SIP URI"
|
||||
uriView.hint = getString(R.string.sip_uri)
|
||||
} else {
|
||||
uriView.setText(uri)
|
||||
}
|
||||
@ -58,30 +58,32 @@ class ContactActivity : AppCompatActivity() {
|
||||
|
||||
val newName = nameView.text.toString().trim()
|
||||
if (!Utils.checkName(newName)) {
|
||||
Utils.alertView(this, "Notice",
|
||||
"Invalid contact name: $newName")
|
||||
Utils.alertView(this, getString(R.string.error),
|
||||
String.format(getString(R.string.invalid_contact), newName))
|
||||
return false
|
||||
}
|
||||
if ((new || (Contact.contacts()[index].name != newName)) &&
|
||||
ContactsActivity.nameExists(newName)) {
|
||||
Utils.alertView(this, "Notice",
|
||||
"Contact $newName already exists")
|
||||
Utils.alertView(this, getString(R.string.error),
|
||||
String.format(getString(R.string.contact_already_exists), newName))
|
||||
return false
|
||||
}
|
||||
|
||||
var newUri = uriView.text.toString().trim()
|
||||
if (!newUri.startsWith("<")) {
|
||||
if (!newUri.startsWith("sip:")) newUri = "sip:$newUri"
|
||||
if (!Utils.checkAorUri(newUri)) {
|
||||
Utils.alertView(this, "Notice","Invalid contact URI: $newUri")
|
||||
if (!Utils.checkAor(newUri.substringAfter("sip:"))) {
|
||||
Utils.alertView(this, getString(R.string.error),
|
||||
String.format(getString(R.string.invalid_contact_uri), newUri))
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if (new) {
|
||||
if (Contact.contacts().size >= Contact.CONTACTS_SIZE) {
|
||||
Utils.alertView(this,
|
||||
"Notice", "Maximum number of contacts exceeded")
|
||||
Utils.alertView(this, getString(R.string.notice),
|
||||
String.format(getString(R.string.contacts_exceeded),
|
||||
Contact.CONTACTS_SIZE))
|
||||
return true
|
||||
} else {
|
||||
Contact.contacts().add(Contact(newName, newUri))
|
||||
|
||||
@ -31,11 +31,11 @@ class ContactListAdapter(private val cxt: Context, private val rows: ArrayList<C
|
||||
nameView.setOnClickListener { _ ->
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEUTRAL, DialogInterface.BUTTON_NEGATIVE -> {
|
||||
DialogInterface.BUTTON_POSITIVE, DialogInterface.BUTTON_NEGATIVE -> {
|
||||
val i = Intent(cxt, MainActivity::class.java)
|
||||
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or
|
||||
Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
if (which == DialogInterface.BUTTON_NEUTRAL)
|
||||
if (which == DialogInterface.BUTTON_NEGATIVE)
|
||||
i.putExtra("action", "call")
|
||||
else
|
||||
i.putExtra("action", "message")
|
||||
@ -48,36 +48,36 @@ class ContactListAdapter(private val cxt: Context, private val rows: ArrayList<C
|
||||
(cxt as Activity).startActivity(i)
|
||||
}
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEUTRAL -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
val builder = AlertDialog.Builder(cxt, R.style.Theme_AppCompat)
|
||||
builder.setMessage(String.format(cxt.getString(R.string.contact_action_question),
|
||||
Contact.contacts()[pos].name))
|
||||
.setNeutralButton(cxt.getText(R.string.call), dialogClickListener)
|
||||
.setNegativeButton(cxt.getText(R.string.send_message), dialogClickListener)
|
||||
.setPositiveButton(cxt.getText(R.string.cancel), dialogClickListener)
|
||||
.setNeutralButton(cxt.getText(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(cxt.getText(R.string.call), dialogClickListener)
|
||||
.setPositiveButton(cxt.getText(R.string.send_message), dialogClickListener)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
nameView.setOnLongClickListener { _ ->
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEGATIVE -> {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
Contact.contacts().removeAt(pos)
|
||||
ContactsActivity.saveContacts(cxt.applicationContext.filesDir)
|
||||
this.notifyDataSetChanged()
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEGATIVE -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
val builder = AlertDialog.Builder(cxt, R.style.Theme_AppCompat)
|
||||
builder.setMessage(String.format(cxt.getString(R.string.contact_delete_question),
|
||||
Contact.contacts()[pos].name))
|
||||
.setNegativeButton(cxt.getText(R.string.delete), dialogClickListener)
|
||||
.setPositiveButton(cxt.getText(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(cxt.getText(R.string.cancel), dialogClickListener)
|
||||
.setPositiveButton(cxt.getText(R.string.delete), dialogClickListener)
|
||||
.show()
|
||||
true
|
||||
}
|
||||
|
||||
@ -31,7 +31,8 @@ class ContactsActivity : AppCompatActivity() {
|
||||
plusButton.setOnClickListener {
|
||||
if (Contact.contacts().size >= Contact.CONTACTS_SIZE) {
|
||||
Utils.alertView(this, getString(R.string.notice),
|
||||
String.format(getString(R.string.contacts_exceeded), Contact.CONTACTS_SIZE))
|
||||
String.format(getString(R.string.contacts_exceeded),
|
||||
Contact.CONTACTS_SIZE))
|
||||
} else {
|
||||
val i = Intent(this, ContactActivity::class.java)
|
||||
val b = Bundle()
|
||||
@ -57,7 +58,8 @@ class ContactsActivity : AppCompatActivity() {
|
||||
when (item.itemId) {
|
||||
R.id.export_contacts -> {
|
||||
if (saveContacts(dir))
|
||||
Utils.alertView(this,"", getString(R.string.exported_contacts))
|
||||
Utils.alertView(this, "",
|
||||
getString(R.string.exported_contacts))
|
||||
else
|
||||
Utils.alertView(this,getString(R.string.error),
|
||||
getString(R.string.export_error))
|
||||
@ -65,7 +67,7 @@ class ContactsActivity : AppCompatActivity() {
|
||||
R.id.import_contacts -> {
|
||||
if (restoreContacts(dir)) {
|
||||
Utils.alertView(this, "",
|
||||
"Imported contacts from Download folder.")
|
||||
getString(R.string.imported_contacts))
|
||||
clAdapter.notifyDataSetChanged()
|
||||
saveContacts(applicationContext.filesDir)
|
||||
} else
|
||||
|
||||
@ -345,7 +345,7 @@ class MainActivity : AppCompatActivity() {
|
||||
if (acc.vmUri != "") {
|
||||
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
|
||||
when (which) {
|
||||
DialogInterface.BUTTON_NEGATIVE -> {
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
val callIntent = Intent(this, MainActivity::class.java)
|
||||
callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or
|
||||
Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||||
@ -354,16 +354,16 @@ class MainActivity : AppCompatActivity() {
|
||||
callIntent.putExtra("peer", acc.vmUri)
|
||||
startActivity(callIntent)
|
||||
}
|
||||
DialogInterface.BUTTON_POSITIVE -> {
|
||||
DialogInterface.BUTTON_NEGATIVE -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
val builder = AlertDialog.Builder(this@MainActivity,
|
||||
R.style.Theme_AppCompat)
|
||||
builder.setTitle(getString(R.string.voicemail_messages))
|
||||
builder.setMessage(acc.vmMessage())
|
||||
.setPositiveButton(getString(R.string.cancel), dialogClickListener)
|
||||
.setNegativeButton(getString(R.string.check), dialogClickListener)
|
||||
builder.setMessage(acc.vmMessages(this))
|
||||
.setPositiveButton(getString(R.string.listen), dialogClickListener)
|
||||
.setNegativeButton(getString(R.string.cancel), dialogClickListener)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,7 +28,7 @@ class MessageListAdapter(private val cxt: Context, private val rows: ArrayList<M
|
||||
if (up) {
|
||||
lp.setMargins(75, 10, 0, 10)
|
||||
layout.setBackgroundResource(R.drawable.you_bg)
|
||||
peer = "You"
|
||||
peer = cxt.getString(R.string.you)
|
||||
} else {
|
||||
lp.setMargins(0, 10, 75, 10)
|
||||
layout.setBackgroundResource(R.drawable.peer_bg)
|
||||
@ -51,14 +51,14 @@ class MessageListAdapter(private val cxt: Context, private val rows: ArrayList<M
|
||||
val fmt = SimpleDateFormat("dd/MM, HH:mm")
|
||||
info = fmt.format(cal.time)
|
||||
}
|
||||
if (info.length < 6) info = "Today $info"
|
||||
if (info.length < 6) info = "${cxt.getString(R.string.today)} $info"
|
||||
infoView.text = "$info - $peer"
|
||||
if (message.direction == R.drawable.arrow_up_red) {
|
||||
if (message.responseCode != 0)
|
||||
infoView.text = "${infoView.text} - Failed: ${message.responseCode} " +
|
||||
"${message.responseReason}"
|
||||
infoView.text = "${infoView.text} - ${cxt.getString(R.string.message_failed)}: " +
|
||||
"${message.responseCode} ${message.responseReason}"
|
||||
else
|
||||
infoView.text = "${infoView.text} - Sending of message failed!"
|
||||
infoView.text = "${infoView.text} - ${cxt.getString(R.string.sending_failed)}"
|
||||
infoView.setTextColor(ContextCompat.getColor(cxt, R.color.colorAccent))
|
||||
}
|
||||
val textView = messageView.findViewById(R.id.text) as TextView
|
||||
|
||||
@ -145,8 +145,18 @@ object Utils {
|
||||
}
|
||||
}
|
||||
|
||||
fun aorUser(aor: String): String {
|
||||
val user = aor.substringBefore("@")
|
||||
return if (user == aor) "" else user
|
||||
}
|
||||
|
||||
fun aorDomain(aor: String): String {
|
||||
return aor.substringAfter("@")
|
||||
val domain = aor.substringAfter("@")
|
||||
return if (domain == aor) "" else domain
|
||||
}
|
||||
|
||||
fun checkAor(aor: String): Boolean {
|
||||
return checkUriUser(aorUser(aor)) && checkDomain(aorDomain(aor))
|
||||
}
|
||||
|
||||
fun checkTelNo(no: String): Boolean {
|
||||
@ -244,14 +254,6 @@ object Utils {
|
||||
return false
|
||||
}
|
||||
|
||||
fun checkAorUri(uri: String): Boolean {
|
||||
if (!uri.startsWith("sip:")) return false
|
||||
val userDomain = uri.replace("sip:", "").split("@")
|
||||
if (userDomain.size != 2) return false
|
||||
if (!checkUriUser(userDomain[0])) return false
|
||||
return checkDomain(userDomain[1]) || checkIp(userDomain[1])
|
||||
}
|
||||
|
||||
fun checkPrintAscii(s: String): Boolean {
|
||||
if (s == "") return true
|
||||
return Regex("^[ -~]*\$").matches(s)
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
android:layout_toStartOf="@+id/addAccount"
|
||||
android:inputType="textEmailAddress"
|
||||
android:autofillHints="username"
|
||||
android:hint="@string/sip_uri_user_domain" >
|
||||
android:hint="@string/user_domain" >
|
||||
</EditText>
|
||||
|
||||
<ImageButton
|
||||
|
||||
@ -217,7 +217,7 @@
|
||||
android:padding="0dp"
|
||||
android:background="@null"
|
||||
android:src="@drawable/calls"
|
||||
android:contentDescription="@string/calls" >
|
||||
android:contentDescription="@string/call_history" >
|
||||
</ImageButton>
|
||||
|
||||
<ImageButton
|
||||
|
||||
@ -3,91 +3,100 @@
|
||||
|
||||
<!-- About Activity -->
|
||||
<string name="about_title">baresip Sovellus</string>
|
||||
<string name="about_text"><b>Baresip-kirjastoon perustuva Android sovellus</b>\\n\\n Juha Heinanen jh@tutpro.com\\n\\n Versio %1$s\\n\\n <b>Käyttövihjeitä</b>\\n\\n • Tarkista, että konfiguraation oletusarvot vastaavat tarpeitasi. Kunkin otsikon painallus tarjoaa apua.\\n • Sen jälkeen luo yksi tai useampi tili. Jälleen kunkin otsikon painallus tarjoaa apua.\\n Voit lisätä puheluiden ja viestien kohteet kontakteihin pitkällä painalluksella.\\n • Pitkillä painalluksilla voi myös poistaa puheluita, viestiketjuja, viestejä ja kontakteja.\\n • Voit soittaa edellisen puhelun uudelleen painamalla virheää luuria silloin, kun puhelun kohde on tyhjä.\\n • Jos et kuule, mitä toinen sanoo, yritä kasvattaa media-volyymia.\\n</string>
|
||||
<string name="about_text"><b>Baresip-kirjastoon perustuva Android sovellus</b>\n\n
|
||||
Juha Heinanen jh@tutpro.com\n\n
|
||||
Versio %1$s\n\n
|
||||
<b>Käyttövihjeitä</b>\n\n
|
||||
• Tarkista, että konfiguraation oletusarvot vastaavat tarpeitasi.
|
||||
Kunkin otsikon painallus tarjoaa apua.\n
|
||||
• Sen jälkeen luo yksi tai useampi tili. Jälleen kunkin otsikon painallus tarjoaa apua.\n
|
||||
• Voit lisätä puheluiden ja viestien kohteet kontakteihin pitkällä painalluksella.\n
|
||||
• Pitkillä painalluksilla voi myös poistaa puheluita, viestiketjuja,
|
||||
viestejä ja kontakteja.\n
|
||||
• Voit soittaa edellisen puhelun uudelleen painamalla virheää luuria silloin,
|
||||
kun puhelun kohde on tyhjä.\n
|
||||
• Jos et puhelun aikana kuule, mitä toinen sanoo, yritä kasvattaa media-volyymia.\n
|
||||
</string>
|
||||
|
||||
<!-- Account Activity -->
|
||||
<string name="account">Tili</string>
|
||||
<string name="display_name">Tilin käyttäjän nimi</string>
|
||||
<string name="your_name">Tilin käyttäjän nimi</string>
|
||||
<string name="display_name_help">Tilin käyttäjän nimi, joka esiintyy
|
||||
SIP-sanomien From URI:ssa (vapaaehtoinen).</string>
|
||||
SIP-sanomien From URI:ssa (vapaaehtoinen).</string>
|
||||
<string name="authentication_username">Käyttäjätunnus</string>
|
||||
<string name="authentication_username_help">Todentamiseen käytettävä
|
||||
käyttäjätunnus, jos välityspalvelin vaatii sellaisen.</string>
|
||||
<string name="authentication_password">Todentamiseen käytettävä salasana</string>
|
||||
käyttäjätunnus, jos välityspalvelin vaatii sellaisen.</string>
|
||||
<string name="authentication_password">Salasana</string>
|
||||
<string name="authentication_password_help">Todentamiseen käytettävä
|
||||
salasana, jos välityspalvelin vaatii sellaisen.</string>
|
||||
salasana, jos välityspalvelin vaatii sellaisen.</string>
|
||||
<string name="outbound_proxies">Välityspalvelimet</string>
|
||||
<string name="outbound_proxies_help">Yhden tai kahden
|
||||
välityspalvelimen SIP URI, joille SIP-sanomat lähetetään. Jos
|
||||
välityspalvelimia on annettu kaksi, REGISTER-sanomat yritetään
|
||||
lähettää molemmille välityspalvelimille ja muut sanomat yhdelle
|
||||
toiminnassa olevalle välityspalvelimelle, Jos välityspalvelimia ei
|
||||
ole annettu, SIP-sanomat lähetetään palvelimelle, mikä selviää
|
||||
kohde-URI:n domainille tehtävän NAPTR/SRV/A-tietueiden
|
||||
nimipalvelukyselyiden perusteella. Jos välityspalvelimen osoite SIP
|
||||
URI:ssa on IPv6-osoite, osoite pitää kirjoittaa sulkujen [] sisään.
|
||||
\nEsimerkkejä:\n• sip:foo.com:5060;transport=tls\n•
|
||||
sip:[2001:67c:223:777::10]:5060;transport=tcp\n
|
||||
välityspalvelimen SIP URI, joille SIP-sanomat lähetetään. Jos
|
||||
välityspalvelimia on annettu kaksi, REGISTER-sanomat yritetään
|
||||
lähettää molemmille välityspalvelimille ja muut sanomat yhdelle
|
||||
toiminnassa olevalle välityspalvelimelle. Jos välityspalvelimia ei
|
||||
ole annettu, SIP-sanomat lähetetään palvelimelle, mikä selviää
|
||||
kohteen domainille tehtävien NAPTR/SRV/Animipalvelukyselyiden perusteella.
|
||||
Jos välityspalvelimen osoite SIP
|
||||
URI:ssa on IPv6-osoite, osoite pitää kirjoittaa sulkujen [] sisään.
|
||||
\nEsimerkkejä:\n• sip:foo.com:5060;transport=tls\n•
|
||||
sip:[2001:67c:223:777::10]:5060;transport=tcp\n
|
||||
</string>
|
||||
<string name="sip_uri_of_proxy_server">Välityspalvelimen SIP URI</string>
|
||||
<string name="sip_uri_of_another_proxy_server">Toisen
|
||||
välityspalvelimem SIP URI</string>
|
||||
välityspalvelimen SIP URI</string>
|
||||
<string name="register">Rekisteröi</string>
|
||||
<string name="register_help">Jos merkitty, rekisteröinti on
|
||||
aktiivinen ja REGISTER-sanomat lähetetään noin 12 minuutin välein.
|
||||
aktiivinen ja REGISTER-sanomat lähetetään noin 12 minuutin välein.
|
||||
</string>
|
||||
<string name="audio_codecs">Äänen koodausmenetelmät</string>
|
||||
<string name="audio_codecs_help">Luettelo käytössä olevista äänen
|
||||
koodausmenetelmistä prioriteettijärjestyksessä,</string>
|
||||
<string name="media_nat">Media NAT:n hallinta</string>
|
||||
koodausmenetelmistä prioriteettijärjestyksessä.</string>
|
||||
<string name="media_nat">Media NAT hallinta</string>
|
||||
<string name="media_nat_help">Valitsee media NAT hallintaprotokollan
|
||||
(vapaaehtoinen). Vaihtoehtoja ovat STUN (Session Traversal Utilities
|
||||
for NAT, RFC 5389) ja ICE (Interactive Connectivity Establishment,
|
||||
RFC 5245).
|
||||
(vapaaehtoinen). Vaihtoehtoja ovat STUN (Session Traversal Utilities
|
||||
for NAT, RFC 5389) ja ICE (Interactive Connectivity Establishment, RFC 5245).
|
||||
</string>
|
||||
<string name="stun_server">STUN-palvelin</string>
|
||||
<string name="stun_server_help">STUN-palvelimen muotoa palvelin[:portti]
|
||||
oleva osoite. Oletusarvo on \'stun.l.google.com:19302\', joka
|
||||
osoittaa Google:n julkiseen STUN-palvelimeen. Käyttäjätunnusta ja
|
||||
salasanaa ei voi tällä hetkellä antaa.
|
||||
oleva osoite. Oletusarvo on \'stun.l.google.com:19302\', joka
|
||||
osoittaa Google:n julkiseen STUN-palvelimeen. Käyttäjätunnusta ja
|
||||
salasanaa ei voi tällä hetkellä antaa.
|
||||
</string>
|
||||
<string name="stun_server_default">stun.l.google.com:19302</string>
|
||||
<string name="media_encryption">Median salaus</string>
|
||||
<string name="media_encryption_help">Valitsee median
|
||||
salausprotokollan.\n
|
||||
• ZRTP (suositeltu) tarkoittaa, että
|
||||
ZRTP-salausta yritetään neuvotella sen jälkeen, kun puhelu on
|
||||
alkanut.\n
|
||||
• DTLS-SRTPF tarkoittaa, että
|
||||
UDP/TLS/RTP/SAVPF-protokollaa tarjotaan lähteviin puheluihin
|
||||
ja että RTP/SAVP-, RTP/SAVPF-, UDP/TLS/RTP/SAVP- tai
|
||||
UDP/TLS/RTP/SAVPF-protokollaa käytetään, jos sellaista tarjotaan
|
||||
tulevassa puhelussa.\n
|
||||
• SRTP-MANDF tarkoittaa, että RTP/SAVPF-protokollaa tarjotaan
|
||||
lähtevissä puheluissa ja että se vaaditaan tulevissa puheluissa.\n
|
||||
• SRTP-MAND takoittaa, että RTP/SAVP-protokollaa tarjotaan
|
||||
lähteviin puheluihin ja että se vaaditaan tulevissa puheluissa.\n
|
||||
• SRTP tarkoittaa, että RTP/AVP-protokollaa tarjotaan
|
||||
lähteviin puheluihin ja että RTP/SAVP- tai RTP/SAVPF-protokollaa
|
||||
käytetään, jos sellaista tarjotaan tulevissa puheluissa.\n
|
||||
• Ei mitään tarkoittaa, että mediaa ei salata.
|
||||
<string name="media_encryption_help">Valitsee median salausprotokollan (vapaaehtoinen).\n
|
||||
• ZRTP (suositeltu) tarkoittaa, että
|
||||
ZRTP-salausta yritetään neuvotella sen jälkeen, kun puhelu on
|
||||
alkanut.\n
|
||||
• DTLS-SRTPF tarkoittaa, että
|
||||
UDP/TLS/RTP/SAVPF-protokollaa tarjotaan lähteviin puheluihin
|
||||
ja että RTP/SAVP-, RTP/SAVPF-, UDP/TLS/RTP/SAVP- tai
|
||||
UDP/TLS/RTP/SAVPF-protokollaa käytetään, jos sellaista tarjotaan
|
||||
tulevassa puhelussa.\n
|
||||
• SRTP-MANDF tarkoittaa, että RTP/SAVPF-protokollaa tarjotaan
|
||||
lähtevissä puheluissa ja että se vaaditaan tulevissa puheluissa.\n
|
||||
• SRTP-MAND takoittaa, että RTP/SAVP-protokollaa tarjotaan
|
||||
lähteviin puheluihin ja että se vaaditaan tulevissa puheluissa.\n
|
||||
• SRTP tarkoittaa, että RTP/AVP-protokollaa tarjotaan
|
||||
lähteviin puheluihin ja että RTP/SAVP- tai RTP/SAVPF-protokollaa
|
||||
käytetään, jos sellaista tarjotaan tulevissa puheluissa.\n
|
||||
</string>
|
||||
<string name="voicemail_uri">Puheposti-URI</string>
|
||||
<string name="voicemail_uri">Puhepostin URI</string>
|
||||
<string name="voicemain_uri_help">SIP URI, jota käytetään
|
||||
puhepostiviestien kuunteluun. Jos URI:a ei ole annettu, tietoa
|
||||
mahdollista puhepostiviesteistä (Message Waiting Indications) ei
|
||||
tilata.
|
||||
puhepostiviestien kuunteluun. Jos URI:a ei ole annettu, tietoa
|
||||
mahdollista puhepostiviesteistä (Message Waiting Indications) ei tilata.
|
||||
</string>
|
||||
<string name="default_account">Oletustili</string>
|
||||
<string name="default_account_help">Jos merkitty, niin tämä tili on
|
||||
valittuna, kun baresip käynnistetään.
|
||||
valittuna, kun baresip käynnistetään.
|
||||
</string>
|
||||
|
||||
<!-- Accounts Activity -->
|
||||
<string name="accounts">Tilit</string>
|
||||
<string name="sip_uri_user_domain">SIP osoite käyttäjä@domain</string>
|
||||
<string name="invalid_aor">Virheellinen SIP osoite \'%1$s\'.</string>
|
||||
<string name="user_domain">käyttäjä@domain</string>
|
||||
<string name="invalid_aor">Virheellinen käyttäjä@domain \'%1$s\'.</string>
|
||||
<string name="account_exists">Tili \'%1$s\' on jo olemassa.</string>
|
||||
<string name="account_allocation_failure">"Uuden tilin luonti
|
||||
epäonnistui.
|
||||
@ -118,28 +127,42 @@
|
||||
<!-- Baresip Service -->
|
||||
<string name="answer">Vastaa</string>
|
||||
<string name="reject">Hylkää</string>
|
||||
<string name="incoming_call_from">Tuleva puhelu soittajalta</string>
|
||||
<string name="incoming_call_from">Puhelu soittajalta</string>
|
||||
<string name="transfer_request">Puhelun siirtopyyntö kohteeseen</string>
|
||||
<string name="message_from">Viesti lähettäjältä</string>
|
||||
|
||||
<!-- Calls Activity -->
|
||||
<string name="calls">Call History</string>
|
||||
<string name="call_history">Puheluhistoria</string>
|
||||
<string name="call">Soita</string>
|
||||
<string name="calls_calls">puhelut</string>
|
||||
<string name="calls_call">puhelun</string>
|
||||
<string name="calls_call_message_question">Haluatko soittaa tai lähettää viestin kohteeseen
|
||||
\'%1$s\'?
|
||||
</string>
|
||||
<string name="calls_add_delete_question">Haluatko luoda uuden kontaktin \'%1$s\' tai poistaa
|
||||
%2$s puheluhistoriasta?
|
||||
</string>
|
||||
<string name="calls_delete_question">Haluatko poistaa \'%1$s\' %2$s puheluhistoriasta?</string>
|
||||
|
||||
<!-- Chat Activity -->
|
||||
<string name="chat">Viestiketju</string>
|
||||
<string name="chat_with">%1$s viestit</string>
|
||||
<string name="chat_with">Viestiketju %1$s</string>
|
||||
<string name="new_message">Uusi viesti</string>
|
||||
<string name="long_message_question">Haluatko poistaa viestin tai
|
||||
lisätä kohteen \'%1$s\' kontakteihin?</string>
|
||||
luoda uuden kontaktin \'%1$s\'?</string>
|
||||
<string name="short_message_question">Haluatko poistaa viestin?</string>
|
||||
<string name="add_contact">Lisää kontakti</string>
|
||||
<string name="message_failed">Viestin lähetys epäonnistui</string>
|
||||
<string name="sending_failed">Viestin lähetys epäonnistui</string>
|
||||
<string name="message_failed">Epäonnistui</string>
|
||||
|
||||
<!-- Chats Activity -->
|
||||
<string name="chats">Viestiketjut</string>
|
||||
<string name="new_chat_peer">Uusi viestiketju</string>
|
||||
<string name="today">Tänään</string>
|
||||
<string name="you">Sinä</string>
|
||||
<string name="new_chat_peer">Uusi viestin kohde</string>
|
||||
<string name="invalid_chat_peer_uri">Virheellinen SIP URI</string>
|
||||
<string name="long_chat_question">Haluatko poistaa viestiketjun tai
|
||||
lisätä URI:n \'%1$s\' kontakteihin?</string>
|
||||
luoda uuden kontaktin \'%1$s\'?</string>
|
||||
<string name="short_chat_question">Haluatko poistaa viestiketjun
|
||||
\'%1$s\'?
|
||||
</string>
|
||||
@ -151,8 +174,8 @@
|
||||
käynnistyy automaattisesti, kun laite käynnistyy.</string>
|
||||
<string name="listen_address">Kuunteluosoite</string>
|
||||
<string name="listen_address_help">IP-osoite ja portti muotoa
|
||||
\'osoite:portti\', missä baresip ottaa vastaan sisään tulevat
|
||||
SIP-sanomat. Jos IP-osoite on IPv6-osoite, se täytyy kirjoittaa
|
||||
\'osoite:portti\', missä baresip kuuntelee sisään tulevia
|
||||
SIP-sanomia. Jos IP-osoite on IPv6-osoite, se täytyy kirjoittaa
|
||||
sulkujen [] sisään. IPv4-osoite 0.0.0.0 tai IPv6-osoite [::]
|
||||
tarkoittaa kaikkia käytössä olevia osoitteita. Oletusarvo on tyhjä,
|
||||
jolloin baresip kuuntelee porttia 5060 kaikilla käytössä olevilla
|
||||
@ -160,11 +183,11 @@
|
||||
</string>
|
||||
<string name="prefer_ipv6">Suosi IPv6-protokollaa</string>
|
||||
<string name="prefer_ipv6_help">Jos merkitty, baresip suosii
|
||||
IPv6-protokollaa, jos sekä IPv4 että IPv6 ovat käytettävissä.</string>
|
||||
IPv6-protokollaa, mikäli sekä IPv4 että IPv6 ovat käytettävissä.</string>
|
||||
<string name="dns_servers">DNS-palvelimet</string>
|
||||
<string name="dns_servers_help">Pilkuilla toisistaan erotettu
|
||||
<string name="dns_servers_help">Pilkulla toisistaan erotettu
|
||||
luettelo DNS-palvelijoita. Kukin DNS-palvelija on muotoa
|
||||
\'palvelin:portti\'. If palvelin on IPv6-osoite, osoite pitää
|
||||
\'palvelin:portti\'. Jos palvelin on IPv6-osoite, osoite pitää
|
||||
kirjoittaa sulkujen [] sisään. Oletusarvo on
|
||||
\'8.8.8.8:53,[2001:4860:4860::8888]:53\', mikä osoittaa Googlen
|
||||
julkisiin DNS-palvelijoihin.</string>
|
||||
@ -178,23 +201,25 @@
|
||||
käytössä.
|
||||
</string>
|
||||
<string name="default_call_volume">Oletus äänen voimakkuus</string>
|
||||
<string name="default_call_volume_help">Jos valittu, puhelun oletus
|
||||
äänen voimakkuus asteikolla 1–10.
|
||||
<string name="default_call_volume_help">Jos valittu, puhelun äänen voimakkuus
|
||||
asteikolla 1–10.
|
||||
</string>
|
||||
<string name="debug">Lokiviestit</string>
|
||||
<string name="debug_help">Jos valittu, baresip tuottaa debug- ja
|
||||
<string name="debug_help">Jos merkitty, baresip tuottaa debug- ja
|
||||
info-tason logcat lokiviestejä.
|
||||
</string>
|
||||
<string name="reset_config">Palauta oletuskonfiguraatio</string>
|
||||
<string name="reset_config_help">Jos valittu, palautetaan
|
||||
oletuskonfiguraatio.
|
||||
<string name="reset_config_help">Jos merkitty, oletuskonfiguraatio palautetaan, kun
|
||||
baresip seuraavan kerran käynnistetään.
|
||||
</string>
|
||||
|
||||
<!-- Contact Activity -->
|
||||
<string name="contact">Kontakti</string>
|
||||
<string name="contact_name">Kontaktin nimi</string>
|
||||
<string name="export_contacts">Tallenna</string>
|
||||
<string name="import_contacts">Palauta</string>
|
||||
<string name="new_contact">Uusi kontakti</string>
|
||||
<string name="contact_name">Nimi</string>
|
||||
<string name="invalid_contact">Virheellinen kontaktin nimi \'%1$s\'</string>
|
||||
<string name="contact_already_exists">Kontakti \'%1$s\' on jo olemassa</string>
|
||||
<string name="invalid_contact_uri">Virheellinen SIP URI \'%1$s\'</string>
|
||||
|
||||
<!-- Contacts Activity -->
|
||||
<string name="contacts">Kontaktit</string>
|
||||
@ -207,6 +232,7 @@
|
||||
<string name="contacts_exceeded">Kontaktiesi enimmäismäärä %1$d on
|
||||
ylittynyt.
|
||||
</string>
|
||||
<string name="export_contacts">Tallenna</string>
|
||||
<string name="exported_contacts">Kontaktit tallennettiin
|
||||
Download-kansion tiedostoon \'contacts.bs\'.
|
||||
</string>
|
||||
@ -214,8 +240,8 @@
|
||||
epäonnistui. Tarkista Sovellukset -> baresip -> Käyttöluvat ->
|
||||
Tallennustila.
|
||||
</string>
|
||||
<string name="imported_contacts">Palautettiin kontaktit
|
||||
Download-kansiosta.
|
||||
<string name="import_contacts">Palauta</string>
|
||||
<string name="imported_contacts">Kontaktit palautettiin Download-kansiosta.
|
||||
</string>
|
||||
<string name="import_error">Kontantien palauttaminen
|
||||
Download-kansiosta epäonnistui. Tarkista Sovellukset -> baresip ->
|
||||
@ -228,7 +254,6 @@
|
||||
<string name="info">Tieto</string>
|
||||
<string name="notice">Huomio</string>
|
||||
<string name="cancel">Peruuta</string>
|
||||
<string name="check">Tarkista</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Kyllä</string>
|
||||
<string name="no">Ei</string>
|
||||
@ -248,10 +273,9 @@
|
||||
<string name="quit">Lopeta</string>
|
||||
<string name="outgoing_call_to_dots">Lähtevä puhelu …</string>
|
||||
<string name="incoming_call_from_dots">Tuleva puhelu …</string>
|
||||
<string name="transferring_call_to_dots">Puhelun siirto …</string>
|
||||
<string name="transferring_call_to_dots">Siirtopuhelu …</string>
|
||||
<string name="invalid_sip_uri">Virheellinen SIP URI</string>
|
||||
<string name="callee">Puhelun kohde</string>
|
||||
<string name="call">Puhelu</string>
|
||||
<string name="hangup">Lopeta</string>
|
||||
<string name="hold">Aseta puhelu pitoon</string>
|
||||
<string name="dtmf">DTMF</string>
|
||||
@ -261,6 +285,14 @@
|
||||
<string name="rate">Nopeus</string>
|
||||
<string name="voicemail">Puheposti</string>
|
||||
<string name="voicemail_messages">Puhepostiviestit</string>
|
||||
<string name="you_have">Sinulla on</string>
|
||||
<string name="one_new_message">yksi uusi viesti</string>
|
||||
<string name="new_messages">uutta viestiä</string>
|
||||
<string name="one_old_message">yksi vanha viesti</string>
|
||||
<string name="old_messages">vanhaa viestiä</string>
|
||||
<string name="and">ja</string>
|
||||
<string name="no_messages">Sinulla ei ole viestejä</string>
|
||||
<string name="listen">Kuuntele</string>
|
||||
<string name="messages">Viestit</string>
|
||||
<string name="dialpad">Numeronäppäimistö</string>
|
||||
<string name="call_already_active">Sinulla on jo puhelu käynnissä
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
</string>
|
||||
<string name="stun_server_default">stun.l.google.com:19302</string>
|
||||
<string name="media_encryption">Media Encryption</string>
|
||||
<string name="media_encryption_help">Selects media transport encryption protocol.\n
|
||||
<string name="media_encryption_help">Selects media transport encryption protocol (if any).\n
|
||||
• ZRTP (recommended) means that ZRTP end-to-end media encryption negotiation is tried after
|
||||
the call has been established.\n
|
||||
• DTLS-SRTPF means that UDP/TLS/RTP/SAVPF is offered in outgoing call and that RTP/SAVP,
|
||||
@ -64,9 +64,7 @@
|
||||
• SRTP-MANDF means that RTP/SAVPF is offered in outgoing call and required in incoming call.\n
|
||||
• SRTP-MAND means that RTP/SAVP is offered in outgoing call and required in incoming call.\n
|
||||
• SRTP means that RTP/AVP is offered in outgoing call and that RTP/SAVP or RTP/SAVPF is used
|
||||
if offered in incoming call.\n
|
||||
• None means that media encryption is not supported and that media transport protocol
|
||||
thus is RTP/AVP.
|
||||
if offered in incoming call.
|
||||
</string>
|
||||
<string name="voicemail_uri">Voicemail URI</string>
|
||||
<string name="voicemain_uri_help">SIP URI for checking of voicemail messages. If left empty, voicemail
|
||||
@ -78,8 +76,8 @@
|
||||
|
||||
<!-- Accounts Activity -->
|
||||
<string name="accounts">Accounts</string>
|
||||
<string name="sip_uri_user_domain">SIP Address user@domain</string>
|
||||
<string name="invalid_aor">Invalid SIP Addess \'%1$s\'.</string>
|
||||
<string name="user_domain">user@domain</string>
|
||||
<string name="invalid_aor">Invalid user@domain \'%1$s\'</string>
|
||||
<string name="account_exists">Account \'%1$s\' already exists.</string>
|
||||
<string name="account_allocation_failure">"Failed to allocate new account.</string>
|
||||
<string name="encrypt_password">Encrypt Password</string>
|
||||
@ -101,12 +99,21 @@
|
||||
<!-- Baresip Service -->
|
||||
<string name="answer">Answer</string>
|
||||
<string name="reject">Reject</string>
|
||||
<string name="incoming_call_from">Incoming call from</string>
|
||||
<string name="incoming_call_from">Call from</string>
|
||||
<string name="transfer_request">Call transfer request to</string>
|
||||
<string name="message_from">Message from</string>
|
||||
|
||||
<!-- Calls Activity -->
|
||||
<string name="calls">Call History</string>
|
||||
<string name="call_history">Call History</string>
|
||||
<string name="call">Call</string>
|
||||
<string name="calls_calls">calls</string>
|
||||
<string name="calls_call">call</string>
|
||||
<string name="calls_call_message_question">Do you want to call or send message to \'%1$s\'?</string>
|
||||
<string name="calls_add_delete_question">Do you want to add \'%1$s\' to contacts or delete
|
||||
%2$s from call history?
|
||||
</string>
|
||||
<string name="calls_delete_question">Do you want to delete \'%1$s\' %2$s from call history?
|
||||
</string>
|
||||
|
||||
<!-- Chat Activity -->
|
||||
<string name="chat">Chat Messages</string>
|
||||
@ -115,11 +122,15 @@
|
||||
<string name="long_message_question">Do you want to delete message or add peer \'%1$s\' to contacts?</string>
|
||||
<string name="short_message_question">Do you want to delete message?</string>
|
||||
<string name="add_contact">Add Contact</string>
|
||||
<string name="message_failed">Sending of message failed</string>
|
||||
<string name="sending_failed">Sending of message failed</string>
|
||||
<string name="message_failed">Failed</string>
|
||||
|
||||
<!-- Chats Activity -->
|
||||
<string name="chats">Chat History</string>
|
||||
<string name="today">Today</string>
|
||||
<string name="you">You</string>
|
||||
<string name="new_chat_peer">New Chat Peer</string>
|
||||
<string name="invalid_chat_peer_uri">Invalid SIP URI</string>
|
||||
<string name="long_chat_question">Do you want to delete chat with peer \'%1$s\' or
|
||||
add peer to contacts?</string>
|
||||
<string name="short_chat_question">Do you want to delete chat with \'%1$s\'?</string>
|
||||
@ -159,9 +170,13 @@
|
||||
|
||||
<!-- Contact Activity -->
|
||||
<string name="contact">Contact</string>
|
||||
<string name="contact_name">Contact Name</string>
|
||||
<string name="new_contact">New Contact</string>
|
||||
<string name="contact_name">Name</string>
|
||||
<string name="export_contacts">Export</string>
|
||||
<string name="import_contacts">Import</string>
|
||||
<string name="invalid_contact">Invalid contact name \'%1$s\'</string>
|
||||
<string name="contact_already_exists">Contact \'%1$s\' already exists</string>
|
||||
<string name="invalid_contact_uri">Invalid SIP URI</string>
|
||||
|
||||
<!-- Contacts Activity -->
|
||||
<string name="contacts">Contacts</string>
|
||||
@ -183,7 +198,6 @@
|
||||
<string name="info">Info</string>
|
||||
<string name="notice">Notice</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="check">Check</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
@ -208,7 +222,6 @@
|
||||
<string name="transferring_call_to_dots">Transferring call to …</string>
|
||||
<string name="invalid_sip_uri">Invalid SIP URI</string>
|
||||
<string name="callee">Callee</string>
|
||||
<string name="call">Call</string>
|
||||
<string name="hangup">Hangup</string>
|
||||
<string name="hold">Hold</string>
|
||||
<string name="dtmf">DTMF</string>
|
||||
@ -218,6 +231,14 @@
|
||||
<string name="rate">Rate</string>
|
||||
<string name="voicemail">Voicemail</string>
|
||||
<string name="voicemail_messages">Voicemail Messages</string>
|
||||
<string name="you_have">You have</string>
|
||||
<string name="one_new_message">one new message</string>
|
||||
<string name="new_messages">new messages</string>
|
||||
<string name="one_old_message">one old message</string>
|
||||
<string name="old_messages">old messages</string>
|
||||
<string name="and">and</string>
|
||||
<string name="no_messages">You have no messages</string>
|
||||
<string name="listen">Listen</string>
|
||||
<string name="messages">Messages</string>
|
||||
<string name="dialpad">Dialpad</string>
|
||||
<string name="call_already_active">You already have an active call!</string>
|
||||
|
||||
Reference in New Issue
Block a user