mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2026-01-09 09:44:22 +01:00
Merge pull request #106 from NordicSemiconductor/feature/ui-fixes
Feature/UI fixes
This commit is contained in:
@@ -2,6 +2,16 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="no.nordicsemi.android.nrftoolbox">
|
||||
|
||||
<queries>
|
||||
<package android:name="no.nordicsemi.android.dfu" />
|
||||
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="https" />
|
||||
</intent>
|
||||
</queries>
|
||||
|
||||
<application
|
||||
android:name=".NrfToolboxApplication"
|
||||
android:allowBackup="true"
|
||||
|
||||
@@ -2,6 +2,7 @@ package no.nordicsemi.android.nrftoolbox
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.viewModels
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
@@ -11,11 +12,17 @@ import no.nordicsemi.android.gls.GLSDestinations
|
||||
import no.nordicsemi.android.material.you.NordicActivity
|
||||
import no.nordicsemi.android.material.you.NordicTheme
|
||||
import no.nordicsemi.android.navigation.NavigationView
|
||||
import no.nordicsemi.android.nrftoolbox.repository.ActivitySignals
|
||||
import no.nordicsemi.android.nrftoolbox.viewmodel.HomeViewModel
|
||||
import no.nordicsemi.ui.scanner.ScannerDestinations
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class MainActivity : NordicActivity() {
|
||||
|
||||
@Inject
|
||||
lateinit var activitySignals: ActivitySignals
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
@@ -30,4 +37,9 @@ class MainActivity : NordicActivity() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activitySignals.onResume()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package no.nordicsemi.android.nrftoolbox.repository
|
||||
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class ActivitySignals @Inject constructor() {
|
||||
|
||||
private val _onResumeTrigger = MutableStateFlow(false)
|
||||
val state = _onResumeTrigger.asStateFlow()
|
||||
|
||||
fun onResume() {
|
||||
_onResumeTrigger.value = !_onResumeTrigger.value
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.OnLifecycleEvent
|
||||
import no.nordicsemi.android.nrftoolbox.BuildConfig
|
||||
import no.nordicsemi.android.nrftoolbox.ProfileDestination
|
||||
import no.nordicsemi.android.nrftoolbox.R
|
||||
@@ -51,14 +52,14 @@ fun HomeScreen() {
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
FeatureButton(R.drawable.ic_bps, R.string.bps_module, R.string.bps_module_full) {
|
||||
viewModel.openProfile(ProfileDestination.BPS)
|
||||
FeatureButton(R.drawable.ic_gls, R.string.gls_module, R.string.gls_module_full) {
|
||||
viewModel.openProfile(ProfileDestination.GLS)
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
FeatureButton(R.drawable.ic_gls, R.string.gls_module, R.string.gls_module_full) {
|
||||
viewModel.openProfile(ProfileDestination.GLS)
|
||||
FeatureButton(R.drawable.ic_bps, R.string.bps_module, R.string.bps_module_full) {
|
||||
viewModel.openProfile(ProfileDestination.BPS)
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
@@ -95,14 +96,14 @@ fun HomeScreen() {
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
FeatureButton(R.drawable.ic_prx, R.string.prx_module, R.string.prx_module_full, state.isPRXModuleRunning) {
|
||||
viewModel.openProfile(ProfileDestination.PRX)
|
||||
FeatureButton(R.drawable.ic_cgm, R.string.cgm_module, R.string.cgm_module_full, state.isCGMModuleRunning) {
|
||||
viewModel.openProfile(ProfileDestination.CGMS)
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
FeatureButton(R.drawable.ic_cgm, R.string.cgm_module, R.string.cgm_module_full, state.isCGMModuleRunning) {
|
||||
viewModel.openProfile(ProfileDestination.CGMS)
|
||||
FeatureButton(R.drawable.ic_prx, R.string.prx_module, R.string.prx_module_full, state.isPRXModuleRunning) {
|
||||
viewModel.openProfile(ProfileDestination.PRX)
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
@@ -124,7 +125,12 @@ fun HomeScreen() {
|
||||
val uriHandler = LocalUriHandler.current
|
||||
val context = LocalContext.current
|
||||
val packageManger = context.packageManager
|
||||
FeatureButton(R.drawable.ic_dfu, R.string.dfu_module, R.string.dfu_module_full, null, R.string.dfu_module_info) {
|
||||
|
||||
val description = packageManger.getLaunchIntentForPackage(DFU_PACKAGE_NAME)?.let {
|
||||
R.string.dfu_module_info
|
||||
} ?: R.string.dfu_module_install
|
||||
|
||||
FeatureButton(R.drawable.ic_dfu, R.string.dfu_module, R.string.dfu_module_full, null, description) {
|
||||
val intent = packageManger.getLaunchIntentForPackage(DFU_PACKAGE_NAME)
|
||||
if (intent != null) {
|
||||
context.startActivity(intent)
|
||||
|
||||
@@ -7,5 +7,11 @@ data class HomeViewState(
|
||||
val isRSCSModuleRunning: Boolean = false,
|
||||
val isPRXModuleRunning: Boolean = false,
|
||||
val isCGMModuleRunning: Boolean = false,
|
||||
val isUARTModuleRunning: Boolean = false
|
||||
)
|
||||
val isUARTModuleRunning: Boolean = false,
|
||||
val refreshToggle: Boolean = false
|
||||
) {
|
||||
|
||||
fun copyWithRefresh(): HomeViewState {
|
||||
return copy(refreshToggle = !refreshToggle)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package no.nordicsemi.android.nrftoolbox.viewmodel
|
||||
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
@@ -13,6 +14,7 @@ import no.nordicsemi.android.hrs.service.HRSRepository
|
||||
import no.nordicsemi.android.hts.repository.HTSRepository
|
||||
import no.nordicsemi.android.navigation.NavigationManager
|
||||
import no.nordicsemi.android.nrftoolbox.ProfileDestination
|
||||
import no.nordicsemi.android.nrftoolbox.repository.ActivitySignals
|
||||
import no.nordicsemi.android.nrftoolbox.view.HomeViewState
|
||||
import no.nordicsemi.android.prx.repository.PRXRepository
|
||||
import no.nordicsemi.android.rscs.repository.RSCSRepository
|
||||
@@ -22,6 +24,7 @@ import javax.inject.Inject
|
||||
@HiltViewModel
|
||||
class HomeViewModel @Inject constructor(
|
||||
private val navigationManager: NavigationManager,
|
||||
private val activitySignals: ActivitySignals,
|
||||
cgmRepository: CGMRepository,
|
||||
cscRepository: CSCRepository,
|
||||
hrsRepository: HRSRepository,
|
||||
@@ -62,6 +65,10 @@ class HomeViewModel @Inject constructor(
|
||||
uartRepository.isRunning.onEach {
|
||||
_state.value = _state.value.copy(isUARTModuleRunning = it)
|
||||
}.launchIn(viewModelScope)
|
||||
|
||||
activitySignals.state.onEach {
|
||||
_state.value = _state.value.copyWithRefresh()
|
||||
}.launchIn(viewModelScope)
|
||||
}
|
||||
|
||||
fun openProfile(destination: ProfileDestination) {
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
<string name="cgm_module">CGMS</string>
|
||||
<string name="cgm_module_full">Continuous Glucose</string>
|
||||
<string name="uart_module">UART</string>
|
||||
<string name="uart_module_full">Serial port over BLE</string>
|
||||
<string name="uart_module_full">Universal Asynchronous Receiver/Transmitter (UART)</string>
|
||||
<string name="dfu_module">DFU</string>
|
||||
<string name="dfu_module_full">Device Firmware Update</string>
|
||||
<string name="dfu_module_info">Available in separate application.</string>
|
||||
<string name="dfu_module_info">Open DFU application.</string>
|
||||
<string name="dfu_module_install">Download from Google Play.</string>
|
||||
|
||||
<string name="viewmodel_profiles">ViewModel profiles</string>
|
||||
<string name="service_profiles">Service profiles</string>
|
||||
|
||||
@@ -39,14 +39,10 @@ internal fun UARTAddConfigurationDialog(onEvent: (UARTViewEvent) -> Unit, onDism
|
||||
.padding(16.dp)
|
||||
)
|
||||
|
||||
// Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
NameInput(name, isError)
|
||||
|
||||
// Spacer(modifier = Modifier.height(16.dp))
|
||||
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp),
|
||||
horizontalArrangement = Arrangement.End
|
||||
) {
|
||||
TextButton(onClick = { onDismiss() }) {
|
||||
@@ -96,8 +92,6 @@ private fun NameInput(
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
color = MaterialTheme.colorScheme.error
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.size(16.dp))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -90,6 +91,7 @@ internal fun UARTAddMacroDialog(macro: UARTMacro?, onEvent: (UARTViewEvent) -> U
|
||||
Image(
|
||||
painter = painterResource(id = icon.toResId()),
|
||||
contentDescription = stringResource(id = R.string.uart_macro_icon),
|
||||
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onPrimary),
|
||||
modifier = Modifier
|
||||
.size(40.dp)
|
||||
.clip(RoundedCornerShape(10.dp))
|
||||
|
||||
Reference in New Issue
Block a user