diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f513fdb5..78ccbdfc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,6 +8,8 @@
+
+
Contact.name }
- ContactsActivity.saveContacts(applicationContext.filesDir.absolutePath)
+ ContactsActivity.saveContacts(applicationContext.filesDir)
i.putExtra("name", newName)
setResult(Activity.RESULT_OK, i)
diff --git a/app/src/main/kotlin/com/tutpro/baresip/ContactListAdapter.kt b/app/src/main/kotlin/com/tutpro/baresip/ContactListAdapter.kt
index 025fa550..64b1850b 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/ContactListAdapter.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/ContactListAdapter.kt
@@ -67,7 +67,7 @@ class ContactListAdapter(private val cxt: Context, private val rows: ArrayList {
Contact.contacts().removeAt(pos)
- ContactsActivity.saveContacts()
+ ContactsActivity.saveContacts(cxt.applicationContext.filesDir)
this.notifyDataSetChanged()
}
DialogInterface.BUTTON_POSITIVE -> {
diff --git a/app/src/main/kotlin/com/tutpro/baresip/ContactsActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/ContactsActivity.kt
index 7c96dd0d..3092baea 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/ContactsActivity.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/ContactsActivity.kt
@@ -3,8 +3,10 @@ package com.tutpro.baresip
import android.app.Activity
import android.content.*
import android.os.Bundle
+import android.os.Environment
import android.support.v7.app.AppCompatActivity
import android.util.Log
+import android.view.Menu
import android.view.MenuItem
import android.widget.ImageButton
import android.widget.ListView
@@ -19,8 +21,6 @@ class ContactsActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_contacts)
- filesPath = applicationContext.filesDir.absolutePath
-
val listView = findViewById(R.id.contacts) as ListView
val aor = intent.extras.getString("aor")
@@ -49,8 +49,35 @@ class ContactsActivity : AppCompatActivity() {
if (resultCode == RESULT_OK) clAdapter.notifyDataSetChanged()
}
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
+ menuInflater.inflate(R.menu.contacts_menu, menu)
+ return true
+ }
+
override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
when (item.itemId) {
+ R.id.export_contacts -> {
+ if (saveContacts(dir))
+ Utils.alertView(this,"",
+ "Exported contacts to Download folder.")
+ else
+ Utils.alertView(this,"Error",
+ "Failed to export contacts to Download folder. " +
+ "Check Apps -> baresip -> Permissions -> Storage.")
+ }
+ R.id.import_contacts -> {
+ if (restoreContacts(dir)) {
+ Utils.alertView(this, "",
+ "Imported contacts from Download folder.")
+ clAdapter.notifyDataSetChanged()
+ saveContacts(applicationContext.filesDir)
+ } else
+ Utils.alertView(this,"Error",
+ "Failed to import contacts from Download folder. " +
+ "Check Apps -> baresip -> Permissions -> Storage and that " +
+ "the file exists in the folder.")
+ }
android.R.id.home -> {
Log.d("Baresip", "Back array was pressed at Contacts")
val i = Intent()
@@ -70,17 +97,17 @@ class ContactsActivity : AppCompatActivity() {
companion object {
- internal var filesPath = ""
- fun saveContacts(path: String = filesPath) {
+ fun saveContacts(path: File): Boolean {
var contents = ""
for (c in Contact.contacts())
contents += "\"${c.name}\" ${c.uri}\n"
- Utils.putFileContents(File(path + "/contacts"), contents)
+ return Utils.putFileContents(File(path, "contacts"), contents)
}
- fun restoreContacts(path: String = filesPath) {
- val content = Utils.getFileContents(File(path + "/contacts"))
+ fun restoreContacts(path: File): Boolean {
+ val content = Utils.getFileContents(File(path, "contacts"))
+ if (content == "Failed") return false
Api.contacts_remove()
Contact.contacts().clear()
content.lines().forEach {
@@ -92,6 +119,7 @@ class ContactsActivity : AppCompatActivity() {
Contact.contacts().add(Contact(name, uri))
}
}
+ return true
}
fun findContactURI(name: String): String {
diff --git a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt
index a63769d6..f73fb6bc 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/MainActivity.kt
@@ -186,7 +186,7 @@ class MainActivity : AppCompatActivity() {
}
}
- ContactsActivity.restoreContacts(applicationContext.filesDir.absolutePath)
+ ContactsActivity.restoreContacts(applicationContext.filesDir)
callUri.setAdapter(ArrayAdapter(this, android.R.layout.select_dialog_item,
Contact.contacts().map{Contact -> Contact.name}))
callUri.threshold = 2
@@ -657,8 +657,7 @@ class MainActivity : AppCompatActivity() {
super.onNewIntent(intent)
val action = intent.getStringExtra("action")
Log.d("Baresip", "onNewIntent action '$action'")
- if (action != null)
- handleIntent(intent)
+ if (action != null) handleIntent(intent)
}
private fun handleIntent(intent: Intent) {
diff --git a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt
index 3078c59b..574c3f28 100644
--- a/app/src/main/kotlin/com/tutpro/baresip/Utils.kt
+++ b/app/src/main/kotlin/com/tutpro/baresip/Utils.kt
@@ -16,7 +16,7 @@ object Utils {
fun getFileContents(file: File): String {
if (!file.exists()) {
Log.e("Baresip", "Failed to find file: " + file.path)
- return ""
+ return "Failed"
} else {
val length = file.length().toInt()
val bytes = ByteArray(length)
@@ -31,13 +31,13 @@ object Utils {
} catch (e: java.io.IOException) {
Log.e("Baresip", "Failed to read file: " + file.path + ": " +
e.toString())
- return ""
+ return "Failed"
}
}
}
- fun putFileContents(file: File, contents: String) {
+ fun putFileContents(file: File, contents: String): Boolean {
try {
val fOut = FileOutputStream(file.absoluteFile, false)
val fWriter = OutputStreamWriter(fOut)
@@ -47,12 +47,14 @@ object Utils {
fOut.close()
} catch (e: java.io.IOException) {
Log.e("Baresip", "Failed to put contents to file: " + e.toString())
+ return false
}
} catch (e: java.io.FileNotFoundException) {
Log.e("Baresip", "Failed to find contents file: " + e.toString())
+ return false
}
-
+ return true
}
fun getNameValue(string: String, name: String): ArrayList {
diff --git a/app/src/main/res/layout/activity_contact.xml b/app/src/main/res/layout/activity_contact.xml
index 971208a9..dba54321 100644
--- a/app/src/main/res/layout/activity_contact.xml
+++ b/app/src/main/res/layout/activity_contact.xml
@@ -22,7 +22,7 @@