- Improved asking of permissions and acting on the answers.

This commit is contained in:
Juha Heinanen
2019-11-15 15:11:41 +02:00
parent 5c5603f2b3
commit d3162b82ed
10 changed files with 108 additions and 51 deletions
@@ -529,7 +529,10 @@ class BaresipService: Service() {
} }
"call incoming" -> { "call incoming" -> {
val peerUri = Api.call_peeruri(callp) val peerUri = Api.call_peeruri(callp)
if ((Call.calls().size > 0) || (tm.callState != TelephonyManager.CALL_STATE_IDLE)) { if ((Call.calls().size > 0) ||
(tm.callState != TelephonyManager.CALL_STATE_IDLE) ||
!Utils.checkPermission(applicationContext,
android.Manifest.permission.RECORD_AUDIO)) {
Log.d(LOG_TAG, "Auto-rejecting incoming call $uap/$callp/$peerUri") Log.d(LOG_TAG, "Auto-rejecting incoming call $uap/$callp/$peerUri")
Api.ua_hangup(uap, callp, 486, "Busy Here") Api.ua_hangup(uap, callp, 486, "Busy Here")
if (ua.account.callHistory) { if (ua.account.callHistory) {
@@ -1,11 +1,9 @@
package com.tutpro.baresip package com.tutpro.baresip
import android.app.Activity import android.app.Activity
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color import android.graphics.Color
import android.net.ConnectivityManager
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.util.TypedValue import android.util.TypedValue
@@ -48,6 +46,10 @@ class ConfigActivity : AppCompatActivity() {
private var save = false private var save = false
private var restart = false private var restart = false
private val audioModules = listOf("opus", "amr", "ilbc", "g722", "g7221", "g726", "g711") private val audioModules = listOf("opus", "amr", "ilbc", "g722", "g7221", "g726", "g711")
private var menu: Menu? = null
private val READ_CERT_PERMISSION_CODE = 1
private val READ_CA_PERMISSION_CODE = 2
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@@ -182,6 +184,9 @@ class ConfigActivity : AppCompatActivity() {
val inflater = menuInflater val inflater = menuInflater
inflater.inflate(R.menu.check_icon, menu) inflater.inflate(R.menu.check_icon, menu)
this.menu = menu
return true return true
} }
@@ -253,7 +258,8 @@ class ConfigActivity : AppCompatActivity() {
if (certificateFile.isChecked != oldCertificateFile) { if (certificateFile.isChecked != oldCertificateFile) {
if (certificateFile.isChecked) { if (certificateFile.isChecked) {
if (!Utils.requestPermission(this, if (!Utils.requestPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE)) android.Manifest.permission.READ_EXTERNAL_STORAGE,
READ_CERT_PERMISSION_CODE))
return false return false
val content = Utils.getFileContents(BaresipService.downloadsPath + "/cert.pem") val content = Utils.getFileContents(BaresipService.downloadsPath + "/cert.pem")
if (content == null) { if (content == null) {
@@ -275,9 +281,11 @@ class ConfigActivity : AppCompatActivity() {
if (caFile.isChecked != oldCAFile) { if (caFile.isChecked != oldCAFile) {
if (caFile.isChecked) { if (caFile.isChecked) {
if (!Utils.requestPermission(this, if (!Utils.requestPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE)) android.Manifest.permission.READ_EXTERNAL_STORAGE,
READ_CA_PERMISSION_CODE))
return false return false
val content = Utils.getFileContents(BaresipService.downloadsPath + "/ca_certs.crt") val content = Utils.getFileContents(BaresipService.downloadsPath +
"/ca_certs.crt")
if (content == null) { if (content == null) {
Utils.alertView(this, getString(R.string.error), Utils.alertView(this, getString(R.string.error),
getString(R.string.read_ca_certs_error)) getString(R.string.read_ca_certs_error))
@@ -414,6 +422,28 @@ class ConfigActivity : AppCompatActivity() {
} }
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,
grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
READ_CERT_PERMISSION_CODE ->
if (grantResults.isNotEmpty() && (grantResults[0] ==
PackageManager.PERMISSION_GRANTED))
menu!!.performIdentifierAction(R.id.checkIcon, 0)
else
certificateFile.isChecked = false
READ_CA_PERMISSION_CODE ->
if ((grantResults.size > 0) && (grantResults[0] ==
PackageManager.PERMISSION_GRANTED))
menu!!.performIdentifierAction(R.id.checkIcon, 0)
else
caFile.isChecked = false
}
}
override fun onBackPressed() { override fun onBackPressed() {
BaresipService.activities.removeAt(0) BaresipService.activities.removeAt(0)
@@ -6,8 +6,6 @@ import android.app.NotificationManager
import android.app.AlarmManager import android.app.AlarmManager
import android.app.PendingIntent import android.app.PendingIntent
import android.content.* import android.content.*
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.content.pm.PackageManager import android.content.pm.PackageManager
@@ -110,7 +108,6 @@ class MainActivity : AppCompatActivity() {
override fun onTick(millisUntilFinished: Long) { override fun onTick(millisUntilFinished: Long) {
Log.d("Baresip", "Seconds remaining: ${millisUntilFinished / 1000}") Log.d("Baresip", "Seconds remaining: ${millisUntilFinished / 1000}")
} }
override fun onFinish() { override fun onFinish() {
when (stopState) { when (stopState) {
"initial" -> { "initial" -> {
@@ -129,13 +126,6 @@ class MainActivity : AppCompatActivity() {
} }
} }
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
Log.w("Baresip", "Baresip does not have RECORD_AUDIO permission")
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.RECORD_AUDIO), PERMISSION_REQUEST_CODE)
}
uaAdapter = UaSpinnerAdapter(applicationContext, BaresipService.uas, BaresipService.status) uaAdapter = UaSpinnerAdapter(applicationContext, BaresipService.uas, BaresipService.status)
aorSpinner.adapter = uaAdapter aorSpinner.adapter = uaAdapter
aorSpinner.setSelection(-1) aorSpinner.setSelection(-1)
@@ -150,7 +140,6 @@ class MainActivity : AppCompatActivity() {
showCall(ua) showCall(ua)
updateIcons(acc) updateIcons(acc)
} }
override fun onNothingSelected(parent: AdapterView<*>) { override fun onNothingSelected(parent: AdapterView<*>) {
Log.d("Baresip", "Nothing selected") Log.d("Baresip", "Nothing selected")
} }
@@ -433,6 +422,8 @@ class MainActivity : AppCompatActivity() {
if (!BaresipService.isServiceRunning) { if (!BaresipService.isServiceRunning) {
baresipService.setAction("Start") baresipService.setAction("Start")
startService(baresipService) startService(baresipService)
Utils.requestPermission(this, Manifest.permission.RECORD_AUDIO,
RECORD_PERMISSION_REQUEST_CODE)
} }
if (intent.hasExtra("onStartup")) if (intent.hasExtra("onStartup"))
@@ -649,12 +640,7 @@ class MainActivity : AppCompatActivity() {
} }
"call incoming" -> { "call incoming" -> {
val callp = params[1] val callp = params[1]
if (ContextCompat.checkSelfPermission(applicationContext, if (!Utils.checkPermission(this, Manifest.permission.RECORD_AUDIO)) {
Manifest.permission.RECORD_AUDIO) ==
PackageManager.PERMISSION_DENIED) {
Toast.makeText(applicationContext,
getString(R.string.no_microphone_permission),
Toast.LENGTH_SHORT).show()
Api.ua_hangup(uap, callp, 486, "Busy Here") Api.ua_hangup(uap, callp, 486, "Busy Here")
return return
} }
@@ -895,13 +881,13 @@ class MainActivity : AppCompatActivity() {
startActivityForResult(i, ACCOUNTS_CODE) startActivityForResult(i, ACCOUNTS_CODE)
} }
R.id.backup -> { R.id.backup -> {
if (Utils.requestPermission(this, if (Utils.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) BACKUP_PERMISSION_REQUEST_CODE))
askPassword(getString(R.string.encrypt_password)) askPassword(getString(R.string.encrypt_password))
} }
R.id.restore -> { R.id.restore -> {
if (Utils.requestPermission(this, if (Utils.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.READ_EXTERNAL_STORAGE)) RESTORE_PERMISSION_REQUEST_CODE))
askPassword(getString(R.string.decrypt_password)) askPassword(getString(R.string.decrypt_password))
} }
R.id.about -> { R.id.about -> {
@@ -915,6 +901,36 @@ class MainActivity : AppCompatActivity() {
return true return true
} }
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,
grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
RECORD_PERMISSION_REQUEST_CODE ->
if ((grantResults.size > 0) && (grantResults[0] != PackageManager.PERMISSION_GRANTED))
Toast.makeText(applicationContext, getString(R.string.no_calls),
Toast.LENGTH_LONG).show()
else
Utils.requestPermission(this, Manifest.permission.READ_PHONE_STATE,
PHONE_PERMISSION_REQUEST_CODE)
PHONE_PERMISSION_REQUEST_CODE ->
if ((grantResults.size > 0) && (grantResults[0] != PackageManager.PERMISSION_GRANTED))
Toast.makeText(applicationContext, getString(R.string.no_call_awareness),
Toast.LENGTH_LONG).show()
BACKUP_PERMISSION_REQUEST_CODE ->
if ((grantResults.size > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED))
askPassword(getString(R.string.encrypt_password))
RESTORE_PERMISSION_REQUEST_CODE ->
if ((grantResults.size > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED))
askPassword(getString(R.string.decrypt_password))
}
}
private fun quitRestart(reStart: Boolean) { private fun quitRestart(reStart: Boolean) {
if (stopState == "initial") { if (stopState == "initial") {
Log.d("Baresip", "quitRestart Restart = $restart") Log.d("Baresip", "quitRestart Restart = $restart")
@@ -1086,10 +1102,9 @@ class MainActivity : AppCompatActivity() {
} }
private fun call(ua: UserAgent, uri: String, status: String): Boolean { private fun call(ua: UserAgent, uri: String, status: String): Boolean {
if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.RECORD_AUDIO) if (Utils.checkPermission(this, Manifest.permission.RECORD_AUDIO)) {
== PackageManager.PERMISSION_DENIED) { Toast.makeText(applicationContext, getString(R.string.no_calls),
Toast.makeText(applicationContext, Toast.LENGTH_LONG).show()
getString(R.string.no_microphone_permission), Toast.LENGTH_SHORT).show()
return false return false
} }
if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition]) spinToAor(ua.account.aor) if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition]) spinToAor(ua.account.aor)
@@ -1361,8 +1376,11 @@ class MainActivity : AppCompatActivity() {
const val CHATS_CODE = 8 const val CHATS_CODE = 8
const val CHAT_CODE = 9 const val CHAT_CODE = 9
const val PERMISSION_REQUEST_CODE = 1 const val BACKUP_PERMISSION_REQUEST_CODE = 1
const val RESTART_REQUEST_CODE = 2 const val RESTORE_PERMISSION_REQUEST_CODE = 2
const val RECORD_PERMISSION_REQUEST_CODE = 3
const val PHONE_PERMISSION_REQUEST_CODE = 4
const val RESTART_REQUEST_CODE = 5
} }
@@ -307,11 +307,15 @@ object Utils {
} }
} }
fun requestPermission(ctx: Context, permission: String) : Boolean {
fun checkPermission(ctx: Context, permission: String) : Boolean {
return ContextCompat.checkSelfPermission(ctx, permission) == PackageManager.PERMISSION_GRANTED
}
fun requestPermission(ctx: Context, permission: String, requestCode: Int) : Boolean {
if (ContextCompat.checkSelfPermission(ctx, permission) != PackageManager.PERMISSION_GRANTED) { if (ContextCompat.checkSelfPermission(ctx, permission) != PackageManager.PERMISSION_GRANTED) {
Log.w("Baresip", "Baresip does not have $permission permission") Log.w("Baresip", "Baresip does not have $permission permission")
ActivityCompat.requestPermissions(ctx as Activity, arrayOf(permission), ActivityCompat.requestPermissions(ctx as Activity, arrayOf(permission), requestCode)
MainActivity.PERMISSION_REQUEST_CODE)
return false return false
} }
return true return true
-1
View File
@@ -271,7 +271,6 @@
Те са нулирани. Рестартирайте baresip. Те са нулирани. Рестартирайте baresip.
</string> </string>
<string name="registering_failed">Регистрация на \`%1$s\` се провали.</string> <string name="registering_failed">Регистрация на \`%1$s\` се провали.</string>
<string name="no_microphone_permission">Не сте дали разрешение за микрофон.</string>
<string name="verify">Потвърди</string> <string name="verify">Потвърди</string>
<string name="verify_sas">Искате ли да потвърдите &lt;%1$s&gt; &lt;%2$s&gt;?</string> <string name="verify_sas">Искате ли да потвърдите &lt;%1$s&gt; &lt;%2$s&gt;?</string>
<string name="transfer_query">Приемате ли да прехвърлите обаждане до \'%1$s\'?</string> <string name="transfer_query">Приемате ли да прехвърлите обаждане до \'%1$s\'?</string>
-1
View File
@@ -268,7 +268,6 @@
<string name="start_failed">Baresip no pudo iniciar. Esto puede deberse a una dirección de escucha no válida <string name="start_failed">Baresip no pudo iniciar. Esto puede deberse a una dirección de escucha no válida
o archivo TLS. Han sido reiniciados. Reiniciar baresip.</string> o archivo TLS. Han sido reiniciados. Reiniciar baresip.</string>
<string name="registering_failed">Registro de \`%1$s\` ha fallado.</string> <string name="registering_failed">Registro de \`%1$s\` ha fallado.</string>
<string name="no_microphone_permission">No ha otorgado permiso de micrófono.</string>
<string name="verify">Verificar</string> <string name="verify">Verificar</string>
<string name="verify_sas">¿Quieres verificar SAS &lt;%1$s&gt; &lt;%2$s&gt;?</string> <string name="verify_sas">¿Quieres verificar SAS &lt;%1$s&gt; &lt;%2$s&gt;?</string>
<string name="transfer_query">¿Aceptas transferir la llamada a \'%1$s\'?</string> <string name="transfer_query">¿Aceptas transferir la llamada a \'%1$s\'?</string>
+9 -8
View File
@@ -105,11 +105,9 @@
<string name="account_allocation_failure">"Uuden tilin luonti <string name="account_allocation_failure">"Uuden tilin luonti
epäonnistui. epäonnistui.
</string> </string>
<string name="encrypt_password">Salasana</string> <string name="encrypt_password">Tallenna salasanalla</string>
<string name="decrypt_password">Salasana</string> <string name="decrypt_password">Palauta salasanalla</string>
<string name="delete_account">Haluatko poistaa tilin <string name="delete_account">Haluatko poistaa tilin \'%1$s\'?</string>
\'%1$s\'?
</string>
<!-- Baresip Service --> <!-- Baresip Service -->
<string name="answer">Vastaa</string> <string name="answer">Vastaa</string>
<string name="reject">Hylkää</string> <string name="reject">Hylkää</string>
@@ -296,9 +294,6 @@
baresip uudelleen. baresip uudelleen.
</string> </string>
<string name="registering_failed">Tilin \'%1$s\' rekisteröinti epäonnistui.</string> <string name="registering_failed">Tilin \'%1$s\' rekisteröinti epäonnistui.</string>
<string name="no_microphone_permission">Et ole sallinut mikrofonin
käyttöä.
</string>
<string name="verify">Todenna</string> <string name="verify">Todenna</string>
<string name="verify_sas">Todennatko SAS:n &lt;%1$s&gt; &lt;%2$s&gt;? <string name="verify_sas">Todennatko SAS:n &lt;%1$s&gt; &lt;%2$s&gt;?
</string> </string>
@@ -327,4 +322,10 @@
Tarkista Asetukset → Sovellukset → baresip → Käyttöluvat → Tallennustila ja että tallennettu Tarkista Asetukset → Sovellukset → baresip → Käyttöluvat → Tallennustila ja että tallennettu
tiedosto \'baresip.bs\' on kansiossa ja (jos on) että annoit oikean salasanan. tiedosto \'baresip.bs\' on kansiossa ja (jos on) että annoit oikean salasanan.
</string> </string>
<string name="no_calls">Et voi soittaa puheluita tai vastata niihin
ilman Mikrofoni-käyttöoikeutta.
</string>
<string name="no_call_awareness">Ilman Puhelin-käyttöoikeutta baresip ei voi tietää, onko
toinen puhelu parhaillaan jo käynnissä.
</string>
</resources> </resources>
@@ -163,7 +163,6 @@
<string name="call_already_active">Du har allerede et aktivt anrop.</string> <string name="call_already_active">Du har allerede et aktivt anrop.</string>
<string name="start_failed">Baresip kunne ikke starte. Lytteadressen ble tilbakestilt. Start programmet på ny.</string> <string name="start_failed">Baresip kunne ikke starte. Lytteadressen ble tilbakestilt. Start programmet på ny.</string>
<string name="registering_failed">Registrering av %1$s mislyktes.</string> <string name="registering_failed">Registrering av %1$s mislyktes.</string>
<string name="no_microphone_permission">Du har ikke innvilget mikrofontilgang.</string>
<string name="verify_sas">Ønsker du å bekrefte SAS &lt;%1$s&gt; &lt;%2$s&gt;\?</string> <string name="verify_sas">Ønsker du å bekrefte SAS &lt;%1$s&gt; &lt;%2$s&gt;\?</string>
<string name="transfer_query">Godtar du å overføre samtalen til \"%1$s\"\?</string> <string name="transfer_query">Godtar du å overføre samtalen til \"%1$s\"\?</string>
<string name="call_failed">Anrop mislyktes</string> <string name="call_failed">Anrop mislyktes</string>
-1
View File
@@ -130,7 +130,6 @@
<string name="dialpad">Tastatura virtuală</string> <string name="dialpad">Tastatura virtuală</string>
<string name="call_already_active">Aveți deja un apel activ.</string> <string name="call_already_active">Aveți deja un apel activ.</string>
<string name="registering_failed">Înregistrarea %1$s a eșuat.</string> <string name="registering_failed">Înregistrarea %1$s a eșuat.</string>
<string name="no_microphone_permission">Nu ați acordat permisiunea de acces la microfon.</string>
<string name="verify">Verificare</string> <string name="verify">Verificare</string>
<string name="verify_sas">Doriți să verificați SAS &lt;%1$s&gt; &lt;%2$s&gt;\?</string> <string name="verify_sas">Doriți să verificați SAS &lt;%1$s&gt; &lt;%2$s&gt;\?</string>
<string name="transfer_query">Acceptați să transferați apelul către \'%1$s\'\?</string> <string name="transfer_query">Acceptați să transferați apelul către \'%1$s\'\?</string>
+6 -1
View File
@@ -277,7 +277,6 @@
or TLS file. They have been reset. Restart baresip. or TLS file. They have been reset. Restart baresip.
</string> </string>
<string name="registering_failed">Registering of \`%1$s\` failed.</string> <string name="registering_failed">Registering of \`%1$s\` failed.</string>
<string name="no_microphone_permission">You have not granted microphone permission.</string>
<string name="verify">Verify</string> <string name="verify">Verify</string>
<string name="verify_sas">Do you want to verify SAS &lt;%1$s&gt; &lt;%2$s&gt;?</string> <string name="verify_sas">Do you want to verify SAS &lt;%1$s&gt; &lt;%2$s&gt;?</string>
<string name="transfer_query">Do you accept to transfer call to \'%1$s\'?</string> <string name="transfer_query">Do you accept to transfer call to \'%1$s\'?</string>
@@ -299,5 +298,11 @@
baresip → Permissions → Storage and that backup file \'baresip.bs\' exists in the folder baresip → Permissions → Storage and that backup file \'baresip.bs\' exists in the folder
and, if so, you gave correct Decrypt Password. and, if so, you gave correct Decrypt Password.
</string> </string>
<string name="no_calls">You are not able to place or answer calls without Record Audio
permission.
</string>
<string name="no_call_awareness">Without Phone permission, baresip cannot be aware if another
phone call has already been established.
</string>
</resources> </resources>