- 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

View File

@ -529,7 +529,10 @@ class BaresipService: Service() {
}
"call incoming" -> {
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")
Api.ua_hangup(uap, callp, 486, "Busy Here")
if (ua.account.callHistory) {

View File

@ -1,11 +1,9 @@
package com.tutpro.baresip
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.net.ConnectivityManager
import android.os.Build
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.util.TypedValue
@ -48,6 +46,10 @@ class ConfigActivity : AppCompatActivity() {
private var save = false
private var restart = false
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?) {
@ -182,6 +184,9 @@ class ConfigActivity : AppCompatActivity() {
val inflater = menuInflater
inflater.inflate(R.menu.check_icon, menu)
this.menu = menu
return true
}
@ -253,7 +258,8 @@ class ConfigActivity : AppCompatActivity() {
if (certificateFile.isChecked != oldCertificateFile) {
if (certificateFile.isChecked) {
if (!Utils.requestPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE))
android.Manifest.permission.READ_EXTERNAL_STORAGE,
READ_CERT_PERMISSION_CODE))
return false
val content = Utils.getFileContents(BaresipService.downloadsPath + "/cert.pem")
if (content == null) {
@ -275,9 +281,11 @@ class ConfigActivity : AppCompatActivity() {
if (caFile.isChecked != oldCAFile) {
if (caFile.isChecked) {
if (!Utils.requestPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE))
android.Manifest.permission.READ_EXTERNAL_STORAGE,
READ_CA_PERMISSION_CODE))
return false
val content = Utils.getFileContents(BaresipService.downloadsPath + "/ca_certs.crt")
val content = Utils.getFileContents(BaresipService.downloadsPath +
"/ca_certs.crt")
if (content == null) {
Utils.alertView(this, getString(R.string.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() {
BaresipService.activities.removeAt(0)

View File

@ -6,8 +6,6 @@ import android.app.NotificationManager
import android.app.AlarmManager
import android.app.PendingIntent
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.AppCompatActivity
import android.content.pm.PackageManager
@ -110,7 +108,6 @@ class MainActivity : AppCompatActivity() {
override fun onTick(millisUntilFinished: Long) {
Log.d("Baresip", "Seconds remaining: ${millisUntilFinished / 1000}")
}
override fun onFinish() {
when (stopState) {
"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)
aorSpinner.adapter = uaAdapter
aorSpinner.setSelection(-1)
@ -150,7 +140,6 @@ class MainActivity : AppCompatActivity() {
showCall(ua)
updateIcons(acc)
}
override fun onNothingSelected(parent: AdapterView<*>) {
Log.d("Baresip", "Nothing selected")
}
@ -433,6 +422,8 @@ class MainActivity : AppCompatActivity() {
if (!BaresipService.isServiceRunning) {
baresipService.setAction("Start")
startService(baresipService)
Utils.requestPermission(this, Manifest.permission.RECORD_AUDIO,
RECORD_PERMISSION_REQUEST_CODE)
}
if (intent.hasExtra("onStartup"))
@ -649,12 +640,7 @@ class MainActivity : AppCompatActivity() {
}
"call incoming" -> {
val callp = params[1]
if (ContextCompat.checkSelfPermission(applicationContext,
Manifest.permission.RECORD_AUDIO) ==
PackageManager.PERMISSION_DENIED) {
Toast.makeText(applicationContext,
getString(R.string.no_microphone_permission),
Toast.LENGTH_SHORT).show()
if (!Utils.checkPermission(this, Manifest.permission.RECORD_AUDIO)) {
Api.ua_hangup(uap, callp, 486, "Busy Here")
return
}
@ -895,13 +881,13 @@ class MainActivity : AppCompatActivity() {
startActivityForResult(i, ACCOUNTS_CODE)
}
R.id.backup -> {
if (Utils.requestPermission(this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE))
askPassword(getString(R.string.encrypt_password))
if (Utils.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE,
BACKUP_PERMISSION_REQUEST_CODE))
askPassword(getString(R.string.encrypt_password))
}
R.id.restore -> {
if (Utils.requestPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE))
if (Utils.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,
RESTORE_PERMISSION_REQUEST_CODE))
askPassword(getString(R.string.decrypt_password))
}
R.id.about -> {
@ -915,6 +901,36 @@ class MainActivity : AppCompatActivity() {
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) {
if (stopState == "initial") {
Log.d("Baresip", "quitRestart Restart = $restart")
@ -1086,10 +1102,9 @@ class MainActivity : AppCompatActivity() {
}
private fun call(ua: UserAgent, uri: String, status: String): Boolean {
if (ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.RECORD_AUDIO)
== PackageManager.PERMISSION_DENIED) {
Toast.makeText(applicationContext,
getString(R.string.no_microphone_permission), Toast.LENGTH_SHORT).show()
if (Utils.checkPermission(this, Manifest.permission.RECORD_AUDIO)) {
Toast.makeText(applicationContext, getString(R.string.no_calls),
Toast.LENGTH_LONG).show()
return false
}
if (ua != UserAgent.uas()[aorSpinner.selectedItemPosition]) spinToAor(ua.account.aor)
@ -1361,8 +1376,11 @@ class MainActivity : AppCompatActivity() {
const val CHATS_CODE = 8
const val CHAT_CODE = 9
const val PERMISSION_REQUEST_CODE = 1
const val RESTART_REQUEST_CODE = 2
const val BACKUP_PERMISSION_REQUEST_CODE = 1
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
}

View File

@ -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) {
Log.w("Baresip", "Baresip does not have $permission permission")
ActivityCompat.requestPermissions(ctx as Activity, arrayOf(permission),
MainActivity.PERMISSION_REQUEST_CODE)
ActivityCompat.requestPermissions(ctx as Activity, arrayOf(permission), requestCode)
return false
}
return true

View File

@ -271,7 +271,6 @@
Те са нулирани. Рестартирайте baresip.
</string>
<string name="registering_failed">Регистрация на \`%1$s\` се провали.</string>
<string name="no_microphone_permission">Не сте дали разрешение за микрофон.</string>
<string name="verify">Потвърди</string>
<string name="verify_sas">Искате ли да потвърдите &lt;%1$s&gt; &lt;%2$s&gt;?</string>
<string name="transfer_query">Приемате ли да прехвърлите обаждане до \'%1$s\'?</string>

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
o archivo TLS. Han sido reiniciados. Reiniciar baresip.</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_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>

View File

@ -105,11 +105,9 @@
<string name="account_allocation_failure">"Uuden tilin luonti
epäonnistui.
</string>
<string name="encrypt_password">Salasana</string>
<string name="decrypt_password">Salasana</string>
<string name="delete_account">Haluatko poistaa tilin
\'%1$s\'?
</string>
<string name="encrypt_password">Tallenna salasanalla</string>
<string name="decrypt_password">Palauta salasanalla</string>
<string name="delete_account">Haluatko poistaa tilin \'%1$s\'?</string>
<!-- Baresip Service -->
<string name="answer">Vastaa</string>
<string name="reject">Hylkää</string>
@ -296,9 +294,6 @@
baresip uudelleen.
</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_sas">Todennatko SAS:n &lt;%1$s&gt; &lt;%2$s&gt;?
</string>
@ -327,4 +322,10 @@
Tarkista Asetukset → Sovellukset → baresip → Käyttöluvat → Tallennustila ja että tallennettu
tiedosto \'baresip.bs\' on kansiossa ja (jos on) että annoit oikean salasanan.
</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>

View File

@ -163,7 +163,6 @@
<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="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="transfer_query">Godtar du å overføre samtalen til \"%1$s\"\?</string>
<string name="call_failed">Anrop mislyktes</string>

View File

@ -130,7 +130,6 @@
<string name="dialpad">Tastatura virtuală</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="no_microphone_permission">Nu ați acordat permisiunea de acces la microfon.</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="transfer_query">Acceptați să transferați apelul către \'%1$s\'\?</string>

View File

@ -277,7 +277,6 @@
or TLS file. They have been reset. Restart baresip.
</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_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>
@ -299,5 +298,11 @@
baresip → Permissions → Storage and that backup file \'baresip.bs\' exists in the folder
and, if so, you gave correct Decrypt Password.
</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>