- Improved asking of permissions and acting on the answers.
This commit is contained in:
@ -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) {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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">Искате ли да потвърдите <%1$s> <%2$s>?</string>
|
||||
<string name="transfer_query">Приемате ли да прехвърлите обаждане до \'%1$s\'?</string>
|
||||
|
||||
@ -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 <%1$s> <%2$s>?</string>
|
||||
<string name="transfer_query">¿Aceptas transferir la llamada a \'%1$s\'?</string>
|
||||
|
||||
@ -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 <%1$s> <%2$s>?
|
||||
</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>
|
||||
|
||||
@ -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 <%1$s> <%2$s>\?</string>
|
||||
<string name="transfer_query">Godtar du å overføre samtalen til \"%1$s\"\?</string>
|
||||
<string name="call_failed">Anrop mislyktes</string>
|
||||
|
||||
@ -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 <%1$s> <%2$s>\?</string>
|
||||
<string name="transfer_query">Acceptați să transferați apelul către \'%1$s\'\?</string>
|
||||
|
||||
@ -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 <%1$s> <%2$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
|
||||
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>
|
||||
|
||||
Reference in New Issue
Block a user