Close service after disconnect event

This commit is contained in:
Sylwester Zieliński
2022-02-01 15:47:07 +01:00
parent 05d48ed03e
commit 5b23af133e
9 changed files with 17 additions and 26 deletions

View File

@@ -92,6 +92,13 @@ abstract class BleProfileService : Service() {
}) })
} }
protected fun stopIfDisconnected(status: BleManagerStatus) {
if (status == BleManagerStatus.DISCONNECTED) {
scope.close()
stopSelf()
}
}
override fun onBind(intent: Intent?): IBinder? { override fun onBind(intent: Intent?): IBinder? {
return null return null
} }

View File

@@ -24,9 +24,7 @@ internal class CGMService : ForegroundBleService() {
status.onEach { status.onEach {
val status = it.mapToSimpleManagerStatus() val status = it.mapToSimpleManagerStatus()
repository.setNewStatus(status) repository.setNewStatus(status)
if (status == BleManagerStatus.DISCONNECTED) { stopIfDisconnected(status)
scope.close()
}
}.launchIn(scope) }.launchIn(scope)
repository.command.onEach { repository.command.onEach {

View File

@@ -25,9 +25,7 @@ internal class CSCService : ForegroundBleService() {
status.onEach { status.onEach {
val status = it.mapToSimpleManagerStatus() val status = it.mapToSimpleManagerStatus()
repository.setNewStatus(status) repository.setNewStatus(status)
if (status == BleManagerStatus.DISCONNECTED) { stopIfDisconnected(status)
scope.close()
}
}.launchIn(scope) }.launchIn(scope)
repository.command.onEach { repository.command.onEach {

View File

@@ -5,9 +5,7 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import no.nordicsemi.android.hrs.data.HRSRepository import no.nordicsemi.android.hrs.data.HRSRepository
import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.service.BleManagerStatus
import no.nordicsemi.android.service.BleServiceStatus
import no.nordicsemi.android.service.ForegroundBleService import no.nordicsemi.android.service.ForegroundBleService
import no.nordicsemi.android.utils.exhaustive
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@@ -24,9 +22,7 @@ internal class HRSService : ForegroundBleService() {
status.onEach { status.onEach {
val status = it.mapToSimpleManagerStatus() val status = it.mapToSimpleManagerStatus()
repository.setNewStatus(status) repository.setNewStatus(status)
if (status == BleManagerStatus.DISCONNECTED) { stopIfDisconnected(status)
scope.close()
}
}.launchIn(scope) }.launchIn(scope)
repository.command.onEach { repository.command.onEach {

View File

@@ -1,5 +1,6 @@
package no.nordicsemi.android.hrs.viewmodel package no.nordicsemi.android.hrs.viewmodel
import android.util.Log
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@@ -24,6 +25,7 @@ internal class HRSViewModel @Inject constructor(
) : ViewModel() { ) : ViewModel() {
val state = repository.data.combine(repository.status) { data, status -> val state = repository.data.combine(repository.status) { data, status ->
Log.d("AAATESTAAA", "data: $data, status: $status")
when (status) { when (status) {
BleManagerStatus.CONNECTING -> LoadingState BleManagerStatus.CONNECTING -> LoadingState
BleManagerStatus.OK, BleManagerStatus.OK,

View File

@@ -24,9 +24,7 @@ internal class HTSService : ForegroundBleService() {
status.onEach { status.onEach {
val status = it.mapToSimpleManagerStatus() val status = it.mapToSimpleManagerStatus()
repository.setNewStatus(status) repository.setNewStatus(status)
if (status == BleManagerStatus.DISCONNECTED) { stopIfDisconnected(status)
scope.close()
}
}.launchIn(scope) }.launchIn(scope)
repository.command.onEach { repository.command.onEach {

View File

@@ -1,14 +1,9 @@
package no.nordicsemi.android.prx.repository package no.nordicsemi.android.prx.repository
import android.util.Log
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import no.nordicsemi.android.prx.data.AlarmLevel import no.nordicsemi.android.prx.data.*
import no.nordicsemi.android.prx.data.DisableAlarm
import no.nordicsemi.android.prx.data.Disconnect
import no.nordicsemi.android.prx.data.EnableAlarm
import no.nordicsemi.android.prx.data.PRXRepository
import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.service.BleManagerStatus
import no.nordicsemi.android.service.BleServiceStatus import no.nordicsemi.android.service.BleServiceStatus
import no.nordicsemi.android.service.ForegroundBleService import no.nordicsemi.android.service.ForegroundBleService
@@ -43,6 +38,7 @@ internal class PRXService : ForegroundBleService() {
BleServiceStatus.OK -> BleManagerStatus.OK BleServiceStatus.OK -> BleManagerStatus.OK
BleServiceStatus.DISCONNECTED -> { BleServiceStatus.DISCONNECTED -> {
scope.close() scope.close()
stopSelf()
BleManagerStatus.DISCONNECTED BleManagerStatus.DISCONNECTED
} }
BleServiceStatus.LINK_LOSS -> null BleServiceStatus.LINK_LOSS -> null

View File

@@ -24,9 +24,7 @@ internal class RSCSService : ForegroundBleService() {
status.onEach { status.onEach {
val status = it.mapToSimpleManagerStatus() val status = it.mapToSimpleManagerStatus()
repository.setNewStatus(status) repository.setNewStatus(status)
if (status == BleManagerStatus.DISCONNECTED) { stopIfDisconnected(status)
scope.close()
}
}.launchIn(scope) }.launchIn(scope)
repository.command.onEach { repository.command.onEach {

View File

@@ -25,9 +25,7 @@ internal class UARTService : ForegroundBleService() {
status.onEach { status.onEach {
val status = it.mapToSimpleManagerStatus() val status = it.mapToSimpleManagerStatus()
repository.setNewStatus(status) repository.setNewStatus(status)
if (status == BleManagerStatus.DISCONNECTED) { stopIfDisconnected(status)
scope.close()
}
}.launchIn(scope) }.launchIn(scope)
repository.command.onEach { repository.command.onEach {