mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-07-19 20:35:45 +00:00
[Android] Add proper Bluetooth permissions check to avoid crashes
Authored-by: edendev <edendev@eden-emu.org> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/261 Co-authored-by: Bix <bix@bixed.xyz> Co-committed-by: Bix <bix@bixed.xyz>
This commit is contained in:
parent
39a46d755f
commit
d8bfc691d1
2 changed files with 40 additions and 1 deletions
|
@ -25,6 +25,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" android:required="false" />
|
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" android:required="false" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||||
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name="org.yuzu.yuzu_emu.YuzuApplication"
|
android:name="org.yuzu.yuzu_emu.YuzuApplication"
|
||||||
|
|
|
@ -65,6 +65,36 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
||||||
private val CHECKED_FIRMWARE = "CheckedFirmware"
|
private val CHECKED_FIRMWARE = "CheckedFirmware"
|
||||||
private var checkedFirmware = false
|
private var checkedFirmware = false
|
||||||
|
|
||||||
|
private val requestBluetoothPermissionsLauncher =
|
||||||
|
registerForActivityResult(androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
|
||||||
|
val granted = permissions.entries.all { it.value }
|
||||||
|
if (granted) {
|
||||||
|
// Permissions were granted.
|
||||||
|
android.widget.Toast.makeText(this, "Bluetooth permissions granted.", android.widget.Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
// Permissions were denied.
|
||||||
|
android.widget.Toast.makeText(this, "Bluetooth permissions denied. Controller support may be limited.", android.widget.Toast.LENGTH_LONG).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkAndRequestBluetoothPermissions() {
|
||||||
|
// This check is only necessary for Android 12 (API level 31) and above.
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
|
||||||
|
val permissionsToRequest = arrayOf(
|
||||||
|
android.Manifest.permission.BLUETOOTH_SCAN,
|
||||||
|
android.Manifest.permission.BLUETOOTH_CONNECT
|
||||||
|
)
|
||||||
|
|
||||||
|
val permissionsNotGranted = permissionsToRequest.filter {
|
||||||
|
checkSelfPermission(it) != android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||||
|
}
|
||||||
|
|
||||||
|
if (permissionsNotGranted.isNotEmpty()) {
|
||||||
|
requestBluetoothPermissionsLauncher.launch(permissionsNotGranted.toTypedArray())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
val splashScreen = installSplashScreen()
|
val splashScreen = installSplashScreen()
|
||||||
splashScreen.setKeepOnScreenCondition { !DirectoryInitialization.areDirectoriesReady }
|
splashScreen.setKeepOnScreenCondition { !DirectoryInitialization.areDirectoriesReady }
|
||||||
|
@ -75,8 +105,13 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
|
||||||
NativeLibrary.initMultiplayer()
|
NativeLibrary.initMultiplayer()
|
||||||
|
|
||||||
binding = ActivityMainBinding.inflate(layoutInflater)
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
|
||||||
|
|
||||||
|
setContentView(binding.root)
|
||||||
|
|
||||||
|
|
||||||
|
checkAndRequestBluetoothPermissions()
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
checkedDecryption = savedInstanceState.getBoolean(CHECKED_DECRYPTION)
|
checkedDecryption = savedInstanceState.getBoolean(CHECKED_DECRYPTION)
|
||||||
checkedFirmware = savedInstanceState.getBoolean(CHECKED_FIRMWARE)
|
checkedFirmware = savedInstanceState.getBoolean(CHECKED_FIRMWARE)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue