diff --git a/app/debug/app-debug.apk b/app/debug/app-debug.apk index 4a307b20..ac629dfa 100644 Binary files a/app/debug/app-debug.apk and b/app/debug/app-debug.apk differ diff --git a/app/release/app-release.apk b/app/release/app-release.apk index 029dbc88..aca08931 100644 Binary files a/app/release/app-release.apk and b/app/release/app-release.apk differ diff --git a/app/src/main/java/de/simon/dankelmann/bluetoothlespam/Constants/Constants.kt b/app/src/main/java/de/simon/dankelmann/bluetoothlespam/Constants/Constants.kt index 71a82f2c..5acf276c 100644 --- a/app/src/main/java/de/simon/dankelmann/bluetoothlespam/Constants/Constants.kt +++ b/app/src/main/java/de/simon/dankelmann/bluetoothlespam/Constants/Constants.kt @@ -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 + } } \ No newline at end of file diff --git a/app/src/main/java/de/simon/dankelmann/bluetoothlespam/MainActivity.kt b/app/src/main/java/de/simon/dankelmann/bluetoothlespam/MainActivity.kt index 52fe746e..fb70326e 100644 --- a/app/src/main/java/de/simon/dankelmann/bluetoothlespam/MainActivity.kt +++ b/app/src/main/java/de/simon/dankelmann/bluetoothlespam/MainActivity.kt @@ -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) @@ -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) } } } @@ -107,6 +111,23 @@ class MainActivity : AppCompatActivity() { PermissionCheck.requireAllPermissions(this, allPermissions) } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, 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) diff --git a/app/src/main/java/de/simon/dankelmann/bluetoothlespam/PermissionCheck/PermissionCheck.kt b/app/src/main/java/de/simon/dankelmann/bluetoothlespam/PermissionCheck/PermissionCheck.kt index 803ae8d5..7dcb2500 100644 --- a/app/src/main/java/de/simon/dankelmann/bluetoothlespam/PermissionCheck/PermissionCheck.kt +++ b/app/src/main/java/de/simon/dankelmann/bluetoothlespam/PermissionCheck/PermissionCheck.kt @@ -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 @@ -31,10 +36,7 @@ class PermissionCheck (){ var dialogNeeded: MutableList = 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)) { @@ -47,7 +49,6 @@ class PermissionCheck (){ } } - // SHOW DIALOG if(requestNeeded.size > 0){ requestPermissions(activity, requestNeeded.toTypedArray()) @@ -91,7 +92,7 @@ class PermissionCheck (){ } private fun requestPermissions(activity: Activity, permissions: Array){ - ActivityCompat.requestPermissions(activity, permissions, 1234) + ActivityCompat.requestPermissions(activity, permissions, Constants.REQUEST_CODE_MULTIPLE_PERMISSIONS) } fun processPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray): Boolean {