mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-07-25 07:25:20 +00:00
61 lines
2.3 KiB
Kotlin
61 lines
2.3 KiB
Kotlin
package com.bitchat.android.service
|
|
|
|
import android.content.Context
|
|
import com.bitchat.android.mesh.BluetoothMeshService
|
|
|
|
/**
|
|
* Process-wide holder to share a single BluetoothMeshService instance
|
|
* between the foreground service and UI (MainActivity/ViewModels).
|
|
*/
|
|
object MeshServiceHolder {
|
|
private const val TAG = "MeshServiceHolder"
|
|
@Volatile
|
|
var meshService: BluetoothMeshService? = null
|
|
private set
|
|
|
|
@Synchronized
|
|
fun getOrCreate(context: Context): BluetoothMeshService {
|
|
val existing = meshService
|
|
if (existing != null) {
|
|
// If the existing instance is healthy, reuse it; otherwise, replace it.
|
|
return try {
|
|
if (existing.isReusable()) {
|
|
android.util.Log.d(TAG, "Reusing existing BluetoothMeshService instance")
|
|
existing
|
|
} else {
|
|
android.util.Log.w(TAG, "Existing BluetoothMeshService not reusable; replacing with a fresh instance")
|
|
// Best-effort stop before replacing
|
|
try { existing.stopServices() } catch (e: Exception) {
|
|
android.util.Log.w(TAG, "Error while stopping non-reusable instance: ${e.message}")
|
|
}
|
|
val created = BluetoothMeshService(context.applicationContext)
|
|
android.util.Log.i(TAG, "Created new BluetoothMeshService (replacement)")
|
|
meshService = created
|
|
created
|
|
}
|
|
} catch (e: Exception) {
|
|
android.util.Log.e(TAG, "Error checking service reusability; creating new instance: ${e.message}")
|
|
val created = BluetoothMeshService(context.applicationContext)
|
|
meshService = created
|
|
created
|
|
}
|
|
}
|
|
val created = BluetoothMeshService(context.applicationContext)
|
|
android.util.Log.i(TAG, "Created new BluetoothMeshService (no existing instance)")
|
|
meshService = created
|
|
return created
|
|
}
|
|
|
|
@Synchronized
|
|
fun attach(service: BluetoothMeshService) {
|
|
android.util.Log.d(TAG, "Attaching BluetoothMeshService to holder")
|
|
meshService = service
|
|
}
|
|
|
|
@Synchronized
|
|
fun clear() {
|
|
android.util.Log.d(TAG, "Clearing BluetoothMeshService from holder")
|
|
meshService = null
|
|
}
|
|
}
|