improved contact related activities

This commit is contained in:
Juha Heinanen
2018-06-13 10:06:29 +03:00
parent 607c27a159
commit b7cb2b7c47
6 changed files with 90 additions and 60 deletions

View File

@ -0,0 +1,3 @@
package com.tutpro.baresip
class Contact(var name: String, var uri: String)

View File

@ -17,13 +17,23 @@ class ContactActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_contact)
index = intent.extras.getInt("index")
val name = ContactsActivity.contactNames[index]
val uri = ContactsActivity.contactURIs[index]
new = intent.extras.getBoolean("new")
val name: String
val uri: String
if (new) {
name = intent.extras.getString("name")
uri = intent.extras.getString("uri")
} else {
index = intent.extras.getInt("index")
name = ContactsActivity.contacts[index].name
uri = ContactsActivity.contacts[index].uri
}
setTitle(name)
nameView = findViewById(R.id.Name) as EditText
nameView.setText(name)
if (new) nameView.setSelection(nameView.text.length)
uriView = findViewById(R.id.Uri) as EditText
uriView.setText(uri)
@ -42,25 +52,37 @@ class ContactActivity : AppCompatActivity() {
if (item.itemId == R.id.checkIcon) {
val name = nameView.text.toString().trim()
if (!Utils.checkName(name)) {
val newName = nameView.text.toString().trim()
if (!Utils.checkName(newName)) {
Utils.alertView(this, "Notice",
"Invalid contact name: $name")
"Invalid contact name: $newName")
return false
}
if ((new || (ContactsActivity.contacts[index].name != newName)) &&
ContactsActivity.nameExists(newName)) {
Utils.alertView(this, "Notice",
"Contact $newName already exists")
return false
}
var uri = uriView.text.toString().trim()
if (!uri.startsWith("<")) {
if (!uri.startsWith("sip:")) uri = "sip:$uri"
if (!Utils.checkUri(uri)) {
Utils.alertView(this, "Notice","Invalid contact URI: $uri")
var newUri = uriView.text.toString().trim()
if (!newUri.startsWith("<")) {
if (!newUri.startsWith("sip:")) newUri = "sip:$newUri"
if (!Utils.checkUri(newUri)) {
Utils.alertView(this, "Notice","Invalid contact URI: $newUri")
return false
}
}
ContactsActivity.contactNames[index] = name
ContactsActivity.contactURIs[index] = uri
if (new) {
ContactsActivity.contacts.add(Contact(newName, newUri))
} else {
ContactsActivity.contacts[index].uri = newUri
ContactsActivity.contacts[index].name = newName
}
ContactsActivity.contacts.sortBy { Contact -> Contact.name }
ContactsActivity.saveContacts()
setResult(RESULT_OK, i)
finish()
return true
@ -77,6 +99,7 @@ class ContactActivity : AppCompatActivity() {
companion object {
internal var index = 0
internal var new = false
}
}

View File

@ -15,20 +15,21 @@ import android.widget.TextView
import java.util.*
class ContactListAdapter(private val cxt: Context, private val rows: ArrayList<String>) :
ArrayAdapter<String>(cxt, R.layout.contact_row, rows) {
class ContactListAdapter(private val cxt: Context, private val rows: ArrayList<Contact>) :
ArrayAdapter<Contact>(cxt, R.layout.contact_row, rows) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val row = rows[position]
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val rowView = inflater.inflate(R.layout.contact_row, parent, false)
val nameView = rowView.findViewById(R.id.contactName) as TextView
nameView.text = row
nameView.text = row.name
nameView.textSize = 20f
nameView.setPadding(6, 6, 0, 6)
nameView.setOnClickListener { _ ->
val i = Intent(cxt, ContactActivity::class.java)
val b = Bundle()
b.putBoolean("new", false)
b.putInt("index", position)
i.putExtras(b)
(cxt as Activity).startActivityForResult(i, MainActivity.CONTACT_CODE)
@ -38,10 +39,9 @@ class ContactListAdapter(private val cxt: Context, private val rows: ArrayList<S
actionView.setOnClickListener { _ ->
Log.d("Baresip", "Delete button clicked")
val deleteDialog = AlertDialog.Builder(cxt)
deleteDialog.setMessage("Do you want to delete contact ${row}")
deleteDialog.setMessage("Do you want to delete contact ${row.name}")
deleteDialog.setPositiveButton("Delete") { dialog, _ ->
ContactsActivity.contactNames.removeAt(position)
ContactsActivity.contactURIs.removeAt(position)
ContactsActivity.contacts.removeAt(position)
ContactsActivity.saveContacts()
this.notifyDataSetChanged()
dialog.dismiss()

View File

@ -23,8 +23,8 @@ class ContactsActivity : AppCompatActivity() {
setContentView(R.layout.activity_contacts)
val listview = findViewById(R.id.contacts) as ListView
Log.d("Baresip", "Got ${contactNames.size} contacts")
clAdapter = ContactListAdapter(this, contactNames)
Log.d("Baresip", "Got ${contacts.size} contacts")
clAdapter = ContactListAdapter(this, contacts)
listview.adapter = clAdapter
val addContactButton = findViewById(R.id.addContact) as ImageButton
@ -35,27 +35,31 @@ class ContactsActivity : AppCompatActivity() {
Log.e("Baresip", "Invalid contact name $name")
Utils.alertView(this, "Notice",
"Invalid contact name: $name")
} else if (contactNames.contains(name)) {
Log.e("Baresip", "Contact name $name already exists")
} else if (nameExists(name)) {
Utils.alertView(this, "Notice",
"Contact $name already exists")
} else {
newNameView.setText("")
newNameView.hint = "Contact name"
newNameView.clearFocus()
contactNames.add(name)
contactURIs.add("")
clAdapter.notifyDataSetChanged()
saveContacts()
val i = Intent(this, ContactActivity::class.java)
val b = Bundle()
b.putInt("index", contactNames.size - 1)
b.putBoolean("new", true)
b.putString("name", name)
b.putString("uri", "")
i.putExtras(b)
startActivityForResult(i, MainActivity.CONTACT_CODE)
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == RESULT_OK) {
Log.d("Baresip", "Notifying clAdapter")
clAdapter.notifyDataSetChanged()
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
@ -68,52 +72,55 @@ class ContactsActivity : AppCompatActivity() {
return true
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == RESULT_OK) {
Log.d("Baresip", "Notifying clAdapter")
clAdapter.notifyDataSetChanged()
}
override fun onBackPressed() {
Log.d("Baresip", "Back button was pressed at Contacts")
val i = Intent()
setResult(Activity.RESULT_OK, i)
finish()
}
companion object {
var contactNames = ArrayList<String>()
var contactURIs = ArrayList<String>()
var contacts = ArrayList<Contact>()
fun generateContacts(path: String) {
val content = Utils.getFileContents(File(path))
MainActivity.contacts_remove()
contactNames.clear()
contactURIs.clear()
contacts.clear()
content.lines().forEach {
val parts = it.split("\"")
if (parts.size == 3) {
val name = parts[1]
var uri = parts[2].trim()
val uri = parts[2].trim()
MainActivity.contact_add("\"$name\" $uri")
contactNames.add(name)
contactURIs.add(uri)
contacts.add(Contact(name, uri))
}
}
}
fun saveContacts() {
var contents = ""
for (i in contactNames.indices)
contents += "\"${contactNames[i]}\" ${contactURIs[i]}\n"
for (c in contacts)
contents += "\"${c.name}\" ${c.uri}\n"
val path = MainActivity.filesPath + "/contacts"
Utils.putFileContents(File(path), contents)
Log.d("Baresip", "Saved contacts '${contents}' to '$path")
}
fun findContactURI(name: String): String {
for (i in contactNames.indices)
if (contactNames[i] == name)
return contactURIs[i].removePrefix("<")
for (c in contacts)
if (c.name == name)
return c.uri.removePrefix("<")
.replaceAfter(">", "")
.replace(">", "")
return name
}
fun nameExists(name: String): Boolean {
for (c in contacts)
if (c.name.equals(name, ignoreCase = true)) return true
return false
}
}
}

View File

@ -27,8 +27,7 @@ class HistoryActivity : AppCompatActivity() {
val listview = findViewById(R.id.history) as ListView
val b = intent.extras
aor = b.getString("aor")
aor = intent.extras.getString("aor")
aorGenerateHistory(aor)
val adapter = HistoryListAdapter(this, uaHistory)
@ -44,16 +43,15 @@ class HistoryActivity : AppCompatActivity() {
val dialogClickListener = DialogInterface.OnClickListener { _, which ->
when (which) {
DialogInterface.BUTTON_NEUTRAL -> {
ContactsActivity.contactNames.add("New Name")
if (uaHistory[pos].peerDomain == "")
ContactsActivity.contactURIs.add(uaHistory[pos].peerURI)
else
ContactsActivity.contactURIs.add("sip:${uaHistory[pos].peerURI}" +
"@" + uaHistory[pos].peerDomain)
ContactsActivity.saveContacts()
val i = Intent(this, ContactActivity::class.java)
val b = Bundle()
b.putInt("index", ContactsActivity.contactNames.size - 1)
b.putBoolean("new", true)
b.putString("name", "New Name")
if (uaHistory[pos].peerDomain == "")
b.putString("uri", uaHistory[pos].peerURI)
else
b.putString("uri", "sip:${uaHistory[pos].peerURI}@" +
uaHistory[pos].peerDomain)
i.putExtras(b)
startActivityForResult(i, MainActivity.CONTACT_CODE)
}

View File

@ -44,7 +44,6 @@ class MainActivity : AppCompatActivity() {
internal lateinit var dtmf: EditText
internal lateinit var uaAdapter: UaSpinnerAdapter
internal lateinit var aorSpinner: Spinner
internal lateinit var calleeAdapter: ArrayAdapter<String>
internal lateinit var am: AudioManager
internal lateinit var imm: InputMethodManager
internal lateinit var nm: NotificationManager
@ -228,9 +227,8 @@ class MainActivity : AppCompatActivity() {
"/contacts")
callee.threshold = 2
calleeAdapter = ArrayAdapter(this,
android.R.layout.select_dialog_item, ContactsActivity.contactNames)
callee.setAdapter(calleeAdapter)
callee.setAdapter(ArrayAdapter(this, android.R.layout.select_dialog_item,
ContactsActivity.contacts.map{Contact -> Contact.name}))
securityButton.setOnClickListener {
when (securityButton.tag) {
@ -472,7 +470,8 @@ class MainActivity : AppCompatActivity() {
}
CONTACTS_CODE -> {
calleeAdapter.notifyDataSetChanged()
callee.setAdapter(ArrayAdapter(this, android.R.layout.select_dialog_item,
ContactsActivity.contacts.map{Contact -> Contact.name}))
}
EDIT_CONFIG_CODE -> {