Skip to content

Commit

Permalink
Updated Permission Check to support more API Levels
Browse files Browse the repository at this point in the history
  • Loading branch information
simondankelmann committed Nov 3, 2023
1 parent e404734 commit 7205267
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 18 deletions.
Binary file modified app/debug/app-debug.apk
Binary file not shown.
Binary file modified app/release/app-release.apk
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,12 @@ enum class LogLevel{
class Constants {
companion object {
const val ADVERTISE_TIMEOUT = 160

const val UUID_GOOGLE_FAST_PAIRING = "0000fe2c-0000-1000-8000-00805f9b34fb"

// Request Codes
const val REQUEST_CODE_ENABLE_BLUETOOTH = 1
const val REQUEST_CODE_MULTIPLE_PERMISSIONS = 2
const val REQUEST_CODE_SINGLE_PERMISSION = 3

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,29 @@ import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.Menu
import com.google.android.material.navigation.NavigationView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import androidx.drawerlayout.widget.DrawerLayout
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.google.android.material.navigation.NavigationView
import de.simon.dankelmann.bluetoothlespam.AppContext.AppContext
import de.simon.dankelmann.bluetoothlespam.Constants.Constants
import de.simon.dankelmann.bluetoothlespam.PermissionCheck.PermissionCheck
import de.simon.dankelmann.bluetoothlespam.databinding.ActivityMainBinding


class MainActivity : AppCompatActivity() {

private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
private val ENABLE_BLUETOOTH_REQUEST_CODE = 1
private val _logTag = "MainActivity"

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down Expand Up @@ -87,7 +91,7 @@ class MainActivity : AppCompatActivity() {
if (!bluetoothAdapter.isEnabled) {
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
if(PermissionCheck.checkPermission(Manifest.permission.BLUETOOTH_CONNECT, this)){
startActivityForResult(enableBtIntent, ENABLE_BLUETOOTH_REQUEST_CODE)
startActivityForResult(enableBtIntent, Constants.REQUEST_CODE_ENABLE_BLUETOOTH)
}
}
}
Expand All @@ -107,6 +111,23 @@ class MainActivity : AppCompatActivity() {
PermissionCheck.requireAllPermissions(this, allPermissions)
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String?>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)

grantResults.forEachIndexed { index, element ->
var permission = ""
if(permissions.get(index) != null){
permission = permissions.get(index)!!
}

if (element == PackageManager.PERMISSION_GRANTED) {
Log.d(_logTag, "Permission granted for: ${permission}, Request Code: ${requestCode}")
} else {
Log.d(_logTag, "Permission denied for: ${permission}, Request Code: ${requestCode}")
}
}
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.main, menu)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,29 @@ package de.simon.dankelmann.bluetoothlespam.PermissionCheck
import android.app.Activity
import android.app.AlertDialog
import android.content.pm.PackageManager
import android.os.Build
import android.util.Log
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.ContextCompat.checkSelfPermission
import de.simon.dankelmann.bluetoothlespam.AppContext.AppContext
import de.simon.dankelmann.bluetoothlespam.Constants.Constants

class PermissionCheck (){
companion object {
private val _logTag = "PermissionCheck"
fun checkPermission(permission:String, activity: Activity):Boolean{
if(ContextCompat.checkSelfPermission(
AppContext.getContext(),
permission
) == PackageManager.PERMISSION_GRANTED){
if (permission == "android.permission.BLUETOOTH_ADVERTISE" && Build.VERSION.SDK_INT < Build.VERSION_CODES.S)
{
// android.permission.BLUETOOTH_ADMIN was first introduced in api level 31
return true
}

if(ContextCompat.checkSelfPermission(AppContext.getContext(), permission) == PackageManager.PERMISSION_GRANTED){
//Log.d(_logTag, "Permission granted: $permission")
return true
} else {
ActivityCompat.requestPermissions(activity, arrayOf(permission), 1000)
ActivityCompat.requestPermissions(activity, arrayOf(permission), Constants.REQUEST_CODE_SINGLE_PERMISSION)
}
Log.d(_logTag, "Permission not granted: $permission")
return false
Expand All @@ -31,10 +36,7 @@ class PermissionCheck (){
var dialogNeeded: MutableList<String> = mutableListOf()

permissions.forEachIndexed { index, permission ->
if(ContextCompat.checkSelfPermission(
AppContext.getContext(),
permission
) == PackageManager.PERMISSION_GRANTED){
if(ContextCompat.checkSelfPermission(AppContext.getContext(), permission) == PackageManager.PERMISSION_GRANTED){
//Log.d(_logTag, "Permission granted: $permission")
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {
Expand All @@ -47,7 +49,6 @@ class PermissionCheck (){
}
}


// SHOW DIALOG
if(requestNeeded.size > 0){
requestPermissions(activity, requestNeeded.toTypedArray())
Expand Down Expand Up @@ -91,7 +92,7 @@ class PermissionCheck (){
}

private fun requestPermissions(activity: Activity, permissions: Array<String>){
ActivityCompat.requestPermissions(activity, permissions, 1234)
ActivityCompat.requestPermissions(activity, permissions, Constants.REQUEST_CODE_MULTIPLE_PERMISSIONS)
}

fun processPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray): Boolean {
Expand Down

0 comments on commit 7205267

Please sign in to comment.