mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 22:25:26 +00:00
fix: resolve compilation errors and improve location state handling
- Fix missing imports and stray braces in LocationChannelManager - Implement checkSystemLocationEnabled and BroadcastReceiver for location state - Order class members for correct initialization - Consolidate UI refresh logic in LocationChannelsSheet
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package com.bitchat.android.geohash
|
package com.bitchat.android.geohash
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.IntentFilter
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.location.Geocoder
|
import android.location.Geocoder
|
||||||
import android.location.Location
|
import android.location.Location
|
||||||
@@ -51,6 +53,25 @@ class LocationChannelManager private constructor(private val context: Context) {
|
|||||||
private val gson = Gson()
|
private val gson = Gson()
|
||||||
private var dataManager: com.bitchat.android.ui.DataManager? = null
|
private var dataManager: com.bitchat.android.ui.DataManager? = null
|
||||||
|
|
||||||
|
private fun checkSystemLocationEnabled(): Boolean {
|
||||||
|
return try {
|
||||||
|
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
|
||||||
|
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
|
||||||
|
} catch (_: Exception) {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private val locationStateReceiver = object : android.content.BroadcastReceiver() {
|
||||||
|
override fun onReceive(context: Context?, intent: android.content.Intent?) {
|
||||||
|
if (intent?.action == LocationManager.PROVIDERS_CHANGED_ACTION) {
|
||||||
|
val isEnabled = checkSystemLocationEnabled()
|
||||||
|
Log.d(TAG, "System location state changed: $isEnabled")
|
||||||
|
_systemLocationEnabled.value = isEnabled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Published state for UI bindings (matching iOS @Published properties)
|
// Published state for UI bindings (matching iOS @Published properties)
|
||||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
|
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main.immediate)
|
||||||
|
|
||||||
@@ -96,6 +117,9 @@ class LocationChannelManager private constructor(private val context: Context) {
|
|||||||
dataManager = com.bitchat.android.ui.DataManager(context)
|
dataManager = com.bitchat.android.ui.DataManager(context)
|
||||||
loadPersistedChannelSelection()
|
loadPersistedChannelSelection()
|
||||||
loadLocationServicesState()
|
loadLocationServicesState()
|
||||||
|
|
||||||
|
// Register for system location changes
|
||||||
|
context.registerReceiver(locationStateReceiver, IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Public API (matching iOS interface)
|
// MARK: - Public API (matching iOS interface)
|
||||||
@@ -679,9 +703,6 @@ class LocationChannelManager private constructor(private val context: Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
data class PersistedChannel(
|
data class PersistedChannel(
|
||||||
val mesh: Boolean,
|
val mesh: Boolean,
|
||||||
val level: String? = null,
|
val level: String? = null,
|
||||||
@@ -745,6 +766,9 @@ class LocationChannelManager private constructor(private val context: Context) {
|
|||||||
geocodingJob?.cancel()
|
geocodingJob?.cancel()
|
||||||
geocodingJob = null
|
geocodingJob = null
|
||||||
|
|
||||||
|
// Unregister receiver
|
||||||
|
try { context.unregisterReceiver(locationStateReceiver) } catch (_: Exception) {}
|
||||||
|
|
||||||
// Remove listeners to prevent memory leaks
|
// Remove listeners to prevent memory leaks
|
||||||
try { locationManager.removeUpdates(oneShotLocationListener) } catch (_: Exception) {}
|
try { locationManager.removeUpdates(oneShotLocationListener) } catch (_: Exception) {}
|
||||||
try { locationManager.removeUpdates(continuousLocationListener) } catch (_: Exception) {}
|
try { locationManager.removeUpdates(continuousLocationListener) } catch (_: Exception) {}
|
||||||
|
|||||||
@@ -196,20 +196,6 @@ fun LocationChannelsSheet(
|
|||||||
color = standardGreen
|
color = standardGreen
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
null -> {
|
|
||||||
Row(
|
|
||||||
horizontalArrangement = Arrangement.spacedBy(4.dp),
|
|
||||||
verticalAlignment = Alignment.CenterVertically
|
|
||||||
) {
|
|
||||||
CircularProgressIndicator(modifier = Modifier.size(12.dp))
|
|
||||||
Text(
|
|
||||||
text = stringResource(R.string.checking_permissions),
|
|
||||||
fontSize = 11.sp,
|
|
||||||
fontFamily = FontFamily.Monospace,
|
|
||||||
color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -568,20 +554,6 @@ fun LocationChannelsSheet(
|
|||||||
viewModel.endGeohashSampling()
|
viewModel.endGeohashSampling()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// React to permission changes
|
|
||||||
LaunchedEffect(permissionState) {
|
|
||||||
if (permissionState == LocationChannelManager.PermissionState.AUTHORIZED && locationServicesEnabled) {
|
|
||||||
locationManager.refreshChannels()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// React to location services enable/disable
|
|
||||||
LaunchedEffect(locationServicesEnabled) {
|
|
||||||
if (locationServicesEnabled && permissionState == LocationChannelManager.PermissionState.AUTHORIZED) {
|
|
||||||
locationManager.refreshChannels()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
Reference in New Issue
Block a user