Started to work on better permissions handling
This commit is contained in:
@@ -12,6 +12,7 @@ import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Matrix
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.ContactsContract
|
||||
import android.provider.ContactsContract.CommonDataKinds
|
||||
@@ -20,10 +21,14 @@ import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.*
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.cardview.widget.CardView
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.exifinterface.media.ExifInterface
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.tutpro.baresip.Utils.showSnackBar
|
||||
import com.tutpro.baresip.databinding.ActivityContactBinding
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
@@ -31,6 +36,7 @@ import java.io.File
|
||||
class ContactActivity : AppCompatActivity() {
|
||||
|
||||
private lateinit var binding: ActivityContactBinding
|
||||
private lateinit var layout: LinearLayout
|
||||
private lateinit var textAvatarView: TextView
|
||||
private lateinit var cardAvatarView: CardView
|
||||
private lateinit var cardImageAvatarView: ImageView
|
||||
@@ -38,6 +44,7 @@ class ContactActivity : AppCompatActivity() {
|
||||
private lateinit var uriView: EditText
|
||||
private lateinit var androidCheck: CheckBox
|
||||
private lateinit var menu: Menu
|
||||
private lateinit var requestPermissionsLauncher: ActivityResultLauncher<Array<String>>
|
||||
|
||||
private var newContact = false
|
||||
private var newAvatar = ""
|
||||
@@ -48,11 +55,15 @@ class ContactActivity : AppCompatActivity() {
|
||||
private var id: Long = 0
|
||||
private var oldAndroid = false
|
||||
|
||||
private val permissions =
|
||||
arrayOf(Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivityContactBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
layout = binding.ContactView
|
||||
|
||||
textAvatarView = binding.TextAvatar
|
||||
cardAvatarView = binding.CardAvatar
|
||||
@@ -166,10 +177,22 @@ class ContactActivity : AppCompatActivity() {
|
||||
getString(R.string.android_contact_help))
|
||||
}
|
||||
|
||||
androidCheck.setOnClickListener{
|
||||
if (Build.VERSION.SDK_INT >= 23)
|
||||
if (!Utils.checkPermissions(this, permissions))
|
||||
requestPermissions(permissions, CONTACT_PERMISSION_REQUEST_CODE)
|
||||
}
|
||||
|
||||
Utils.addActivity("contact,$newContact,$uOrI")
|
||||
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
requestPermissionsLauncher =
|
||||
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(optionsMenu: Menu): Boolean {
|
||||
|
||||
super.onCreateOptionsMenu(optionsMenu)
|
||||
@@ -181,6 +204,47 @@ class ContactActivity : AppCompatActivity() {
|
||||
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>,
|
||||
grandResults: IntArray) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grandResults)
|
||||
var allowed = true
|
||||
when (requestCode) {
|
||||
CONTACT_PERMISSION_REQUEST_CODE ->
|
||||
for (res in grandResults)
|
||||
allowed = allowed && res == PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
if (!allowed) {
|
||||
androidCheck.isChecked = oldAndroid
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(
|
||||
this,
|
||||
Manifest.permission.READ_CONTACTS
|
||||
))
|
||||
{
|
||||
layout.showSnackBar(
|
||||
binding.root,
|
||||
getString(R.string.no_android_contacts),
|
||||
Snackbar.LENGTH_INDEFINITE,
|
||||
getString(R.string.ok)
|
||||
) {
|
||||
requestPermissionsLauncher.launch(permissions)
|
||||
}
|
||||
} else if (ActivityCompat.shouldShowRequestPermissionRationale(
|
||||
this,
|
||||
Manifest.permission.WRITE_CONTACTS
|
||||
))
|
||||
{
|
||||
layout.showSnackBar(
|
||||
binding.root,
|
||||
getString(R.string.no_android_contacts),
|
||||
Snackbar.LENGTH_INDEFINITE,
|
||||
getString(R.string.ok)
|
||||
) {
|
||||
requestPermissionsLauncher.launch(permissions)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
|
||||
if (BaresipService.activities.indexOf("contact,$newContact,$uOrI") == -1) return true
|
||||
@@ -260,20 +324,13 @@ class ContactActivity : AppCompatActivity() {
|
||||
|
||||
Contact.contacts().sortBy { Contact -> Contact.name }
|
||||
|
||||
if (Utils.checkPermission(this, Manifest.permission.READ_CONTACTS +
|
||||
"|" + Manifest.permission.WRITE_CONTACTS)) {
|
||||
if (Utils.checkPermissions(this, permissions)) {
|
||||
if (contact.androidContact)
|
||||
addOrUpdateAndroidContact(this, contact)
|
||||
else
|
||||
if (oldAndroid)
|
||||
deleteAndroidContact(this, contact)
|
||||
else if (oldAndroid)
|
||||
deleteAndroidContact(this, contact)
|
||||
} else {
|
||||
if (contact.androidContact) {
|
||||
Utils.requestPermission(this, Manifest.permission.READ_CONTACTS +
|
||||
"|" + Manifest.permission.WRITE_CONTACTS,
|
||||
CONTACTS_PERMISSION_REQUEST_CODE)
|
||||
return false
|
||||
}
|
||||
contact.androidContact = oldAndroid
|
||||
}
|
||||
|
||||
Contact.save()
|
||||
@@ -298,23 +355,6 @@ class ContactActivity : AppCompatActivity() {
|
||||
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,
|
||||
grantResults: IntArray) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
|
||||
when (requestCode) {
|
||||
|
||||
CONTACTS_PERMISSION_REQUEST_CODE ->
|
||||
if (grantResults.isNotEmpty() && permissions.size == grantResults.size) {
|
||||
for (res in grantResults)
|
||||
if (res != PackageManager.PERMISSION_GRANTED)
|
||||
return
|
||||
menu.performIdentifierAction(R.id.checkIcon, 0)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
|
||||
BaresipService.activities.remove("contact,$newContact,$uOrI")
|
||||
|
||||
Reference in New Issue
Block a user