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