- 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
|
||||
|
||||
Reference in New Issue
Block a user