mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 05:25:20 +00:00
patches: wifi aware mesh refactor core (#549)
* Refactor WifiAware memory management and lifecycle handling * Fix Wi-Fi Aware reconnection by ensuring callback unregistration and session watchdog * fix(wifiaware): allow WifiAwareController to restart service if session drops * Enhance WiFi Aware logging with network request timeouts and detailed callback status * Ensure explicit release of WiFi Aware network callbacks on failure or disconnection --------- Co-authored-by: aidenvalue <>
This commit is contained in:
co-authored by
aidenvalue <>
parent
ee4b2610f9
commit
3a1589972b
@@ -71,13 +71,36 @@ object WifiAwareController {
|
||||
}
|
||||
|
||||
fun startIfPossible() {
|
||||
if (_running.value) return
|
||||
if (_running.value) {
|
||||
if (!_enabled.value) return
|
||||
// If already marked running but we are calling this (e.g. after a drop),
|
||||
// ensure we clean up the old service before restarting.
|
||||
stop()
|
||||
}
|
||||
if (!_enabled.value) return
|
||||
val ctx = appContext ?: return
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||
Log.w(TAG, "Wi‑Fi Aware requires Android 10 (Q)+; disabled.")
|
||||
try { com.bitchat.android.ui.debug.DebugSettingsManager.getInstance().addDebugMessage(com.bitchat.android.ui.debug.DebugMessage.SystemMessage("Wi‑Fi Aware not supported on this device (requires Android 10+)")) } catch (_: Exception) {}
|
||||
return
|
||||
}
|
||||
|
||||
// Check system location setting: WifiAwareManager.attach() throws SecurityException if disabled
|
||||
val lm = ctx.getSystemService(Context.LOCATION_SERVICE) as? android.location.LocationManager
|
||||
val locationEnabled = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
lm?.isLocationEnabled == true
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
lm?.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER) == true ||
|
||||
lm?.isProviderEnabled(android.location.LocationManager.NETWORK_PROVIDER) == true
|
||||
}
|
||||
|
||||
if (!locationEnabled) {
|
||||
Log.w(TAG, "Location services are disabled; Wi-Fi Aware cannot start.")
|
||||
try { com.bitchat.android.ui.debug.DebugSettingsManager.getInstance().addDebugMessage(com.bitchat.android.ui.debug.DebugMessage.SystemMessage("Enable Location Services to start Wi-Fi Aware")) } catch (_: Exception) {}
|
||||
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
|
||||
@@ -89,6 +112,7 @@ object WifiAwareController {
|
||||
}
|
||||
try {
|
||||
service = WifiAwareMeshService(ctx).also {
|
||||
Log.i(TAG, "Instantiating WifiAwareMeshService...")
|
||||
it.startServices()
|
||||
_running.value = true
|
||||
try { com.bitchat.android.ui.debug.DebugSettingsManager.getInstance().addDebugMessage(com.bitchat.android.ui.debug.DebugMessage.SystemMessage("Wi‑Fi Aware started")) } catch (_: Exception) {}
|
||||
|
||||
Reference in New Issue
Block a user