From 2dd3e4bec3b1bb65b83ead60a7e5b9b06ae39bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sylwester=20Zieli=C5=84ski?= Date: Wed, 19 Jan 2022 14:28:42 +0100 Subject: [PATCH] Switch to new navigation. --- app/build.gradle | 1 + .../android/nrftoolbox/AppDestination.kt | 44 +++++++++ .../android/nrftoolbox/HomeScreen.kt | 98 ------------------- .../nordicsemi/android/nrftoolbox/HomeView.kt | 23 +++-- .../android/nrftoolbox/HomeViewModel.kt | 48 ++------- .../android/nrftoolbox/MainActivity.kt | 6 +- .../android/nrftoolbox/NavDestination.kt | 22 ----- .../nordicsemi/android/nrftoolbox/Profile.kt | 55 ----------- profile_bps/build.gradle | 1 + .../nordicsemi/android/bps/view/BPSScreen.kt | 12 +-- .../nordicsemi/android/bps/view/BPSState.kt | 5 - .../android/bps/viewmodel/BPSViewModel.kt | 21 ++-- profile_cgms/build.gradle | 1 + .../nordicsemi/android/cgms/view/CGMScreen.kt | 14 +-- .../android/cgms/view/CGMViewState.kt | 5 - .../cgms/viewmodel/CGMScreenViewModel.kt | 23 +++-- profile_csc/build.gradle | 1 + .../android/csc/repository/CSCManager.kt | 4 +- .../nordicsemi/android/csc/view/CSCScreen.kt | 14 +-- .../nordicsemi/android/csc/view/CSCState.kt | 5 - .../android/csc/viewmodel/CSCViewModel.kt | 23 +++-- profile_dfu/build.gradle | 1 + profile_gls/build.gradle | 1 + .../nordicsemi/android/gls/view/BPSState.kt | 5 - .../nordicsemi/android/gls/view/GLSScreen.kt | 12 +-- .../android/gls/viewmodel/GLSViewModel.kt | 21 ++-- profile_hrs/build.gradle | 1 + .../android/hrs/service/HRSManager.kt | 6 +- .../nordicsemi/android/hrs/view/HRSScreen.kt | 14 +-- .../android/hrs/view/HRSScreenViewEvent.kt | 6 +- .../nordicsemi/android/hrs/view/HRSState.kt | 5 - .../android/hrs/viewmodel/HRSViewModel.kt | 32 ++++-- profile_hts/build.gradle | 1 + .../android/hts/repository/HTSManager.kt | 4 +- .../nordicsemi/android/hts/view/HTSScreen.kt | 14 +-- .../nordicsemi/android/hts/view/HTSState.kt | 5 - .../android/hts/viewmodel/HTSViewModel.kt | 23 +++-- profile_prx/build.gradle | 1 + .../nordicsemi/android/prx/view/PRXScreen.kt | 14 +-- .../nordicsemi/android/prx/view/PRXState.kt | 5 - .../android/prx/viewmodel/PRXViewModel.kt | 23 +++-- profile_rscs/build.gradle | 1 + .../android/rscs/view/RSCSScreen.kt | 14 +-- .../nordicsemi/android/rscs/view/RSCSState.kt | 5 - .../android/rscs/viewmodel/RSCSViewModel.kt | 23 +++-- profile_uart/build.gradle | 1 + .../android/uart/view/UARTScreen.kt | 14 +-- .../nordicsemi/android/uart/view/UARTState.kt | 5 - .../android/uart/viewmodel/UARTViewModel.kt | 23 +++-- settings.gradle | 13 +-- 50 files changed, 295 insertions(+), 424 deletions(-) create mode 100644 app/src/main/java/no/nordicsemi/android/nrftoolbox/AppDestination.kt delete mode 100644 app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeScreen.kt delete mode 100644 app/src/main/java/no/nordicsemi/android/nrftoolbox/NavDestination.kt delete mode 100644 app/src/main/java/no/nordicsemi/android/nrftoolbox/Profile.kt diff --git a/app/build.gradle b/app/build.gradle index eeaf0129..4e4fffac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -71,6 +71,7 @@ dependencies { implementation libs.nordic.ble.common implementation libs.nordic.ui.scanner + implementation libs.nordic.navigation implementation libs.bundles.koin implementation libs.bundles.hilt diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppDestination.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppDestination.kt new file mode 100644 index 00000000..49be6f99 --- /dev/null +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppDestination.kt @@ -0,0 +1,44 @@ +package no.nordicsemi.android.nrftoolbox + +import no.nordicsemi.android.bps.repository.BPS_SERVICE_UUID +import no.nordicsemi.android.bps.view.BPSScreen +import no.nordicsemi.android.cgms.repository.CGMS_SERVICE_UUID +import no.nordicsemi.android.cgms.view.CGMScreen +import no.nordicsemi.android.csc.repository.CSC_SERVICE_UUID +import no.nordicsemi.android.csc.view.CSCScreen +import no.nordicsemi.android.gls.repository.GLS_SERVICE_UUID +import no.nordicsemi.android.gls.view.GLSScreen +import no.nordicsemi.android.hrs.service.HRS_SERVICE_UUID +import no.nordicsemi.android.hrs.view.HRSScreen +import no.nordicsemi.android.hts.repository.HTS_SERVICE_UUID +import no.nordicsemi.android.hts.view.HTSScreen +import no.nordicsemi.android.navigation.ComposeDestination +import no.nordicsemi.android.navigation.ComposeDestinations +import no.nordicsemi.android.prx.service.PRX_SERVICE_UUID +import no.nordicsemi.android.prx.view.PRXScreen +import no.nordicsemi.android.rscs.service.RSCS_SERVICE_UUID +import no.nordicsemi.android.rscs.view.RSCSScreen +import no.nordicsemi.android.uart.repository.UART_SERVICE_UUID +import no.nordicsemi.android.uart.view.UARTScreen +import no.nordicsemi.ui.scanner.navigation.view.FindDeviceScreen +import java.util.* + +val HomeDestinations = ComposeDestinations(HomeDestination.values().map { it.destination }) +val ProfileDestinations = ComposeDestinations(ProfileDestination.values().map { it.destination }) + +enum class HomeDestination(val destination: ComposeDestination) { + HOME(ComposeDestination("home-destination") { HomeScreen() }), + SCANNER(ComposeDestination("scanner-destination") { FindDeviceScreen() }); +} + +enum class ProfileDestination(val destination: ComposeDestination, val uuid: UUID) { + CSC(ComposeDestination("csc-destination") { CSCScreen() }, CSC_SERVICE_UUID), + HRS(ComposeDestination("hrs-destination") { HRSScreen() }, HRS_SERVICE_UUID), + HTS(ComposeDestination("hts-destination") { HTSScreen() }, HTS_SERVICE_UUID), + GLS(ComposeDestination("gls-destination") { GLSScreen() }, GLS_SERVICE_UUID), + BPS(ComposeDestination("bps-destination") { BPSScreen() }, BPS_SERVICE_UUID), + PRX(ComposeDestination("prx-destination") { PRXScreen() }, PRX_SERVICE_UUID), + RSCS(ComposeDestination("rscs-destination") { RSCSScreen() }, RSCS_SERVICE_UUID), + CGMS(ComposeDestination("cgms-destination") { CGMScreen() }, CGMS_SERVICE_UUID), + UART(ComposeDestination("uart-destination") { UARTScreen() }, UART_SERVICE_UUID); +} diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeScreen.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeScreen.kt deleted file mode 100644 index b6266847..00000000 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeScreen.kt +++ /dev/null @@ -1,98 +0,0 @@ -package no.nordicsemi.android.nrftoolbox - -import android.app.Activity -import android.os.ParcelUuid -import androidx.activity.compose.BackHandler -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.ui.platform.LocalContext -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController -import no.nordicsemi.android.bps.view.BPSScreen -import no.nordicsemi.android.cgms.view.CGMScreen -import no.nordicsemi.android.csc.view.CSCScreen -import no.nordicsemi.android.gls.view.GLSScreen -import no.nordicsemi.android.hrs.view.HRSScreen -import no.nordicsemi.android.hts.view.HTSScreen -import no.nordicsemi.android.prx.view.PRXScreen -import no.nordicsemi.android.rscs.view.RSCSScreen -import no.nordicsemi.android.uart.view.UARTScreen -import no.nordicsemi.ui.scanner.navigation.view.FindDeviceScreen -import no.nordicsemi.ui.scanner.ui.exhaustive - -@Composable -internal fun HomeScreen() { - val navController = rememberNavController() - val viewModel: HomeViewModel = hiltViewModel() - - val activity = LocalContext.current as Activity - BackHandler { - if (navController.currentDestination?.navigatorName != NavigationId.HOME.id) { - navController.popBackStack() - } else { - activity.finish() - } - } - - val destination = viewModel.destination.collectAsState() - - val navigateUp = { viewModel.navigateUp() } - - NavHost( - navController = navController, - startDestination = NavigationId.HOME.id - ) { - composable(NavigationId.HOME.id) { - HomeView(viewModel) - } - composable(NavigationId.SCANNER.id) { - val profile = viewModel.profile!! - FindDeviceScreen(ParcelUuid(profile.uuid)) { - viewModel.onScannerFlowResult(it) - } - } - composable(NavigationId.CSC.id) { - CSCScreen(navigateUp) - } - composable(NavigationId.HRS.id) { - HRSScreen(navigateUp) - } - composable(NavigationId.HTS.id) { - HTSScreen(navigateUp) - } - composable(NavigationId.GLS.id) { - GLSScreen(navigateUp) - } - composable(NavigationId.BPS.id) { - BPSScreen(navigateUp) - } - composable(NavigationId.PRX.id) { - PRXScreen(navigateUp) - } - composable(NavigationId.RSCS.id) { - RSCSScreen(navigateUp) - } - composable(NavigationId.CGMS.id) { - CGMScreen(navigateUp) - } - composable(NavigationId.UART.id) { - UARTScreen(navigateUp) - } - } - - val context = LocalContext.current as Activity - LaunchedEffect(destination.value) { - when (val destination = destination.value) { - FinishDestination -> context.finish() - HomeDestination -> navController.navigateUp() - is ProfileDestination -> { - navController.navigateUp() - navController.navigate(destination.id.id) - } - is ScannerDestination -> navController.navigate(destination.id.id) - }.exhaustive - } -} diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeView.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeView.kt index f8ef4975..e8519de3 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeView.kt +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeView.kt @@ -18,10 +18,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel import no.nordicsemi.android.theme.view.CloseIconAppBar @Composable -fun HomeView(viewModel: HomeViewModel) { +fun HomeScreen() { + val viewModel: HomeViewModel = hiltViewModel() + Column { val context = LocalContext.current CloseIconAppBar(stringResource(id = R.string.app_name)) { @@ -43,12 +46,12 @@ fun HomeView(viewModel: HomeViewModel) { DoubleSection( leftView = { FeatureButton(R.drawable.ic_csc, R.string.csc_module, R.string.csc_module_full) { - viewModel.openProfile(Profile.CSC) + viewModel.openProfile(ProfileDestination.CSC) } }, rightView = { FeatureButton(R.drawable.ic_hrs, R.string.hrs_module, R.string.hrs_module_full) { - viewModel.openProfile(Profile.HRS) + viewModel.openProfile(ProfileDestination.HRS) } } ) @@ -58,12 +61,12 @@ fun HomeView(viewModel: HomeViewModel) { DoubleSection( leftView = { FeatureButton(R.drawable.ic_gls, R.string.gls_module, R.string.gls_module_full) { - viewModel.openProfile(Profile.GLS) + viewModel.openProfile(ProfileDestination.GLS) } }, rightView = { FeatureButton(R.drawable.ic_hts, R.string.hts_module, R.string.hts_module_full) { - viewModel.openProfile(Profile.HTS) + viewModel.openProfile(ProfileDestination.HTS) } } ) @@ -73,12 +76,12 @@ fun HomeView(viewModel: HomeViewModel) { DoubleSection( leftView = { FeatureButton(R.drawable.ic_bps, R.string.bps_module, R.string.bps_module_full) { - viewModel.openProfile(Profile.BPS) + viewModel.openProfile(ProfileDestination.BPS) } }, rightView = { FeatureButton(R.drawable.ic_rscs, R.string.rscs_module, R.string.rscs_module_full) { - viewModel.openProfile(Profile.RSCS) + viewModel.openProfile(ProfileDestination.RSCS) } } ) @@ -88,12 +91,12 @@ fun HomeView(viewModel: HomeViewModel) { DoubleSection( leftView = { FeatureButton(R.drawable.ic_prx, R.string.prx_module, R.string.prx_module_full) { - viewModel.openProfile(Profile.PRX) + viewModel.openProfile(ProfileDestination.PRX) } }, rightView = { FeatureButton(R.drawable.ic_cgm, R.string.cgm_module, R.string.cgm_module_full) { - viewModel.openProfile(Profile.CGMS) + viewModel.openProfile(ProfileDestination.CGMS) } } ) @@ -101,7 +104,7 @@ fun HomeView(viewModel: HomeViewModel) { Spacer(modifier = Modifier.height(16.dp)) FeatureButton(R.drawable.ic_uart, R.string.uart_module, R.string.uart_module_full) { - viewModel.openProfile(Profile.UART) + viewModel.openProfile(ProfileDestination.UART) } Spacer(modifier = Modifier.height(16.dp)) diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeViewModel.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeViewModel.kt index 63f33396..3468f08b 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeViewModel.kt +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/HomeViewModel.kt @@ -2,50 +2,22 @@ package no.nordicsemi.android.nrftoolbox import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow +import no.nordicsemi.android.navigation.ForwardDestination +import no.nordicsemi.android.navigation.NavigationManager +import no.nordicsemi.android.navigation.UUIDArgument import no.nordicsemi.android.service.SelectedBluetoothDeviceHolder -import no.nordicsemi.ui.scanner.navigation.view.FindDeviceCloseResult -import no.nordicsemi.ui.scanner.navigation.view.FindDeviceFlowStatus -import no.nordicsemi.ui.scanner.navigation.view.FindDeviceSuccessResult -import no.nordicsemi.ui.scanner.ui.exhaustive import javax.inject.Inject @HiltViewModel class HomeViewModel @Inject constructor( - private val deviceHolder: SelectedBluetoothDeviceHolder + private val deviceHolder: SelectedBluetoothDeviceHolder, + private val navigationManager: NavigationManager ) : ViewModel() { - private val _destination = MutableStateFlow(HomeDestination) - val destination = _destination.asStateFlow() - - var profile: Profile? = null //to pass argument between nav destinations - - fun onScannerFlowResult(status: FindDeviceFlowStatus) { - when (status) { - FindDeviceCloseResult -> navigateUp() - is FindDeviceSuccessResult -> onDeviceSelected(status) - }.exhaustive - } - - fun openProfile(profile: Profile) { - this.profile = profile - _destination.value = ScannerDestination(profile) - } - - fun navigateUp() { - val currentDestination = _destination.value - _destination.value = when (currentDestination) { - FinishDestination -> FinishDestination - HomeDestination -> FinishDestination - is ProfileDestination -> HomeDestination - is ScannerDestination -> HomeDestination - } - } - - private fun onDeviceSelected(result: FindDeviceSuccessResult) { - val profile = requireNotNull(profile) - deviceHolder.attachDevice(result.device) - _destination.value = ProfileDestination(profile.toNavigationId(), profile.isPairingRequired) + fun openProfile(destination: ProfileDestination) { + navigationManager.navigateTo( + ForwardDestination(destination.destination.id), + UUIDArgument(destination.uuid) + ) } } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/MainActivity.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/MainActivity.kt index f37c7668..7ee304cd 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/MainActivity.kt +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/MainActivity.kt @@ -9,6 +9,8 @@ import androidx.compose.ui.Modifier import dagger.hilt.android.AndroidEntryPoint import no.nordicsemi.android.material.you.NordicActivity import no.nordicsemi.android.material.you.NordicTheme +import no.nordicsemi.android.navigation.NavigationView +import no.nordicsemi.ui.scanner.ScannerDestinations @AndroidEntryPoint class MainActivity : NordicActivity() { @@ -22,7 +24,9 @@ class MainActivity : NordicActivity() { color = MaterialTheme.colorScheme.surface, modifier = Modifier.fillMaxSize() ) { - HomeScreen() + NavigationView( + HomeDestinations + ProfileDestinations + ScannerDestinations + ) } } } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/NavDestination.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/NavDestination.kt deleted file mode 100644 index 6dc6bde8..00000000 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/NavDestination.kt +++ /dev/null @@ -1,22 +0,0 @@ -package no.nordicsemi.android.nrftoolbox - -sealed class NavDestination - -object FinishDestination : NavDestination() - -sealed class ForwardDestination : NavDestination() { - abstract val id: NavigationId -} - -object HomeDestination : ForwardDestination() { - override val id: NavigationId = NavigationId.HOME -} - -data class ScannerDestination(val profile: Profile) : ForwardDestination() { - override val id: NavigationId = NavigationId.SCANNER -} - -data class ProfileDestination( - override val id: NavigationId, - val isPairingRequired: Boolean -) : ForwardDestination() diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/Profile.kt b/app/src/main/java/no/nordicsemi/android/nrftoolbox/Profile.kt deleted file mode 100644 index 5ac0d5f5..00000000 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/Profile.kt +++ /dev/null @@ -1,55 +0,0 @@ -package no.nordicsemi.android.nrftoolbox - -import android.os.Parcelable -import kotlinx.parcelize.Parcelize -import no.nordicsemi.android.bps.repository.BPS_SERVICE_UUID -import no.nordicsemi.android.cgms.repository.CGMS_SERVICE_UUID -import no.nordicsemi.android.csc.repository.CYCLING_SPEED_AND_CADENCE_SERVICE_UUID -import no.nordicsemi.android.gls.repository.GLS_SERVICE_UUID -import no.nordicsemi.android.hrs.service.HR_SERVICE_UUID -import no.nordicsemi.android.hts.repository.HT_SERVICE_UUID -import no.nordicsemi.android.prx.service.PRX_SERVICE_UUID -import no.nordicsemi.android.rscs.service.RSCS_SERVICE_UUID -import no.nordicsemi.android.uart.repository.UART_SERVICE_UUID -import java.util.* - -enum class NavigationId(val id: String) { - HOME("home-screen"), - SCANNER("scanner-screen"), - CSC("csc-screen"), - HRS("hrs-screen"), - HTS("hts-screen"), - GLS("gls-screen"), - BPS("bps-screen"), - PRX("prx-screen"), - RSCS("rscs-screen"), - CGMS("cgms-screen"), - UART("uart-screen"); -} - -@Parcelize -enum class Profile(val uuid: UUID, val isPairingRequired: Boolean) : Parcelable { - CSC(CYCLING_SPEED_AND_CADENCE_SERVICE_UUID, false), - HRS(HR_SERVICE_UUID, false), - HTS(HT_SERVICE_UUID, false), - GLS(GLS_SERVICE_UUID, true), - BPS(BPS_SERVICE_UUID, false), - PRX(PRX_SERVICE_UUID, true), - RSCS(RSCS_SERVICE_UUID, false), - CGMS(CGMS_SERVICE_UUID, false), - UART(UART_SERVICE_UUID, false); -} - -fun Profile.toNavigationId(): NavigationId { - return when (this) { - Profile.CSC -> NavigationId.CSC - Profile.HRS -> NavigationId.HRS - Profile.HTS -> NavigationId.HTS - Profile.GLS -> NavigationId.GLS - Profile.BPS -> NavigationId.BPS - Profile.PRX -> NavigationId.PRX - Profile.RSCS -> NavigationId.RSCS - Profile.CGMS -> NavigationId.CGMS - Profile.UART -> NavigationId.UART - } -} diff --git a/profile_bps/build.gradle b/profile_bps/build.gradle index 3f69ab9a..972f2937 100644 --- a/profile_bps/build.gradle +++ b/profile_bps/build.gradle @@ -7,6 +7,7 @@ dependencies { implementation project(":lib_utils") implementation libs.nordic.ble.common + implementation libs.nordic.navigation implementation libs.nordic.log implementation libs.nordic.ui.scanner diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt index dbaf9e4f..90cc6652 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSScreen.kt @@ -13,19 +13,15 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun BPSScreen(finishAction: () -> Unit) { +fun BPSScreen() { val viewModel: BPSViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value - LaunchedEffect(state.isActive) { - if (state.isActive) { - viewModel.connectDevice() - } else { - finishAction() - } + LaunchedEffect(Unit) { + viewModel.connectDevice() } - BPSView(state.viewState) { viewModel.onEvent(it) } + BPSView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSState.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSState.kt index fd7a6f55..b66ee096 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSState.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/view/BPSState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.bps.view import no.nordicsemi.android.bps.data.BPSData -internal data class BPSState( - val viewState: BPSViewState, - val isActive: Boolean = true -) - internal sealed class BPSViewState internal object LoadingState : BPSViewState() diff --git a/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt b/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt index ead6a6c7..741bd9dc 100644 --- a/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt +++ b/profile_bps/src/main/java/no/nordicsemi/android/bps/viewmodel/BPSViewModel.kt @@ -6,14 +6,16 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import no.nordicsemi.android.bps.data.BPSRepository import no.nordicsemi.android.bps.repository.BPSManager import no.nordicsemi.android.bps.view.BPSScreenViewEvent -import no.nordicsemi.android.bps.view.BPSState import no.nordicsemi.android.bps.view.DisconnectEvent import no.nordicsemi.android.bps.view.DisplayDataState import no.nordicsemi.android.bps.view.LoadingState +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.service.ConnectionObserverAdapter import no.nordicsemi.android.service.SelectedBluetoothDeviceHolder @@ -24,16 +26,17 @@ import javax.inject.Inject internal class BPSViewModel @Inject constructor( private val bpsManager: BPSManager, private val deviceHolder: SelectedBluetoothDeviceHolder, - private val repository: BPSRepository + private val repository: BPSRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> BPSState(LoadingState) - BleManagerStatus.OK -> BPSState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> BPSState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, BPSState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) init { bpsManager.setConnectionObserver(object : ConnectionObserverAdapter() { @@ -52,6 +55,12 @@ internal class BPSViewModel @Inject constructor( repository.setNewStatus(BleManagerStatus.DISCONNECTED) } }) + + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) } fun onEvent(event: BPSScreenViewEvent) { diff --git a/profile_cgms/build.gradle b/profile_cgms/build.gradle index fce7ebeb..93ecd6f0 100644 --- a/profile_cgms/build.gradle +++ b/profile_cgms/build.gradle @@ -10,6 +10,7 @@ dependencies { implementation libs.nordic.log implementation libs.nordic.theme + implementation libs.nordic.navigation implementation libs.bundles.compose implementation libs.androidx.core diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt index 32a53631..37615667 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun CGMScreen(finishAction: () -> Unit) { +fun CGMScreen() { val viewModel: CGMScreenViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, CGMService::class.java) - context.startService(intent) - } else if (!state.isActive) { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, CGMService::class.java) + context.startService(intent) } - CGMView(state.viewState) { + CGMView(state) { viewModel.onEvent(it) } } diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt index b2f1116b..aad60987 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/view/CGMViewState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.cgms.view import no.nordicsemi.android.cgms.data.CGMData -internal data class CGMState( - val viewState: CGMViewState, - val isActive: Boolean = true -) - internal sealed class CGMViewState internal object LoadingState : CGMViewState() diff --git a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt index 156e3e89..f3a3e30b 100644 --- a/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt +++ b/profile_cgms/src/main/java/no/nordicsemi/android/cgms/viewmodel/CGMScreenViewModel.kt @@ -5,31 +5,42 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import no.nordicsemi.android.cgms.data.CGMRepository import no.nordicsemi.android.cgms.data.CGMServiceCommand -import no.nordicsemi.android.cgms.view.CGMState import no.nordicsemi.android.cgms.view.CGMViewEvent import no.nordicsemi.android.cgms.view.DisconnectEvent import no.nordicsemi.android.cgms.view.DisplayDataState import no.nordicsemi.android.cgms.view.LoadingState import no.nordicsemi.android.cgms.view.OnWorkingModeSelected +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.utils.exhaustive import javax.inject.Inject @HiltViewModel internal class CGMScreenViewModel @Inject constructor( - private val repository: CGMRepository + private val repository: CGMRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> CGMState(LoadingState) - BleManagerStatus.OK -> CGMState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> CGMState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, CGMState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: CGMViewEvent) { when (event) { diff --git a/profile_csc/build.gradle b/profile_csc/build.gradle index fce7ebeb..93ecd6f0 100644 --- a/profile_csc/build.gradle +++ b/profile_csc/build.gradle @@ -10,6 +10,7 @@ dependencies { implementation libs.nordic.log implementation libs.nordic.theme + implementation libs.nordic.navigation implementation libs.bundles.compose implementation libs.androidx.core diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCManager.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCManager.kt index 35e3569c..1426f542 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCManager.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/repository/CSCManager.kt @@ -35,7 +35,7 @@ import no.nordicsemi.android.service.BatteryManager import java.util.* /** Cycling Speed and Cadence service UUID. */ -val CYCLING_SPEED_AND_CADENCE_SERVICE_UUID: UUID = UUID.fromString("00001816-0000-1000-8000-00805f9b34fb") +val CSC_SERVICE_UUID: UUID = UUID.fromString("00001816-0000-1000-8000-00805f9b34fb") /** Cycling Speed and Cadence Measurement characteristic UUID. */ private val CSC_MEASUREMENT_CHARACTERISTIC_UUID = UUID.fromString("00002A5B-0000-1000-8000-00805f9b34fb") @@ -101,7 +101,7 @@ internal class CSCManager(context: Context, private val repository: CSCRepositor } public override fun isRequiredServiceSupported(gatt: BluetoothGatt): Boolean { - val service = gatt.getService(CYCLING_SPEED_AND_CADENCE_SERVICE_UUID) + val service = gatt.getService(CSC_SERVICE_UUID) if (service != null) { cscMeasurementCharacteristic = service.getCharacteristic( CSC_MEASUREMENT_CHARACTERISTIC_UUID diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt index 1ce42f26..c3acf069 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun CSCScreen(finishAction: () -> Unit) { +fun CSCScreen() { val viewModel: CSCViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, CSCService::class.java) - context.startService(intent) - } else { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, CSCService::class.java) + context.startService(intent) } - CSCView(state.viewState) { viewModel.onEvent(it) } + CSCView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCState.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCState.kt index 792db91d..a43fda58 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCState.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/view/CSCState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.csc.view import no.nordicsemi.android.csc.data.CSCData -internal data class CSCState( - val viewState: CSCViewState, - val isActive: Boolean = true -) - internal sealed class CSCViewState internal object LoadingState : CSCViewState() diff --git a/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt b/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt index 6ba45cbd..4911ef9c 100644 --- a/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt +++ b/profile_csc/src/main/java/no/nordicsemi/android/csc/viewmodel/CSCViewModel.kt @@ -5,33 +5,44 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import no.nordicsemi.android.csc.data.CSCRepository import no.nordicsemi.android.csc.data.DisconnectCommand import no.nordicsemi.android.csc.data.SetWheelSizeCommand -import no.nordicsemi.android.csc.view.CSCState import no.nordicsemi.android.csc.view.CSCViewEvent import no.nordicsemi.android.csc.view.DisplayDataState import no.nordicsemi.android.csc.view.LoadingState import no.nordicsemi.android.csc.view.OnDisconnectButtonClick import no.nordicsemi.android.csc.view.OnSelectedSpeedUnitSelected import no.nordicsemi.android.csc.view.OnWheelSizeSelected +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.utils.exhaustive import javax.inject.Inject @HiltViewModel internal class CSCViewModel @Inject constructor( - private val repository: CSCRepository + private val repository: CSCRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> CSCState(LoadingState) - BleManagerStatus.OK -> CSCState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> CSCState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, CSCState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: CSCViewEvent) { when (event) { diff --git a/profile_dfu/build.gradle b/profile_dfu/build.gradle index 403a25fb..3ea76c0a 100644 --- a/profile_dfu/build.gradle +++ b/profile_dfu/build.gradle @@ -10,6 +10,7 @@ dependencies { implementation libs.nordic.ble.common implementation libs.nordic.theme + implementation libs.nordic.navigation implementation libs.nordic.log implementation libs.nordic.dfu diff --git a/profile_gls/build.gradle b/profile_gls/build.gradle index 60678006..8be488cc 100644 --- a/profile_gls/build.gradle +++ b/profile_gls/build.gradle @@ -11,6 +11,7 @@ dependencies { implementation libs.nordic.ble.common implementation libs.nordic.theme implementation libs.nordic.ui.scanner + implementation libs.nordic.navigation implementation libs.nordic.log diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/view/BPSState.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/view/BPSState.kt index ee29a992..f6145612 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/view/BPSState.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/view/BPSState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.gls.view import no.nordicsemi.android.gls.data.GLSData -internal data class GLSState( - val viewState: GLSViewState, - val isActive: Boolean = true -) - internal sealed class GLSViewState internal object LoadingState : GLSViewState() diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSScreen.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSScreen.kt index b67f63e6..9b738853 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSScreen.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/view/GLSScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun GLSScreen(finishAction: () -> Unit) { +fun GLSScreen() { val viewModel: GLSViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value Log.d("AAATESTAAA", "$viewModel") //TODO fix screen rotation - LaunchedEffect(state.isActive) { - if (state.isActive) { - viewModel.connectDevice() - } else { - finishAction() - } + LaunchedEffect(Unit) { + viewModel.connectDevice() } - GLSView(state.viewState) { + GLSView(state) { viewModel.onEvent(it) } } diff --git a/profile_gls/src/main/java/no/nordicsemi/android/gls/viewmodel/GLSViewModel.kt b/profile_gls/src/main/java/no/nordicsemi/android/gls/viewmodel/GLSViewModel.kt index 1fe8c212..6e973eb7 100644 --- a/profile_gls/src/main/java/no/nordicsemi/android/gls/viewmodel/GLSViewModel.kt +++ b/profile_gls/src/main/java/no/nordicsemi/android/gls/viewmodel/GLSViewModel.kt @@ -6,13 +6,15 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import no.nordicsemi.android.gls.data.GLSRepository import no.nordicsemi.android.gls.data.WorkingMode import no.nordicsemi.android.gls.repository.GLSManager import no.nordicsemi.android.gls.view.DisplayDataState -import no.nordicsemi.android.gls.view.GLSState import no.nordicsemi.android.gls.view.LoadingState +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.service.ConnectionObserverAdapter import no.nordicsemi.android.service.SelectedBluetoothDeviceHolder @@ -23,16 +25,17 @@ import javax.inject.Inject internal class GLSViewModel @Inject constructor( private val glsManager: GLSManager, private val deviceHolder: SelectedBluetoothDeviceHolder, - private val repository: GLSRepository + private val repository: GLSRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> GLSState(LoadingState) - BleManagerStatus.OK -> GLSState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> GLSState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, GLSState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) init { glsManager.setConnectionObserver(object : ConnectionObserverAdapter() { @@ -51,6 +54,12 @@ internal class GLSViewModel @Inject constructor( repository.setNewStatus(BleManagerStatus.DISCONNECTED) } }) + + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) } fun onEvent(event: GLSScreenViewEvent) { diff --git a/profile_hrs/build.gradle b/profile_hrs/build.gradle index 662e3f13..d4d5d476 100644 --- a/profile_hrs/build.gradle +++ b/profile_hrs/build.gradle @@ -9,6 +9,7 @@ dependencies { implementation libs.chart implementation libs.nordic.ble.common + implementation libs.nordic.navigation implementation libs.nordic.log diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSManager.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSManager.kt index 2b263eb6..464b8d8b 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSManager.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/service/HRSManager.kt @@ -34,7 +34,7 @@ import no.nordicsemi.android.hrs.data.HRSRepository import no.nordicsemi.android.service.BatteryManager import java.util.* -val HR_SERVICE_UUID: UUID = UUID.fromString("0000180D-0000-1000-8000-00805f9b34fb") +val HRS_SERVICE_UUID: UUID = UUID.fromString("0000180D-0000-1000-8000-00805f9b34fb") private val BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID = UUID.fromString("00002A38-0000-1000-8000-00805f9b34fb") private val HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID = UUID.fromString("00002A37-0000-1000-8000-00805f9b34fb") @@ -100,7 +100,7 @@ internal class HRSManager(context: Context, private val dataHolder: HRSRepositor } override fun isRequiredServiceSupported(gatt: BluetoothGatt): Boolean { - val service = gatt.getService(HR_SERVICE_UUID) + val service = gatt.getService(HRS_SERVICE_UUID) if (service != null) { heartRateCharacteristic = service.getCharacteristic( HEART_RATE_MEASUREMENT_CHARACTERISTIC_UUID @@ -111,7 +111,7 @@ internal class HRSManager(context: Context, private val dataHolder: HRSRepositor override fun isOptionalServiceSupported(gatt: BluetoothGatt): Boolean { super.isOptionalServiceSupported(gatt) - val service = gatt.getService(HR_SERVICE_UUID) + val service = gatt.getService(HRS_SERVICE_UUID) if (service != null) { bodySensorLocationCharacteristic = service.getCharacteristic( BODY_SENSOR_LOCATION_CHARACTERISTIC_UUID diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt index 9c195bab..b2cf2880 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun HRSScreen(finishAction: () -> Unit) { +fun HRSScreen() { val viewModel: HRSViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, HRSService::class.java) - context.startService(intent) - } else { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, HRSService::class.java) + context.startService(intent) } - HRSView(state.viewState) { viewModel.onEvent(it) } + HRSView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreenViewEvent.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreenViewEvent.kt index 07ca835b..0daf3779 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreenViewEvent.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSScreenViewEvent.kt @@ -1,5 +1,7 @@ package no.nordicsemi.android.hrs.view -sealed class HRSScreenViewEvent +internal sealed class HRSScreenViewEvent -object DisconnectEvent : HRSScreenViewEvent() +internal object DisconnectEvent : HRSScreenViewEvent() + +internal object NavigateUpEvent : HRSScreenViewEvent() diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSState.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSState.kt index 7846de62..32f98b03 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSState.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/view/HRSState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.hrs.view import no.nordicsemi.android.hrs.data.HRSData -internal data class HRSState( - val viewState: HRSViewState, - val isActive: Boolean = true -) - internal sealed class HRSViewState internal object LoadingState : HRSViewState() diff --git a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/viewmodel/HRSViewModel.kt b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/viewmodel/HRSViewModel.kt index 84c6aeee..42ded8c1 100644 --- a/profile_hrs/src/main/java/no/nordicsemi/android/hrs/viewmodel/HRSViewModel.kt +++ b/profile_hrs/src/main/java/no/nordicsemi/android/hrs/viewmodel/HRSViewModel.kt @@ -5,33 +5,47 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import no.nordicsemi.android.hrs.data.HRSRepository import no.nordicsemi.android.hrs.view.DisconnectEvent import no.nordicsemi.android.hrs.view.DisplayDataState import no.nordicsemi.android.hrs.view.HRSScreenViewEvent -import no.nordicsemi.android.hrs.view.HRSState import no.nordicsemi.android.hrs.view.LoadingState +import no.nordicsemi.android.hrs.view.NavigateUpEvent +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus +import no.nordicsemi.android.utils.exhaustive import javax.inject.Inject @HiltViewModel internal class HRSViewModel @Inject constructor( - private val repository: HRSRepository + private val repository: HRSRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> HRSState(LoadingState) - BleManagerStatus.OK -> HRSState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> HRSState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, HRSState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: HRSScreenViewEvent) { - (event as? DisconnectEvent)?.let { - onDisconnectButtonClick() - } + when (event) { + DisconnectEvent -> onDisconnectButtonClick() + NavigateUpEvent -> navigationManager.navigateUp() + }.exhaustive } private fun onDisconnectButtonClick() { diff --git a/profile_hts/build.gradle b/profile_hts/build.gradle index fce7ebeb..93ecd6f0 100644 --- a/profile_hts/build.gradle +++ b/profile_hts/build.gradle @@ -10,6 +10,7 @@ dependencies { implementation libs.nordic.log implementation libs.nordic.theme + implementation libs.nordic.navigation implementation libs.bundles.compose implementation libs.androidx.core diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSManager.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSManager.kt index 71d006ff..c3fd2d4d 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSManager.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/repository/HTSManager.kt @@ -32,7 +32,7 @@ import no.nordicsemi.android.hts.data.HTSRepository import no.nordicsemi.android.service.BatteryManager import java.util.* -val HT_SERVICE_UUID: UUID = UUID.fromString("00001809-0000-1000-8000-00805f9b34fb") +val HTS_SERVICE_UUID: UUID = UUID.fromString("00001809-0000-1000-8000-00805f9b34fb") private val HT_MEASUREMENT_CHARACTERISTIC_UUID = UUID.fromString("00002A1C-0000-1000-8000-00805f9b34fb") /** @@ -81,7 +81,7 @@ internal class HTSManager internal constructor( } override fun isRequiredServiceSupported(gatt: BluetoothGatt): Boolean { - val service = gatt.getService(HT_SERVICE_UUID) + val service = gatt.getService(HTS_SERVICE_UUID) if (service != null) { htCharacteristic = service.getCharacteristic(HT_MEASUREMENT_CHARACTERISTIC_UUID) } diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt index 850d14df..51bf987b 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun HTSScreen(finishAction: () -> Unit) { +fun HTSScreen() { val viewModel: HTSViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, HTSService::class.java) - context.startService(intent) - } else { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, HTSService::class.java) + context.startService(intent) } - HTSView(state.viewState) { viewModel.onEvent(it) } + HTSView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSState.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSState.kt index 59bed010..36e8c6dc 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSState.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/view/HTSState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.hts.view import no.nordicsemi.android.hts.data.HTSData -internal data class HTSState( - val viewState: HTSViewState, - val isActive: Boolean = true -) - internal sealed class HTSViewState internal object LoadingState : HTSViewState() diff --git a/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt b/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt index 60748833..3399abc4 100644 --- a/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt +++ b/profile_hts/src/main/java/no/nordicsemi/android/hts/viewmodel/HTSViewModel.kt @@ -5,30 +5,41 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import no.nordicsemi.android.hts.data.HTSRepository import no.nordicsemi.android.hts.view.DisconnectEvent import no.nordicsemi.android.hts.view.DisplayDataState import no.nordicsemi.android.hts.view.HTSScreenViewEvent -import no.nordicsemi.android.hts.view.HTSState import no.nordicsemi.android.hts.view.LoadingState import no.nordicsemi.android.hts.view.OnTemperatureUnitSelected +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.utils.exhaustive import javax.inject.Inject @HiltViewModel internal class HTSViewModel @Inject constructor( - private val repository: HTSRepository + private val repository: HTSRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> HTSState(LoadingState) - BleManagerStatus.OK -> HTSState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> HTSState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, HTSState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: HTSScreenViewEvent) { when (event) { diff --git a/profile_prx/build.gradle b/profile_prx/build.gradle index d397c91b..857c71f1 100644 --- a/profile_prx/build.gradle +++ b/profile_prx/build.gradle @@ -9,6 +9,7 @@ dependencies { implementation libs.nordic.ble.common implementation libs.nordic.log + implementation libs.nordic.navigation implementation libs.bundles.compose implementation libs.androidx.core diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt index 34d4fb0c..061e5b84 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXScreen.kt @@ -17,21 +17,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun PRXScreen(finishAction: () -> Unit) { +fun PRXScreen() { val viewModel: PRXViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, PRXService::class.java) - context.startService(intent) - } else { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, PRXService::class.java) + context.startService(intent) } - PRXView(state.viewState) { viewModel.onEvent(it) } + PRXView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXState.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXState.kt index 6445baa8..91bda9ee 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXState.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/view/PRXState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.prx.view import no.nordicsemi.android.prx.data.PRXData -internal data class PRXState( - val viewState: PRXViewState, - val isActive: Boolean = true -) - internal sealed class PRXViewState internal object LoadingState : PRXViewState() diff --git a/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt b/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt index 9b24debc..517e0504 100644 --- a/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt +++ b/profile_prx/src/main/java/no/nordicsemi/android/prx/viewmodel/PRXViewModel.kt @@ -5,7 +5,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.prx.data.DisableAlarm import no.nordicsemi.android.prx.data.Disconnect import no.nordicsemi.android.prx.data.EnableAlarm @@ -14,7 +17,6 @@ import no.nordicsemi.android.prx.view.DisconnectEvent import no.nordicsemi.android.prx.view.DisplayDataState import no.nordicsemi.android.prx.view.LoadingState import no.nordicsemi.android.prx.view.PRXScreenViewEvent -import no.nordicsemi.android.prx.view.PRXState import no.nordicsemi.android.prx.view.TurnOffAlert import no.nordicsemi.android.prx.view.TurnOnAlert import no.nordicsemi.android.service.BleManagerStatus @@ -23,16 +25,25 @@ import javax.inject.Inject @HiltViewModel internal class PRXViewModel @Inject constructor( - private val repository: PRXRepository + private val repository: PRXRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> PRXState(LoadingState) - BleManagerStatus.OK -> PRXState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> PRXState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, PRXState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: PRXScreenViewEvent) { when (event) { diff --git a/profile_rscs/build.gradle b/profile_rscs/build.gradle index d397c91b..857c71f1 100644 --- a/profile_rscs/build.gradle +++ b/profile_rscs/build.gradle @@ -9,6 +9,7 @@ dependencies { implementation libs.nordic.ble.common implementation libs.nordic.log + implementation libs.nordic.navigation implementation libs.bundles.compose implementation libs.androidx.core diff --git a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt index 1c95baa5..802ef968 100644 --- a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt +++ b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.theme.view.DeviceConnectingView import no.nordicsemi.android.utils.exhaustive @Composable -fun RSCSScreen(finishAction: () -> Unit) { +fun RSCSScreen() { val viewModel: RSCSViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, RSCSService::class.java) - context.startService(intent) - } else { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, RSCSService::class.java) + context.startService(intent) } - RSCSView(state.viewState) { viewModel.onEvent(it) } + RSCSView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSState.kt b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSState.kt index c989d8a3..88954079 100644 --- a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSState.kt +++ b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/view/RSCSState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.rscs.view import no.nordicsemi.android.rscs.data.RSCSData -internal data class RSCSState( - val viewState: RSCSViewState, - val isActive: Boolean = true -) - internal sealed class RSCSViewState internal object LoadingState : RSCSViewState() diff --git a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/viewmodel/RSCSViewModel.kt b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/viewmodel/RSCSViewModel.kt index e35911b8..b7c3aa09 100644 --- a/profile_rscs/src/main/java/no/nordicsemi/android/rscs/viewmodel/RSCSViewModel.kt +++ b/profile_rscs/src/main/java/no/nordicsemi/android/rscs/viewmodel/RSCSViewModel.kt @@ -5,12 +5,14 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.rscs.data.RSCSRepository import no.nordicsemi.android.rscs.view.DisconnectEvent import no.nordicsemi.android.rscs.view.DisplayDataState import no.nordicsemi.android.rscs.view.LoadingState -import no.nordicsemi.android.rscs.view.RSCSState import no.nordicsemi.android.rscs.view.RSCScreenViewEvent import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.utils.exhaustive @@ -18,16 +20,25 @@ import javax.inject.Inject @HiltViewModel internal class RSCSViewModel @Inject constructor( - private val repository: RSCSRepository + private val repository: RSCSRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> RSCSState(LoadingState) - BleManagerStatus.OK -> RSCSState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> RSCSState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, RSCSState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: RSCScreenViewEvent) { when (event) { diff --git a/profile_uart/build.gradle b/profile_uart/build.gradle index 803ac110..f85ed147 100644 --- a/profile_uart/build.gradle +++ b/profile_uart/build.gradle @@ -10,6 +10,7 @@ dependencies { implementation libs.nordic.log implementation libs.nordic.theme + implementation libs.nordic.navigation implementation libs.bundles.compose implementation libs.androidx.core diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt index 97ae8ed9..35353201 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTScreen.kt @@ -16,21 +16,17 @@ import no.nordicsemi.android.uart.viewmodel.UARTViewModel import no.nordicsemi.android.utils.exhaustive @Composable -fun UARTScreen(finishAction: () -> Unit) { +fun UARTScreen() { val viewModel: UARTViewModel = hiltViewModel() val state = viewModel.state.collectAsState().value val context = LocalContext.current - LaunchedEffect(state.isActive) { - if (state.isActive) { - val intent = Intent(context, UARTService::class.java) - context.startService(intent) - } else if (!state.isActive) { - finishAction() - } + LaunchedEffect(Unit) { + val intent = Intent(context, UARTService::class.java) + context.startService(intent) } - UARTView(state.viewState) { viewModel.onEvent(it) } + UARTView(state) { viewModel.onEvent(it) } } @Composable diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt index 823a336b..31c34d7e 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/view/UARTState.kt @@ -2,11 +2,6 @@ package no.nordicsemi.android.uart.view import no.nordicsemi.android.uart.data.UARTData -internal data class UARTState( - val viewState: UARTViewState, - val isActive: Boolean = true -) - internal sealed class UARTViewState internal object LoadingState : UARTViewState() diff --git a/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt b/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt index 1b3b10cd..0d725e67 100644 --- a/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt +++ b/profile_uart/src/main/java/no/nordicsemi/android/uart/viewmodel/UARTViewModel.kt @@ -5,7 +5,10 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn +import no.nordicsemi.android.navigation.NavigationManager import no.nordicsemi.android.service.BleManagerStatus import no.nordicsemi.android.uart.data.DisconnectCommand import no.nordicsemi.android.uart.data.SendTextCommand @@ -16,23 +19,31 @@ import no.nordicsemi.android.uart.view.OnCreateMacro import no.nordicsemi.android.uart.view.OnDeleteMacro import no.nordicsemi.android.uart.view.OnDisconnectButtonClick import no.nordicsemi.android.uart.view.OnRunMacro -import no.nordicsemi.android.uart.view.UARTState import no.nordicsemi.android.uart.view.UARTViewEvent import no.nordicsemi.android.utils.exhaustive import javax.inject.Inject @HiltViewModel internal class UARTViewModel @Inject constructor( - private val repository: UARTRepository + private val repository: UARTRepository, + private val navigationManager: NavigationManager ) : ViewModel() { val state = repository.data.combine(repository.status) { data, status -> when (status) { - BleManagerStatus.CONNECTING -> UARTState(LoadingState) - BleManagerStatus.OK -> UARTState(DisplayDataState(data)) - BleManagerStatus.DISCONNECTED -> UARTState(DisplayDataState(data), false) + BleManagerStatus.CONNECTING -> LoadingState + BleManagerStatus.OK, + BleManagerStatus.DISCONNECTED -> DisplayDataState(data) } - }.stateIn(viewModelScope, SharingStarted.Lazily, UARTState(LoadingState)) + }.stateIn(viewModelScope, SharingStarted.Lazily, LoadingState) + + init { + repository.status.onEach { + if (it == BleManagerStatus.DISCONNECTED) { + navigationManager.navigateUp() + } + }.launchIn(viewModelScope) + } fun onEvent(event: UARTViewEvent) { when (event) { diff --git a/settings.gradle b/settings.gradle index be26bef9..4fe6b679 100644 --- a/settings.gradle +++ b/settings.gradle @@ -11,6 +11,7 @@ dependencyResolutionManagement { versionCatalogs { libs { + alias('nordic-navigation').to('no.nordicsemi.android.common:navigation:1.0.0') alias('nordic-theme').to('no.nordicsemi.android.common:theme:1.0.0') alias('nordic-ble-common').to('no.nordicsemi.android:ble-common:2.3.1') alias('nordic-log').to('no.nordicsemi.android:log:2.3.0') @@ -76,11 +77,13 @@ include ':app' include ':profile_bps' include ':profile_cgms' include ':profile_csc' +include ':profile_dfu' include ':profile_gls' include ':profile_hrs' include ':profile_hts' include ':profile_prx' include ':profile_rscs' +include ':profile_uart' include ':lib_service' include ':lib_theme' @@ -89,13 +92,3 @@ include ':lib_utils' if (file('../Android-Common-Libraries').exists()) { includeBuild('../Android-Common-Libraries') } - -//if (file('../Android-BLE-Library').exists()) { -// includeBuild('../Android-BLE-Library') -//} -// -//if (file('../Android-Scanner-Compat-Library').exists()) { -// includeBuild('../Android-Scanner-Compat-Library') -//} -include ':profile_uart' -include ':profile_dfu'