- More work on asking passwords.

This commit is contained in:
Juha Heinanen
2020-04-05 13:11:27 +03:00
parent a4c849a61f
commit 73e004bb5a
4 changed files with 57 additions and 47 deletions
@@ -9,13 +9,14 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.LinearLayout.LayoutParams import android.widget.LinearLayout.LayoutParams
import android.widget.* import android.widget.*
import kotlinx.android.synthetic.main.activity_account.*
import com.tutpro.baresip.Account.Companion.checkAuthPass import com.tutpro.baresip.Account.Companion.checkAuthPass
import com.tutpro.baresip.Account.Companion.checkAuthUser import com.tutpro.baresip.Account.Companion.checkAuthUser
import com.tutpro.baresip.Account.Companion.checkDisplayName import com.tutpro.baresip.Account.Companion.checkDisplayName
import com.tutpro.baresip.MainActivity.Companion.aorPasswords import com.tutpro.baresip.MainActivity.Companion.aorPasswords
import kotlinx.android.synthetic.main.activity_account.*
class AccountActivity : AppCompatActivity() { class AccountActivity : AppCompatActivity() {
internal lateinit var acc: Account internal lateinit var acc: Account
@@ -12,6 +12,8 @@ import android.widget.ArrayAdapter
import android.widget.ImageButton import android.widget.ImageButton
import android.widget.TextView import android.widget.TextView
import com.tutpro.baresip.MainActivity.Companion.ACCOUNT_CODE
import java.util.* import java.util.*
class AccountListAdapter(private val cxt: Context, private val rows: ArrayList<AccountRow>) : class AccountListAdapter(private val cxt: Context, private val rows: ArrayList<AccountRow>) :
@@ -30,7 +32,7 @@ class AccountListAdapter(private val cxt: Context, private val rows: ArrayList<A
val b = Bundle() val b = Bundle()
b.putString("accp", UserAgent.uas()[position].account.accp) b.putString("accp", UserAgent.uas()[position].account.accp)
i.putExtras(b) i.putExtras(b)
(cxt as Activity).startActivity(i) (cxt as Activity).startActivityForResult(i, ACCOUNT_CODE)
} }
val ua = UserAgent.uas()[position] val ua = UserAgent.uas()[position]
val actionView = rowView.findViewById(R.id.action) as ImageButton val actionView = rowView.findViewById(R.id.action) as ImageButton
@@ -12,6 +12,7 @@ import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.* import android.widget.*
import com.tutpro.baresip.Account.Companion.checkAuthPass import com.tutpro.baresip.Account.Companion.checkAuthPass
import com.tutpro.baresip.MainActivity.Companion.ACCOUNT_CODE import com.tutpro.baresip.MainActivity.Companion.ACCOUNT_CODE
import com.tutpro.baresip.MainActivity.Companion.aorPasswords import com.tutpro.baresip.MainActivity.Companion.aorPasswords
@@ -81,7 +82,8 @@ class AccountsActivity : AppCompatActivity() {
val aor = Account.find(data!!.getStringExtra("accp"))!!.aor val aor = Account.find(data!!.getStringExtra("accp"))!!.aor
val ua = UserAgent.uas()[UserAgent.findAorIndex(aor)!!] val ua = UserAgent.uas()[UserAgent.findAorIndex(aor)!!]
if (aorPasswords.containsKey(aor) && aorPasswords[aor] == "") if (aorPasswords.containsKey(aor) && aorPasswords[aor] == "")
askPassword(String.format(getString(R.string.account_password), aor), ua) askPassword(String.format(getString(R.string.account_password),
Utils.plainAor(aor)), ua)
} }
} }
} }
@@ -110,10 +112,7 @@ class AccountsActivity : AppCompatActivity() {
String.format(getString(R.string.invalid_authentication_password), password)) String.format(getString(R.string.invalid_authentication_password), password))
password = "" password = ""
} }
aorPasswords[ua.account.aor] = password setAuthPass(ua, password)
account_set_auth_pass(ua.account.accp, password)
if (password != "")
if (ua.account.regint > 0) Api.ua_register(ua.uap)
} }
builder.setNegativeButton(android.R.string.cancel) { dialog, _ -> builder.setNegativeButton(android.R.string.cancel) { dialog, _ ->
dialog.cancel() dialog.cancel()
@@ -123,15 +122,14 @@ class AccountsActivity : AppCompatActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean { override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (BaresipService.activities.indexOf("accounts") == -1) return true if (BaresipService.activities.indexOf("accounts") == -1)
return true
when (item.itemId) { when (item.itemId) {
R.id.help -> { R.id.help -> {
Utils.alertView(this@AccountsActivity, getString(R.string.new_account), Utils.alertView(this@AccountsActivity, getString(R.string.new_account),
getString(R.string.accounts_help)) getString(R.string.accounts_help))
} }
android.R.id.home -> { android.R.id.home -> {
BaresipService.activities.remove("accounts") BaresipService.activities.remove("accounts")
val i = Intent() val i = Intent()
@@ -139,25 +137,21 @@ class AccountsActivity : AppCompatActivity() {
finish() finish()
} }
} }
return true return true
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.accounts_menu, menu) menuInflater.inflate(R.menu.accounts_menu, menu)
return true return true
} }
override fun onBackPressed() { override fun onBackPressed() {
BaresipService.activities.remove("accounts") BaresipService.activities.remove("accounts")
val i = Intent() val i = Intent()
setResult(Activity.RESULT_OK, i) setResult(Activity.RESULT_OK, i)
finish() finish()
super.onBackPressed() super.onBackPressed()
} }
companion object { companion object {
@@ -188,6 +182,17 @@ class AccountsActivity : AppCompatActivity() {
return contents == null || contents.size == 0 return contents == null || contents.size == 0
} }
fun setAuthPass(ua: UserAgent, ap: String) {
val acc = ua.account
if (account_set_auth_pass(acc.accp, ap) == 0) {
acc.authPass = account_auth_pass(acc.accp)
aorPasswords[acc.aor] = ap
if ((ap != "") && (acc.regint > 0))
Api.ua_register(ua.uap)
} else {
Log.e("Baresip", "Setting of auth pass failed")
}
}
} }
} }
@@ -1,10 +1,7 @@
package com.tutpro.baresip package com.tutpro.baresip
import android.Manifest import android.Manifest
import android.app.KeyguardManager import android.app.*
import android.app.NotificationManager
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.* import android.content.*
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
@@ -19,11 +16,12 @@ import android.text.method.HideReturnsTransformationMethod
import android.text.method.PasswordTransformationMethod import android.text.method.PasswordTransformationMethod
import android.widget.* import android.widget.*
import android.view.* import android.view.*
import com.tutpro.baresip.Account.Companion.checkAuthPass
import java.io.File import java.io.File
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import com.tutpro.baresip.Account.Companion.checkAuthPass
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
internal lateinit var layout: RelativeLayout internal lateinit var layout: RelativeLayout
@@ -65,15 +63,8 @@ class MainActivity : AppCompatActivity() {
Log.d("Baresip", "Main created with action '$intentAction'") Log.d("Baresip", "Main created with action '$intentAction'")
kgm = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager kgm = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
if (Build.VERSION.SDK_INT >= 27) { dismissKeyguard()
setShowWhenLocked(true)
setTurnScreenOn(true)
kgm.requestDismissKeyguard(this, null)
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
}
window.addFlags(WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES) window.addFlags(WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
@@ -439,7 +430,7 @@ class MainActivity : AppCompatActivity() {
if (File(filesDir.absolutePath + "/accounts").exists()) { if (File(filesDir.absolutePath + "/accounts").exists()) {
val accounts = String(Utils.getFileContents(filesDir.absolutePath + "/accounts")!!, val accounts = String(Utils.getFileContents(filesDir.absolutePath + "/accounts")!!,
Charsets.UTF_8).lines().toMutableList() Charsets.UTF_8).lines().toMutableList()
askAorPasswords(accounts) askPasswords(accounts)
} else { } else {
// Baresip is started for the first time // Baresip is started for the first time
Utils.requestPermission(this, Manifest.permission.RECORD_AUDIO, Utils.requestPermission(this, Manifest.permission.RECORD_AUDIO,
@@ -980,12 +971,8 @@ class MainActivity : AppCompatActivity() {
if (password != "") backup(password) if (password != "") backup(password)
getString(R.string.decrypt_password) -> getString(R.string.decrypt_password) ->
if (password != "") restore(password) if (password != "") restore(password)
else -> { else ->
aorPasswords[ua!!.account.aor] = password AccountsActivity.setAuthPass(ua!!, password)
account_set_auth_pass(ua.account.accp, password)
if (password != "")
if (ua.account.regint > 0) Api.ua_register(ua.uap)
}
} }
} }
builder.setNegativeButton(android.R.string.cancel) { dialog, _ -> builder.setNegativeButton(android.R.string.cancel) { dialog, _ ->
@@ -994,7 +981,7 @@ class MainActivity : AppCompatActivity() {
builder.show() builder.show()
} }
private fun askAorPasswords(accounts: MutableList<String>) { private fun askPasswords(accounts: MutableList<String>) {
if (accounts.isNotEmpty()) { if (accounts.isNotEmpty()) {
val account = accounts.removeAt(0) val account = accounts.removeAt(0)
val params = account.substringAfter(">") val params = account.substringAfter(">")
@@ -1024,16 +1011,16 @@ class MainActivity : AppCompatActivity() {
} else { } else {
aorPasswords.put(aor, password) aorPasswords.put(aor, password)
} }
askAorPasswords(accounts) askPasswords(accounts)
} }
builder.setNegativeButton(android.R.string.cancel) { dialog, _ -> builder.setNegativeButton(android.R.string.cancel) { dialog, _ ->
dialog.cancel() dialog.cancel()
aorPasswords.put(aor, "") aorPasswords.put(aor, "")
askAorPasswords(accounts) askPasswords(accounts)
} }
builder.show() builder.show()
} else { } else {
askAorPasswords(accounts) askPasswords(accounts)
} }
} else { } else {
startBaresip() startBaresip()
@@ -1120,18 +1107,20 @@ class MainActivity : AppCompatActivity() {
} else { } else {
aorSpinner.setSelection(-1) aorSpinner.setSelection(-1)
} }
baresipService.setAction("UpdateNotification") if (BaresipService.isServiceRunning) {
startService(baresipService) baresipService.setAction("UpdateNotification")
for (ua in UserAgent.uas()) updateIcons(ua.account) startService(baresipService)
}
} }
ACCOUNT_CODE -> { ACCOUNT_CODE -> {
val ua = UserAgent.uas()[aorSpinner.selectedItemPosition] val ua = UserAgent.uas()[aorSpinner.selectedItemPosition]
val account = ua.account val account = ua.account
updateIcons(account) updateIcons(account)
if (aorPasswords.containsKey(account.aor) && aorPasswords[account.aor] == "") if (resultCode == Activity.RESULT_OK)
askPassword(String.format(getString(R.string.account_password), if (aorPasswords.containsKey(account.aor) && aorPasswords[account.aor] == "")
Utils.plainAor(account.aor)), ua) askPassword(String.format(getString(R.string.account_password),
Utils.plainAor(account.aor)), ua)
} }
CONTACTS_CODE -> { CONTACTS_CODE -> {
@@ -1444,6 +1433,19 @@ class MainActivity : AppCompatActivity() {
return return
} }
@Suppress("DEPRECATION")
private fun dismissKeyguard() {
if (Build.VERSION.SDK_INT >= 27) {
setShowWhenLocked(true)
setTurnScreenOn(true)
kgm.requestDismissKeyguard(this, null)
} else {
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED or
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON or
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
}
}
companion object { companion object {
var visible = false var visible = false