- 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" -> {
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