From fb8f3c0c7924f1e87b4bfcfa55fdfbf83941519d Mon Sep 17 00:00:00 2001 From: a1denvalu3 <43107113+a1denvalu3@users.noreply.github.com> Date: Fri, 19 Jun 2026 09:45:24 +0200 Subject: [PATCH] fix(wifiaware): validate ACCESS_FINE_LOCATION permission before starting services (#718) --- .../android/wifi-aware/WifiAwareController.kt | 13 ++++++++++ .../wifi-aware/WifiAwareMeshService.kt | 24 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareController.kt b/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareController.kt index f2ec4cfa..7d4fc404 100644 --- a/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareController.kt +++ b/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareController.kt @@ -145,6 +145,19 @@ object WifiAwareController { return } + // Require ACCESS_FINE_LOCATION runtime permission + val locationPermissionGranted = androidx.core.content.ContextCompat.checkSelfPermission( + ctx, + android.Manifest.permission.ACCESS_FINE_LOCATION + ) == android.content.pm.PackageManager.PERMISSION_GRANTED + + if (!locationPermissionGranted) { + Log.w(TAG, "Missing ACCESS_FINE_LOCATION permission; not starting Wi‑Fi Aware") + addBlockedDebugMessage("missing-fine-location", "Grant Location permission to start Wi-Fi Aware") + synchronized(lifecycleLock) { starting = false } + return + } + // Android 13+: require NEARBY_WIFI_DEVICES runtime permission if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { val granted = androidx.core.content.ContextCompat.checkSelfPermission(ctx, android.Manifest.permission.NEARBY_WIFI_DEVICES) == android.content.pm.PackageManager.PERMISSION_GRANTED diff --git a/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareMeshService.kt b/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareMeshService.kt index 36eaea1c..727fdd4a 100644 --- a/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareMeshService.kt +++ b/app/src/main/java/com/bitchat/android/wifi-aware/WifiAwareMeshService.kt @@ -330,6 +330,30 @@ class WifiAwareMeshService(private val context: Context) : MeshService, Transpor Log.i(TAG, "Wi-Fi Aware transport disabled by debug settings; not starting") return } + + // Require ACCESS_FINE_LOCATION runtime permission + val fineLocationGranted = androidx.core.content.ContextCompat.checkSelfPermission( + context, + Manifest.permission.ACCESS_FINE_LOCATION + ) == android.content.pm.PackageManager.PERMISSION_GRANTED + + if (!fineLocationGranted) { + Log.w(TAG, "Missing ACCESS_FINE_LOCATION permission; aborting startServices") + return + } + + // Android 13+: require NEARBY_WIFI_DEVICES runtime permission + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + val nearbyGranted = androidx.core.content.ContextCompat.checkSelfPermission( + context, + Manifest.permission.NEARBY_WIFI_DEVICES + ) == android.content.pm.PackageManager.PERMISSION_GRANTED + if (!nearbyGranted) { + Log.w(TAG, "Missing NEARBY_WIFI_DEVICES permission; aborting startServices") + return + } + } + val supportStatus = com.bitchat.android.wifiaware.WifiAwareSupport.evaluate(context) if (!supportStatus.supported) { Log.i(TAG, "Wi-Fi Aware unsupported on this device; not starting (${supportStatus.reason})")