mirror of
https://github.com/meshtastic/Meshtastic-Android.git
synced 2026-04-20 22:23:37 +00:00
Decouple mesh service bind from MainActivity (#2743)
This commit is contained in:
parent
69841ebd59
commit
acc3e3f636
2 changed files with 116 additions and 49 deletions
|
|
@ -45,18 +45,11 @@ import androidx.compose.ui.platform.LocalView
|
|||
import androidx.core.content.edit
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.geeksville.mesh.android.BindFailedException
|
||||
import com.geeksville.mesh.android.GeeksvilleApplication
|
||||
import com.geeksville.mesh.android.Logging
|
||||
import com.geeksville.mesh.android.ServiceClient
|
||||
import com.geeksville.mesh.concurrent.handledLaunch
|
||||
import com.geeksville.mesh.model.BluetoothViewModel
|
||||
import com.geeksville.mesh.model.UIViewModel
|
||||
import com.geeksville.mesh.navigation.DEEP_LINK_BASE_URI
|
||||
import com.geeksville.mesh.service.MeshService
|
||||
import com.geeksville.mesh.service.ServiceRepository
|
||||
import com.geeksville.mesh.service.startService
|
||||
import com.geeksville.mesh.ui.MainMenuAction
|
||||
import com.geeksville.mesh.ui.MainScreen
|
||||
import com.geeksville.mesh.ui.common.theme.AppTheme
|
||||
|
|
@ -66,7 +59,6 @@ import com.geeksville.mesh.ui.sharing.toSharedContact
|
|||
import com.geeksville.mesh.util.LanguageUtils
|
||||
import com.geeksville.mesh.util.getPackageInfoCompat
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.Job
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
|
|
@ -76,7 +68,8 @@ class MainActivity :
|
|||
private val bluetoothViewModel: BluetoothViewModel by viewModels()
|
||||
private val model: UIViewModel by viewModels()
|
||||
|
||||
@Inject internal lateinit var serviceRepository: ServiceRepository
|
||||
// This is aware of the Activity lifecycle and handles binding to the mesh service.
|
||||
@Inject internal lateinit var meshServiceClient: MeshServiceClient
|
||||
|
||||
private var showAppIntro by mutableStateOf(false)
|
||||
|
||||
|
|
@ -225,46 +218,6 @@ class MainActivity :
|
|||
}
|
||||
}
|
||||
|
||||
private var serviceSetupJob: Job? = null
|
||||
|
||||
private val mesh =
|
||||
object : ServiceClient<IMeshService>(IMeshService.Stub::asInterface) {
|
||||
override fun onConnected(service: IMeshService) {
|
||||
serviceSetupJob?.cancel()
|
||||
serviceSetupJob =
|
||||
lifecycleScope.handledLaunch {
|
||||
serviceRepository.setMeshService(service)
|
||||
debug("connected to mesh service, connectionState=${model.connectionState.value}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDisconnected() {
|
||||
serviceSetupJob?.cancel()
|
||||
serviceRepository.setMeshService(null)
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindMeshService() {
|
||||
debug("Binding to mesh service!")
|
||||
try {
|
||||
MeshService.startService(this)
|
||||
} catch (ex: Exception) {
|
||||
errormsg("Failed to start service from activity - but ignoring because bind will work ${ex.message}")
|
||||
}
|
||||
|
||||
mesh.connect(this, MeshService.createIntent(), BIND_AUTO_CREATE + BIND_ABOVE_CLIENT)
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
|
||||
try {
|
||||
bindMeshService()
|
||||
} catch (ex: BindFailedException) {
|
||||
errormsg("Bind of MeshService failed${ex.message}")
|
||||
}
|
||||
}
|
||||
|
||||
private fun showSettingsPage() {
|
||||
createSettingsIntent().send()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue