kotlin ble migration
This commit is contained in:
parent
57c1d331d6
commit
55b6807081
|
|
@ -3,6 +3,7 @@ plugins {
|
||||||
id 'org.jetbrains.kotlin.android'
|
id 'org.jetbrains.kotlin.android'
|
||||||
id 'kotlin-kapt'
|
id 'kotlin-kapt'
|
||||||
id 'dagger.hilt.android.plugin'
|
id 'dagger.hilt.android.plugin'
|
||||||
|
id("kotlin-parcelize")
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|
@ -13,8 +14,8 @@ android {
|
||||||
applicationId "llc.arma.ble"
|
applicationId "llc.arma.ble"
|
||||||
minSdk 26
|
minSdk 26
|
||||||
targetSdk 34
|
targetSdk 34
|
||||||
versionCode 25
|
versionCode 27
|
||||||
versionName "1.3.5"
|
versionName "1.3.7"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
vectorDrawables {
|
vectorDrawables {
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"artifactType": {
|
|
||||||
"type": "APK",
|
|
||||||
"kind": "Directory"
|
|
||||||
},
|
|
||||||
"applicationId": "llc.arma.ble",
|
|
||||||
"variantName": "release",
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"type": "SINGLE",
|
|
||||||
"filters": [],
|
|
||||||
"attributes": [],
|
|
||||||
"versionCode": 21,
|
|
||||||
"versionName": "1.3.1",
|
|
||||||
"outputFile": "Arma BLE v1.3.1.apk"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"elementType": "File"
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package llc.arma.ble.app.ui.screen.connection
|
package llc.arma.ble.app.ui.screen.connection
|
||||||
|
|
||||||
|
import android.os.Parcelable
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
import llc.arma.ble.app.ui.common.ViewEvent
|
import llc.arma.ble.app.ui.common.ViewEvent
|
||||||
import llc.arma.ble.app.ui.common.ViewSideEffect
|
import llc.arma.ble.app.ui.common.ViewSideEffect
|
||||||
import llc.arma.ble.app.ui.common.ViewState
|
import llc.arma.ble.app.ui.common.ViewState
|
||||||
|
|
@ -9,6 +11,12 @@ import llc.arma.ble.app.ui.screen.inspection.beacon.BeaconContract
|
||||||
import llc.arma.ble.app.ui.screen.inspection.thermometer.ThermometerContract
|
import llc.arma.ble.app.ui.screen.inspection.thermometer.ThermometerContract
|
||||||
import llc.arma.ble.domain.common.BleException
|
import llc.arma.ble.domain.common.BleException
|
||||||
import llc.arma.ble.domain.model.Ble
|
import llc.arma.ble.domain.model.Ble
|
||||||
|
import llc.arma.ble.domain.model.BleInfo
|
||||||
|
import llc.arma.ble.domain.usecase.AccelScale
|
||||||
|
import llc.arma.ble.domain.usecase.AccelViewMode
|
||||||
|
import llc.arma.ble.domain.usecase.FftAxis
|
||||||
|
import llc.arma.ble.domain.usecase.FftFrequency
|
||||||
|
import llc.arma.ble.domain.usecase.FftViewMode
|
||||||
import llc.arma.ble.domain.usecase.GetBleBySerial
|
import llc.arma.ble.domain.usecase.GetBleBySerial
|
||||||
|
|
||||||
class ConnectionContract {
|
class ConnectionContract {
|
||||||
|
|
@ -60,6 +68,40 @@ class ConnectionContract {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sealed class InnerNavigation : Effect() {
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data class NavigateToAccelHistory(
|
||||||
|
val ble: BleInfo,
|
||||||
|
val accelScale: AccelScale,
|
||||||
|
val accelMode: AccelViewMode,
|
||||||
|
val fftAxis: FftAxis,
|
||||||
|
val fftMode: FftViewMode,
|
||||||
|
val frequency: FftFrequency
|
||||||
|
) : InnerNavigation(), Parcelable
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data class NavigateToAccelRealtime(
|
||||||
|
val ble: BleInfo,
|
||||||
|
val accelScale: AccelScale,
|
||||||
|
val accelMode: AccelViewMode,
|
||||||
|
val fftAxis: FftAxis,
|
||||||
|
val fftMode: FftViewMode,
|
||||||
|
val frequency: FftFrequency
|
||||||
|
) : InnerNavigation(), Parcelable
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
|
data class NavigateToAccelSpectre(
|
||||||
|
val ble: BleInfo,
|
||||||
|
val accelScale: AccelScale,
|
||||||
|
val accelMode: AccelViewMode,
|
||||||
|
val fftAxis: FftAxis,
|
||||||
|
val fftMode: FftViewMode,
|
||||||
|
val frequency: FftFrequency
|
||||||
|
) : InnerNavigation(), Parcelable
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package llc.arma.ble.app.ui.screen.connection
|
package llc.arma.ble.app.ui.screen.connection
|
||||||
|
|
||||||
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
|
@ -10,6 +11,11 @@ import androidx.compose.material.icons.rounded.ArrowBack
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.StrokeCap
|
import androidx.compose.ui.graphics.StrokeCap
|
||||||
|
|
@ -22,6 +28,9 @@ import llc.arma.ble.app.ui.model.BleView
|
||||||
import llc.arma.ble.app.ui.screen.BleInfoView
|
import llc.arma.ble.app.ui.screen.BleInfoView
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.AccelerometerContract
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.AccelerometerContract
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.AccelerometerScreen
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.AccelerometerScreen
|
||||||
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerHistory
|
||||||
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerRealtime
|
||||||
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerSpectre
|
||||||
import llc.arma.ble.app.ui.screen.inspection.beacon.BeaconScreen
|
import llc.arma.ble.app.ui.screen.inspection.beacon.BeaconScreen
|
||||||
import llc.arma.ble.app.ui.screen.password.ChangePasswordContract
|
import llc.arma.ble.app.ui.screen.password.ChangePasswordContract
|
||||||
import llc.arma.ble.app.ui.screen.inspection.thermometer.ThermometerContract
|
import llc.arma.ble.app.ui.screen.inspection.thermometer.ThermometerContract
|
||||||
|
|
@ -38,95 +47,178 @@ fun ConnectionScreen(
|
||||||
val viewModel = hiltViewModel<ConnectionViewModel>()
|
val viewModel = hiltViewModel<ConnectionViewModel>()
|
||||||
val state = viewModel.viewState.value
|
val state = viewModel.viewState.value
|
||||||
|
|
||||||
|
var innerScreen by rememberSaveable {
|
||||||
|
mutableStateOf<ConnectionContract.Effect.InnerNavigation?>(null)
|
||||||
|
}
|
||||||
|
|
||||||
|
BackHandler(innerScreen != null) {
|
||||||
|
innerScreen = null
|
||||||
|
}
|
||||||
|
|
||||||
LaunchedEffect("effect"){
|
LaunchedEffect("effect"){
|
||||||
viewModel.effect.onEach {
|
viewModel.effect.onEach {
|
||||||
when(it){
|
when(it){
|
||||||
is ConnectionContract.Effect.Navigation -> onNavigationEvent(it)
|
is ConnectionContract.Effect.Navigation -> onNavigationEvent(it)
|
||||||
|
is ConnectionContract.Effect.InnerNavigation -> {
|
||||||
|
innerScreen = it
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.launchIn(this)
|
}.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
Column {
|
Box {
|
||||||
|
|
||||||
CenterAlignedTopAppBar(
|
Column {
|
||||||
navigationIcon = {
|
|
||||||
IconButton(
|
|
||||||
onClick = {
|
|
||||||
viewModel.setEvent(ConnectionContract.Event.OnNavigateUp)
|
|
||||||
},
|
|
||||||
content = {
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Rounded.ArrowBack,
|
|
||||||
contentDescription = null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
},
|
|
||||||
title = {
|
|
||||||
|
|
||||||
AnimatedContent(
|
CenterAlignedTopAppBar(
|
||||||
targetState = when(state){
|
navigationIcon = {
|
||||||
is ConnectionContract.State.Display -> state.ble.info.name
|
IconButton(
|
||||||
is ConnectionContract.State.DisplayException -> "Исключение"
|
onClick = {
|
||||||
is ConnectionContract.State.Loading -> "Соединение.."
|
if(innerScreen != null) {
|
||||||
},
|
innerScreen = null
|
||||||
transitionSpec = {
|
} else {
|
||||||
(slideInVertically { height -> height } + fadeIn() with
|
viewModel.setEvent(ConnectionContract.Event.OnNavigateUp)
|
||||||
slideOutVertically { height -> -height } + fadeOut()).using(
|
}
|
||||||
SizeTransform(clip = false)
|
},
|
||||||
)
|
content = {
|
||||||
}
|
Icon(
|
||||||
) { targetText ->
|
imageVector = Icons.Rounded.ArrowBack,
|
||||||
Text(
|
contentDescription = null
|
||||||
text = targetText
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
},
|
||||||
|
title = {
|
||||||
|
|
||||||
}
|
AnimatedContent(
|
||||||
)
|
targetState = when (state) {
|
||||||
|
is ConnectionContract.State.Display -> state.ble.info.name
|
||||||
|
is ConnectionContract.State.DisplayException -> "Исключение"
|
||||||
|
is ConnectionContract.State.Loading -> "Соединение.."
|
||||||
|
},
|
||||||
|
transitionSpec = {
|
||||||
|
(slideInVertically { height -> height } + fadeIn() with
|
||||||
|
slideOutVertically { height -> -height } + fadeOut()).using(
|
||||||
|
SizeTransform(clip = false)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
) { targetText ->
|
||||||
|
Text(
|
||||||
|
text = targetText
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
when (state) {
|
|
||||||
is ConnectionContract.State.DisplayException -> DisplayException(
|
|
||||||
onEvent = {
|
|
||||||
viewModel.setEvent(it)
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
is ConnectionContract.State.Loading -> LoadingState()
|
|
||||||
is ConnectionContract.State.Display -> {
|
|
||||||
when(state.ble){
|
|
||||||
is Ble.Beacon -> BeaconScreen(
|
|
||||||
ble = state.ble,
|
|
||||||
onNavigationEvent = {
|
|
||||||
viewModel.setEvent(ConnectionContract.Event.OnBeaconNavigationEvent(it))
|
|
||||||
}
|
|
||||||
)
|
|
||||||
is Ble.Thermometer -> {
|
|
||||||
|
|
||||||
Column(modifier = Modifier.weight(1f)) {
|
when (state) {
|
||||||
|
is ConnectionContract.State.DisplayException -> DisplayException(
|
||||||
|
onEvent = {
|
||||||
|
viewModel.setEvent(it)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
ThermometerScreen(
|
is ConnectionContract.State.Loading -> LoadingState()
|
||||||
ble = state.ble,
|
is ConnectionContract.State.Display -> {
|
||||||
onNavigationEvent = {
|
when (state.ble) {
|
||||||
viewModel.setEvent(
|
is Ble.Beacon -> BeaconScreen(
|
||||||
ConnectionContract.Event.OnThermometerNavigationEvent(it)
|
ble = state.ble,
|
||||||
|
onNavigationEvent = {
|
||||||
|
viewModel.setEvent(
|
||||||
|
ConnectionContract.Event.OnBeaconNavigationEvent(
|
||||||
|
it
|
||||||
)
|
)
|
||||||
}
|
)
|
||||||
)
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
is Ble.Thermometer -> {
|
||||||
|
|
||||||
|
Column(modifier = Modifier.weight(1f)) {
|
||||||
|
|
||||||
|
ThermometerScreen(
|
||||||
|
ble = state.ble,
|
||||||
|
onNavigationEvent = {
|
||||||
|
viewModel.setEvent(
|
||||||
|
ConnectionContract.Event.OnThermometerNavigationEvent(it)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
is Ble.Accelerometer -> {
|
||||||
|
AccelerometerScreen(ble = state.ble) {
|
||||||
is Ble.Accelerometer -> {
|
viewModel.setEvent(
|
||||||
AccelerometerScreen(ble = state.ble) {
|
ConnectionContract.Event.OnAccelNavigationEvent(it)
|
||||||
viewModel.setEvent(
|
)
|
||||||
ConnectionContract.Event.OnAccelNavigationEvent(it)
|
}
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
innerScreen?.let {
|
||||||
|
|
||||||
|
Surface(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.statusBarsPadding()
|
||||||
|
) {
|
||||||
|
|
||||||
|
when(it){
|
||||||
|
is ConnectionContract.Effect.InnerNavigation.NavigateToAccelHistory -> {
|
||||||
|
|
||||||
|
AccelerometerHistory(
|
||||||
|
ble = it.ble,
|
||||||
|
accelMode = it.accelMode,
|
||||||
|
fftAxis = it.fftAxis,
|
||||||
|
fftMode = it.fftMode,
|
||||||
|
frequency = it.frequency,
|
||||||
|
accelScale = it.accelScale,
|
||||||
|
onDismiss = {
|
||||||
|
innerScreen = null
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
is ConnectionContract.Effect.InnerNavigation.NavigateToAccelRealtime -> {
|
||||||
|
AccelerometerRealtime(
|
||||||
|
ble = it.ble,
|
||||||
|
accelMode = it.accelMode,
|
||||||
|
fftAxis = it.fftAxis,
|
||||||
|
fftMode = it.fftMode,
|
||||||
|
frequency = it.frequency,
|
||||||
|
accelScale = it.accelScale,
|
||||||
|
onDismiss = {
|
||||||
|
innerScreen = null
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
is ConnectionContract.Effect.InnerNavigation.NavigateToAccelSpectre -> {
|
||||||
|
AccelerometerSpectre(
|
||||||
|
ble = it.ble,
|
||||||
|
accelMode = it.accelMode,
|
||||||
|
fftAxis = it.fftAxis,
|
||||||
|
fftMode = it.fftMode,
|
||||||
|
frequency = it.frequency,
|
||||||
|
accelScale = it.accelScale,
|
||||||
|
onDismiss = {
|
||||||
|
innerScreen = null
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,44 @@ class ConnectionViewModel @Inject constructor(
|
||||||
ConnectionContract.Effect.Navigation.NavigateToChangePassword(savedStateHandle.get<String>("serial")!!)
|
ConnectionContract.Effect.Navigation.NavigateToChangePassword(savedStateHandle.get<String>("serial")!!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is AccelerometerContract.Effect.Navigation.NavigateToAccelHistory -> {
|
||||||
|
setEffect {
|
||||||
|
ConnectionContract.Effect.InnerNavigation.NavigateToAccelHistory(
|
||||||
|
event.event.ble,
|
||||||
|
event.event.accelScale,
|
||||||
|
event.event.accelMode,
|
||||||
|
event.event.fftAxis,
|
||||||
|
event.event.fftMode,
|
||||||
|
event.event.frequency
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is AccelerometerContract.Effect.Navigation.NavigateToAccelRealtime -> {
|
||||||
|
setEffect {
|
||||||
|
ConnectionContract.Effect.InnerNavigation.NavigateToAccelRealtime(
|
||||||
|
event.event.ble,
|
||||||
|
event.event.accelScale,
|
||||||
|
event.event.accelMode,
|
||||||
|
event.event.fftAxis,
|
||||||
|
event.event.fftMode,
|
||||||
|
event.event.frequency
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
is AccelerometerContract.Effect.Navigation.NavigateToAccelSpectre -> {
|
||||||
|
setEffect {
|
||||||
|
ConnectionContract.Effect.InnerNavigation.NavigateToAccelSpectre(
|
||||||
|
event.event.ble,
|
||||||
|
event.event.accelScale,
|
||||||
|
event.event.accelMode,
|
||||||
|
event.event.fftAxis,
|
||||||
|
event.event.fftMode,
|
||||||
|
event.event.frequency
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import llc.arma.ble.app.ui.common.ViewState
|
||||||
import llc.arma.ble.app.ui.model.BleView
|
import llc.arma.ble.app.ui.model.BleView
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
||||||
import llc.arma.ble.domain.model.Ble
|
import llc.arma.ble.domain.model.Ble
|
||||||
|
import llc.arma.ble.domain.model.BleInfo
|
||||||
import llc.arma.ble.domain.usecase.AccelScale
|
import llc.arma.ble.domain.usecase.AccelScale
|
||||||
import llc.arma.ble.domain.usecase.AccelViewMode
|
import llc.arma.ble.domain.usecase.AccelViewMode
|
||||||
import llc.arma.ble.domain.usecase.FftAxis
|
import llc.arma.ble.domain.usecase.FftAxis
|
||||||
|
|
@ -19,7 +20,6 @@ class AccelerometerContract {
|
||||||
object OnShowAccelerometerAccel : Event()
|
object OnShowAccelerometerAccel : Event()
|
||||||
object OnHideAccelerometerAccel : Event()
|
object OnHideAccelerometerAccel : Event()
|
||||||
|
|
||||||
object OnShowAccelerometerSpectre : Event()
|
|
||||||
object OnHideAccelerometerSpectre : Event()
|
object OnHideAccelerometerSpectre : Event()
|
||||||
|
|
||||||
object OnShowAccelerometerHistory : Event()
|
object OnShowAccelerometerHistory : Event()
|
||||||
|
|
@ -32,7 +32,7 @@ class AccelerometerContract {
|
||||||
) : Event()
|
) : Event()
|
||||||
|
|
||||||
enum class Next {
|
enum class Next {
|
||||||
ACCEL, SPECTRE, HISTORY
|
ACCEL, HISTORY
|
||||||
}
|
}
|
||||||
|
|
||||||
data class OnAccelScaleEdit(
|
data class OnAccelScaleEdit(
|
||||||
|
|
@ -40,7 +40,7 @@ class AccelerometerContract {
|
||||||
) : Event()
|
) : Event()
|
||||||
|
|
||||||
object OnAccelEdit : Event()
|
object OnAccelEdit : Event()
|
||||||
object OnSpectreEdit : Event()
|
|
||||||
object OnHistoryEdit : Event()
|
object OnHistoryEdit : Event()
|
||||||
object OnFftFrequencyEdit : Event()
|
object OnFftFrequencyEdit : Event()
|
||||||
|
|
||||||
|
|
@ -149,10 +149,6 @@ class AccelerometerContract {
|
||||||
|
|
||||||
object ShowRealtimeViewModeEdit : Effect()
|
object ShowRealtimeViewModeEdit : Effect()
|
||||||
|
|
||||||
object ShowAccelerometerAccel : Effect()
|
|
||||||
object ShowAccelerometerSpectre : Effect()
|
|
||||||
object ShowAccelerometerHistory : Effect()
|
|
||||||
|
|
||||||
object ShowPowerPicker : Effect()
|
object ShowPowerPicker : Effect()
|
||||||
object HidePowerPicker : Effect()
|
object HidePowerPicker : Effect()
|
||||||
|
|
||||||
|
|
@ -170,7 +166,8 @@ class AccelerometerContract {
|
||||||
) : Effect()
|
) : Effect()
|
||||||
|
|
||||||
object ShowAccelEdit : Effect()
|
object ShowAccelEdit : Effect()
|
||||||
object ShowSpectreEdit : Effect()
|
object HideAccelEdit : Effect()
|
||||||
|
|
||||||
object ShowFftFrequencyEdit : Effect()
|
object ShowFftFrequencyEdit : Effect()
|
||||||
object ShowFftAxisEdit : Effect()
|
object ShowFftAxisEdit : Effect()
|
||||||
object ShowFftModeEdit : Effect()
|
object ShowFftModeEdit : Effect()
|
||||||
|
|
@ -185,6 +182,33 @@ class AccelerometerContract {
|
||||||
|
|
||||||
object NavigateToChangePassword : Navigation()
|
object NavigateToChangePassword : Navigation()
|
||||||
|
|
||||||
|
data class NavigateToAccelHistory(
|
||||||
|
val ble: BleInfo,
|
||||||
|
val accelScale: AccelScale,
|
||||||
|
val accelMode: AccelViewMode,
|
||||||
|
val fftAxis: FftAxis,
|
||||||
|
val fftMode: FftViewMode,
|
||||||
|
val frequency: FftFrequency
|
||||||
|
) : Navigation()
|
||||||
|
|
||||||
|
data class NavigateToAccelRealtime(
|
||||||
|
val ble: BleInfo,
|
||||||
|
val accelScale: AccelScale,
|
||||||
|
val accelMode: AccelViewMode,
|
||||||
|
val fftAxis: FftAxis,
|
||||||
|
val fftMode: FftViewMode,
|
||||||
|
val frequency: FftFrequency
|
||||||
|
) : Navigation()
|
||||||
|
|
||||||
|
data class NavigateToAccelSpectre(
|
||||||
|
val ble: BleInfo,
|
||||||
|
val accelScale: AccelScale,
|
||||||
|
val accelMode: AccelViewMode,
|
||||||
|
val fftAxis: FftAxis,
|
||||||
|
val fftMode: FftViewMode,
|
||||||
|
val frequency: FftFrequency
|
||||||
|
) : Navigation()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelFftModeEdit
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelFrequencyEdit
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelFrequencyEdit
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelRealtimeViewEdit
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelRealtimeViewEdit
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelScaleEdit
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelScaleEdit
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelSpectreEdit
|
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelViewEdit
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelViewEdit
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerSpectre
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerSpectre
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerRealtime
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerRealtime
|
||||||
|
|
@ -38,7 +37,7 @@ import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.Write
|
||||||
import llc.arma.ble.domain.model.Ble
|
import llc.arma.ble.domain.model.Ble
|
||||||
|
|
||||||
enum class SheetPage {
|
enum class SheetPage {
|
||||||
HISTORY, ACCEL_SCALE, SPECTRE_SCALE, HISTORY_MODE_EDIT, HISTORY_SCALE, HISTORY_EDIT, ACCEL_EDIT, ACCEL_REALTIME_EDIT, ACCEL, POWER, WRITE, SPECTRE, ACCEL_MODE_EDIT, SPECTRE_MODE_EDIT, SPECTRE_EDIT, FREQUENCY_EDIT, AXIS_EDIT, FFT_MODE_EDIT, INTERVAL_EDIT
|
ACCEL_SCALE, SPECTRE_SCALE, HISTORY_MODE_EDIT, HISTORY_SCALE, HISTORY_EDIT, ACCEL_EDIT, ACCEL_REALTIME_EDIT, POWER, WRITE, ACCEL_MODE_EDIT, SPECTRE_MODE_EDIT, FREQUENCY_EDIT, AXIS_EDIT, FFT_MODE_EDIT, INTERVAL_EDIT
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterialApi::class)
|
@OptIn(ExperimentalMaterialApi::class)
|
||||||
|
|
@ -75,75 +74,6 @@ fun AccelerometerScreen(
|
||||||
|
|
||||||
LaunchedEffect(sheetPage) {
|
LaunchedEffect(sheetPage) {
|
||||||
when (sheetPage) {
|
when (sheetPage) {
|
||||||
SheetPage.HISTORY -> launch {
|
|
||||||
val currentState = viewModel.viewState.value
|
|
||||||
|
|
||||||
if (currentState is AccelerometerContract.State.Display) {
|
|
||||||
bottomDialog.show {
|
|
||||||
AccelerometerHistory(
|
|
||||||
ble = currentState.accelerometer.info,
|
|
||||||
accelMode = currentState.accelViewMode,
|
|
||||||
fftAxis = currentState.fftAxis,
|
|
||||||
fftMode = currentState.fftViewMode,
|
|
||||||
frequency = currentState.fftFrequency,
|
|
||||||
accelScale = currentState.accelScale
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SheetPage.ACCEL -> launch {
|
|
||||||
val currentState = viewModel.viewState.value
|
|
||||||
|
|
||||||
if (currentState is AccelerometerContract.State.Display) {
|
|
||||||
|
|
||||||
bottomDialog.show {
|
|
||||||
|
|
||||||
when(currentState.accelRealtimeViewMode){
|
|
||||||
is RealtimeViewMode.Accel -> {
|
|
||||||
|
|
||||||
AccelerometerRealtime(
|
|
||||||
ble = currentState.accelerometer.info,
|
|
||||||
accelMode = currentState.accelRealtimeViewMode.accelViewMode,
|
|
||||||
fftAxis = currentState.fftAxis,
|
|
||||||
fftMode = currentState.fftViewMode,
|
|
||||||
frequency = currentState.fftFrequency,
|
|
||||||
accelScale = currentState.accelScale
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
RealtimeViewMode.Spectre -> {
|
|
||||||
|
|
||||||
AccelerometerSpectre(
|
|
||||||
ble = currentState.accelerometer.info,
|
|
||||||
accelMode = currentState.accelViewMode,
|
|
||||||
fftAxis = currentState.fftAxis,
|
|
||||||
fftMode = currentState.fftViewMode,
|
|
||||||
frequency = currentState.fftFrequency,
|
|
||||||
accelScale = currentState.accelScale
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SheetPage.SPECTRE -> launch {
|
|
||||||
val currentState = viewModel.viewState.value
|
|
||||||
|
|
||||||
if (currentState is AccelerometerContract.State.Display) {
|
|
||||||
bottomDialog.show {
|
|
||||||
AccelerometerSpectre(
|
|
||||||
ble = currentState.accelerometer.info,
|
|
||||||
accelMode = currentState.accelViewMode,
|
|
||||||
fftAxis = currentState.fftAxis,
|
|
||||||
fftMode = currentState.fftViewMode,
|
|
||||||
frequency = currentState.fftFrequency,
|
|
||||||
accelScale = currentState.accelScale
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SheetPage.POWER -> bottomDialog.show {
|
SheetPage.POWER -> bottomDialog.show {
|
||||||
|
|
||||||
val currentState = viewModel.viewState.value
|
val currentState = viewModel.viewState.value
|
||||||
|
|
@ -198,7 +128,7 @@ fun AccelerometerScreen(
|
||||||
|
|
||||||
if(currentState is AccelerometerContract.State.Display) {
|
if(currentState is AccelerometerContract.State.Display) {
|
||||||
AccelViewEdit(
|
AccelViewEdit(
|
||||||
next = AccelerometerContract.Event.Next.SPECTRE,
|
next = AccelerometerContract.Event.Next.ACCEL,
|
||||||
state = currentState,
|
state = currentState,
|
||||||
onEvent = {
|
onEvent = {
|
||||||
viewModel.setEvent(it)
|
viewModel.setEvent(it)
|
||||||
|
|
@ -221,20 +151,6 @@ fun AccelerometerScreen(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
SheetPage.SPECTRE_EDIT -> bottomDialog.show {
|
|
||||||
|
|
||||||
val currentState = viewModel.viewState.value
|
|
||||||
|
|
||||||
if(currentState is AccelerometerContract.State.Display) {
|
|
||||||
AccelSpectreEdit(
|
|
||||||
state = currentState,
|
|
||||||
onEvent = {
|
|
||||||
viewModel.setEvent(it)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
SheetPage.FREQUENCY_EDIT -> bottomDialog.show {
|
SheetPage.FREQUENCY_EDIT -> bottomDialog.show {
|
||||||
|
|
||||||
|
|
@ -313,7 +229,7 @@ fun AccelerometerScreen(
|
||||||
|
|
||||||
if(currentState is AccelerometerContract.State.Display) {
|
if(currentState is AccelerometerContract.State.Display) {
|
||||||
AccelScaleEdit(
|
AccelScaleEdit(
|
||||||
next = AccelerometerContract.Event.Next.SPECTRE,
|
next = AccelerometerContract.Event.Next.ACCEL,
|
||||||
state = currentState,
|
state = currentState,
|
||||||
onEvent = {
|
onEvent = {
|
||||||
viewModel.setEvent(it)
|
viewModel.setEvent(it)
|
||||||
|
|
@ -397,11 +313,6 @@ fun AccelerometerScreen(
|
||||||
LaunchedEffect("effect"){
|
LaunchedEffect("effect"){
|
||||||
viewModel.effect.onEach {
|
viewModel.effect.onEach {
|
||||||
when(it){
|
when(it){
|
||||||
is AccelerometerContract.Effect.ShowAccelerometerAccel -> launch {
|
|
||||||
sheetPage = null
|
|
||||||
delay(100)
|
|
||||||
sheetPage = SheetPage.ACCEL
|
|
||||||
}
|
|
||||||
is AccelerometerContract.Effect.HidePowerPicker -> launch {
|
is AccelerometerContract.Effect.HidePowerPicker -> launch {
|
||||||
sheetPage = null
|
sheetPage = null
|
||||||
delay(100)
|
delay(100)
|
||||||
|
|
@ -420,25 +331,14 @@ fun AccelerometerScreen(
|
||||||
delay(100)
|
delay(100)
|
||||||
sheetPage = SheetPage.WRITE
|
sheetPage = SheetPage.WRITE
|
||||||
}
|
}
|
||||||
is AccelerometerContract.Effect.ShowAccelerometerSpectre -> launch {
|
|
||||||
sheetPage = null
|
|
||||||
delay(100)
|
|
||||||
sheetPage = SheetPage.SPECTRE
|
|
||||||
}
|
|
||||||
is AccelerometerContract.Effect.ShowAccelViewEdit -> launch {
|
is AccelerometerContract.Effect.ShowAccelViewEdit -> launch {
|
||||||
sheetPage = null
|
sheetPage = null
|
||||||
delay(100)
|
delay(100)
|
||||||
sheetPage = when(it.next){
|
sheetPage = when(it.next){
|
||||||
AccelerometerContract.Event.Next.ACCEL -> SheetPage.ACCEL_MODE_EDIT
|
AccelerometerContract.Event.Next.ACCEL -> SheetPage.ACCEL_MODE_EDIT
|
||||||
AccelerometerContract.Event.Next.SPECTRE -> SheetPage.SPECTRE_MODE_EDIT
|
|
||||||
AccelerometerContract.Event.Next.HISTORY -> SheetPage.HISTORY_MODE_EDIT
|
AccelerometerContract.Event.Next.HISTORY -> SheetPage.HISTORY_MODE_EDIT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is AccelerometerContract.Effect.ShowSpectreEdit -> launch {
|
|
||||||
sheetPage = null
|
|
||||||
delay(100)
|
|
||||||
sheetPage = SheetPage.SPECTRE_EDIT
|
|
||||||
}
|
|
||||||
is AccelerometerContract.Effect.ShowFftFrequencyEdit -> launch {
|
is AccelerometerContract.Effect.ShowFftFrequencyEdit -> launch {
|
||||||
sheetPage = null
|
sheetPage = null
|
||||||
delay(100)
|
delay(100)
|
||||||
|
|
@ -454,11 +354,6 @@ fun AccelerometerScreen(
|
||||||
delay(100)
|
delay(100)
|
||||||
sheetPage = SheetPage.FFT_MODE_EDIT
|
sheetPage = SheetPage.FFT_MODE_EDIT
|
||||||
}
|
}
|
||||||
is AccelerometerContract.Effect.ShowAccelerometerHistory -> launch {
|
|
||||||
sheetPage = null
|
|
||||||
delay(100)
|
|
||||||
sheetPage = SheetPage.HISTORY
|
|
||||||
}
|
|
||||||
is AccelerometerContract.Effect.HideIntervalPicker -> {
|
is AccelerometerContract.Effect.HideIntervalPicker -> {
|
||||||
sheetPage = null
|
sheetPage = null
|
||||||
delay(100)
|
delay(100)
|
||||||
|
|
@ -473,7 +368,6 @@ fun AccelerometerScreen(
|
||||||
delay(100)
|
delay(100)
|
||||||
sheetPage = when(it.next){
|
sheetPage = when(it.next){
|
||||||
AccelerometerContract.Event.Next.ACCEL -> SheetPage.ACCEL_SCALE
|
AccelerometerContract.Event.Next.ACCEL -> SheetPage.ACCEL_SCALE
|
||||||
AccelerometerContract.Event.Next.SPECTRE -> SheetPage.SPECTRE_SCALE
|
|
||||||
AccelerometerContract.Event.Next.HISTORY -> SheetPage.HISTORY_SCALE
|
AccelerometerContract.Event.Next.HISTORY -> SheetPage.HISTORY_SCALE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -500,6 +394,11 @@ fun AccelerometerScreen(
|
||||||
delay(100)
|
delay(100)
|
||||||
sheetPage = SheetPage.ACCEL_REALTIME_EDIT
|
sheetPage = SheetPage.ACCEL_REALTIME_EDIT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AccelerometerContract.Effect.HideAccelEdit -> {
|
||||||
|
sheetPage = null
|
||||||
|
delay(100)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.launchIn(this)
|
}.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ import llc.arma.ble.app.ui.common.BaseViewModel
|
||||||
import llc.arma.ble.app.ui.mapper.BleMapper
|
import llc.arma.ble.app.ui.mapper.BleMapper
|
||||||
import llc.arma.ble.app.ui.mapper.BleViewMapper
|
import llc.arma.ble.app.ui.mapper.BleViewMapper
|
||||||
import llc.arma.ble.app.ui.model.BleView
|
import llc.arma.ble.app.ui.model.BleView
|
||||||
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerHistory
|
||||||
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerRealtime
|
||||||
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.AccelerometerSpectre
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
import llc.arma.ble.app.ui.screen.inspection.accelerometer.view.RealtimeViewMode
|
||||||
import llc.arma.ble.domain.model.Ble
|
import llc.arma.ble.domain.model.Ble
|
||||||
import llc.arma.ble.domain.usecase.AccelScale
|
import llc.arma.ble.domain.usecase.AccelScale
|
||||||
|
|
@ -37,10 +40,8 @@ class AccelerometerViewModel @Inject constructor(
|
||||||
is AccelerometerContract.Event.OnHideWriteBlePreview -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnHideWriteBlePreview -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnWriteBle -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnWriteBle -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnHideAccelerometerSpectre -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnHideAccelerometerSpectre -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnShowAccelerometerSpectre -> reduce(viewState.value, event)
|
|
||||||
is AccelerometerContract.Event.OnAccelViewModeEdit -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnAccelViewModeEdit -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnAccelViewModelChanged -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnAccelViewModelChanged -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnSpectreEdit -> reduce(viewState.value, event)
|
|
||||||
is AccelerometerContract.Event.OnFftFrequencyEdit -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnFftFrequencyEdit -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnFftAxisChanged -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnFftAxisChanged -> reduce(viewState.value, event)
|
||||||
is AccelerometerContract.Event.OnFftFrequencyChanged -> reduce(viewState.value, event)
|
is AccelerometerContract.Event.OnFftFrequencyChanged -> reduce(viewState.value, event)
|
||||||
|
|
@ -347,28 +348,6 @@ class AccelerometerViewModel @Inject constructor(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reduce(
|
|
||||||
state: AccelerometerContract.State,
|
|
||||||
event: AccelerometerContract.Event.OnSpectreEdit
|
|
||||||
) {
|
|
||||||
|
|
||||||
setEffect {
|
|
||||||
AccelerometerContract.Effect.ShowSpectreEdit
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun reduce(
|
|
||||||
state: AccelerometerContract.State,
|
|
||||||
event: AccelerometerContract.Event.OnShowAccelerometerSpectre
|
|
||||||
) {
|
|
||||||
|
|
||||||
setEffect {
|
|
||||||
AccelerometerContract.Effect.ShowAccelerometerSpectre
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun reduce(
|
private fun reduce(
|
||||||
state: AccelerometerContract.State,
|
state: AccelerometerContract.State,
|
||||||
event: AccelerometerContract.Event.OnHideAccelerometerSpectre
|
event: AccelerometerContract.Event.OnHideAccelerometerSpectre
|
||||||
|
|
@ -383,8 +362,26 @@ class AccelerometerViewModel @Inject constructor(
|
||||||
event: AccelerometerContract.Event.OnShowAccelerometerHistory
|
event: AccelerometerContract.Event.OnShowAccelerometerHistory
|
||||||
) {
|
) {
|
||||||
|
|
||||||
setEffect {
|
/*setEffect {
|
||||||
AccelerometerContract.Effect.ShowAccelerometerHistory
|
AccelerometerContract.Effect.ShowAccelerometerHistory
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
|
if (state is AccelerometerContract.State.Display &&
|
||||||
|
state.origin.accelerometerState.saveHistorySettings is Ble.Accelerometer.HistorySettings.Enabled
|
||||||
|
) {
|
||||||
|
setEffect {
|
||||||
|
|
||||||
|
AccelerometerContract.Effect.Navigation.NavigateToAccelHistory(
|
||||||
|
ble = state.accelerometer.info,
|
||||||
|
accelMode = state.origin.accelerometerState.saveHistorySettings.mode,
|
||||||
|
fftAxis = state.fftAxis,
|
||||||
|
fftMode = state.fftViewMode,
|
||||||
|
frequency = state.fftFrequency,
|
||||||
|
accelScale = state.accelScale
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -524,10 +521,48 @@ class AccelerometerViewModel @Inject constructor(
|
||||||
|
|
||||||
if(state is AccelerometerContract.State.Display){
|
if(state is AccelerometerContract.State.Display){
|
||||||
|
|
||||||
setEffect {
|
/*setEffect {
|
||||||
|
|
||||||
AccelerometerContract.Effect.ShowAccelerometerAccel
|
AccelerometerContract.Effect.ShowAccelerometerAccel
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
setEffect {
|
||||||
|
|
||||||
|
AccelerometerContract.Effect.HideAccelEdit
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
setEffect {
|
||||||
|
|
||||||
|
when (state.accelRealtimeViewMode) {
|
||||||
|
is RealtimeViewMode.Accel -> {
|
||||||
|
|
||||||
|
AccelerometerContract.Effect.Navigation.NavigateToAccelRealtime(
|
||||||
|
ble = state.accelerometer.info,
|
||||||
|
accelMode = state.accelRealtimeViewMode.accelViewMode,
|
||||||
|
fftAxis = state.fftAxis,
|
||||||
|
fftMode = state.fftViewMode,
|
||||||
|
frequency = state.fftFrequency,
|
||||||
|
accelScale = state.accelScale
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
is RealtimeViewMode.Spectre -> {
|
||||||
|
|
||||||
|
AccelerometerContract.Effect.Navigation.NavigateToAccelSpectre(
|
||||||
|
ble = state.accelerometer.info,
|
||||||
|
accelMode = state.accelViewMode,
|
||||||
|
fftAxis = state.fftAxis,
|
||||||
|
fftMode = state.fftViewMode,
|
||||||
|
frequency = state.fftFrequency,
|
||||||
|
accelScale = state.accelScale
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,51 @@ import llc.arma.ble.domain.usecase.FftAxis
|
||||||
import llc.arma.ble.domain.usecase.FftFrequency
|
import llc.arma.ble.domain.usecase.FftFrequency
|
||||||
import llc.arma.ble.domain.usecase.FftViewMode
|
import llc.arma.ble.domain.usecase.FftViewMode
|
||||||
|
|
||||||
|
val FftFrequency.localized: String
|
||||||
|
get() {
|
||||||
|
return when(this){
|
||||||
|
FftFrequency.OFF -> "откл"
|
||||||
|
FftFrequency.F_1 -> "1 Гц"
|
||||||
|
FftFrequency.F_10 -> "10 Гц"
|
||||||
|
FftFrequency.F_25 -> "25 Гц"
|
||||||
|
FftFrequency.F_50 -> "50 Гц"
|
||||||
|
FftFrequency.F_100 -> "100 Гц"
|
||||||
|
FftFrequency.F_200 -> "200 Гц"
|
||||||
|
FftFrequency.F_400 -> "400 Гц"
|
||||||
|
FftFrequency.F_1620 -> "1620 Гц"
|
||||||
|
FftFrequency.F_1344 -> "1344 Гц"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val FftAxis.localized: String
|
||||||
|
get() {
|
||||||
|
return when(this){
|
||||||
|
FftAxis.AUTO -> "Авто"
|
||||||
|
FftAxis.X -> "Ось X"
|
||||||
|
FftAxis.Y -> "Ось Y"
|
||||||
|
FftAxis.Z -> "Ось Z"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val FftViewMode.localized: String
|
||||||
|
get() {
|
||||||
|
return when(this){
|
||||||
|
FftViewMode.SPECTRE -> "Спектр"
|
||||||
|
FftViewMode.X -> "Ось X"
|
||||||
|
FftViewMode.Y -> "Ось Y"
|
||||||
|
FftViewMode.Z -> "Ось Z"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val AccelScale.localized: String
|
||||||
|
get() {
|
||||||
|
return when(this){
|
||||||
|
AccelScale.S_2 -> "2g"
|
||||||
|
AccelScale.S_4 -> "4g"
|
||||||
|
AccelScale.S_8 -> "8g"
|
||||||
|
AccelScale.S_16 -> "16g"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AccelEdit(
|
fun AccelEdit(
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,7 @@ fun AccelScaleEdit(
|
||||||
){
|
){
|
||||||
|
|
||||||
var fftMode = when(next){
|
var fftMode = when(next){
|
||||||
AccelerometerContract.Event.Next.ACCEL,
|
AccelerometerContract.Event.Next.ACCEL ->
|
||||||
AccelerometerContract.Event.Next.SPECTRE ->
|
|
||||||
state.accelScale
|
state.accelScale
|
||||||
AccelerometerContract.Event.Next.HISTORY -> {
|
AccelerometerContract.Event.Next.HISTORY -> {
|
||||||
val history = state.accelerometer.accelerometerState.saveHistory
|
val history = state.accelerometer.accelerometerState.saveHistory
|
||||||
|
|
@ -59,8 +58,7 @@ fun AccelScaleEdit(
|
||||||
.clip(RoundedCornerShape(8.dp))
|
.clip(RoundedCornerShape(8.dp))
|
||||||
.clickable {
|
.clickable {
|
||||||
when(next){
|
when(next){
|
||||||
AccelerometerContract.Event.Next.ACCEL,
|
AccelerometerContract.Event.Next.ACCEL ->
|
||||||
AccelerometerContract.Event.Next.SPECTRE ->
|
|
||||||
onEvent(AccelerometerContract.Event.OnAccelScaleChanged(it))
|
onEvent(AccelerometerContract.Event.OnAccelScaleChanged(it))
|
||||||
AccelerometerContract.Event.Next.HISTORY ->
|
AccelerometerContract.Event.Next.HISTORY ->
|
||||||
onEvent(AccelerometerContract.Event.OnHistoryScaleChanged(it))
|
onEvent(AccelerometerContract.Event.OnHistoryScaleChanged(it))
|
||||||
|
|
@ -73,8 +71,7 @@ fun AccelScaleEdit(
|
||||||
selected = it == fftMode,
|
selected = it == fftMode,
|
||||||
onClick = {
|
onClick = {
|
||||||
when(next){
|
when(next){
|
||||||
AccelerometerContract.Event.Next.ACCEL,
|
AccelerometerContract.Event.Next.ACCEL ->
|
||||||
AccelerometerContract.Event.Next.SPECTRE ->
|
|
||||||
onEvent(AccelerometerContract.Event.OnAccelScaleChanged(it))
|
onEvent(AccelerometerContract.Event.OnAccelScaleChanged(it))
|
||||||
AccelerometerContract.Event.Next.HISTORY ->
|
AccelerometerContract.Event.Next.HISTORY ->
|
||||||
onEvent(AccelerometerContract.Event.OnHistoryScaleChanged(it))
|
onEvent(AccelerometerContract.Event.OnHistoryScaleChanged(it))
|
||||||
|
|
@ -102,8 +99,6 @@ fun AccelScaleEdit(
|
||||||
when(next){
|
when(next){
|
||||||
AccelerometerContract.Event.Next.ACCEL ->
|
AccelerometerContract.Event.Next.ACCEL ->
|
||||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||||
AccelerometerContract.Event.Next.SPECTRE ->
|
|
||||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
|
||||||
AccelerometerContract.Event.Next.HISTORY ->
|
AccelerometerContract.Event.Next.HISTORY ->
|
||||||
onEvent(AccelerometerContract.Event.OnHistoryEdit)
|
onEvent(AccelerometerContract.Event.OnHistoryEdit)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,294 +0,0 @@
|
||||||
package llc.arma.ble.app.ui.screen.inspection.accelerometer.view
|
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.layout.*
|
|
||||||
import androidx.compose.foundation.rememberScrollState
|
|
||||||
import androidx.compose.foundation.shape.CircleShape
|
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
||||||
import androidx.compose.foundation.verticalScroll
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.rounded.KeyboardArrowDown
|
|
||||||
import androidx.compose.material3.Icon
|
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.RadioButton
|
|
||||||
import androidx.compose.material3.Surface
|
|
||||||
import androidx.compose.material3.Text
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.draw.clip
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import llc.arma.ble.app.ui.screen.inspection.accelerometer.AccelerometerContract
|
|
||||||
import llc.arma.ble.domain.usecase.AccelScale
|
|
||||||
import llc.arma.ble.domain.usecase.FftAxis
|
|
||||||
import llc.arma.ble.domain.usecase.FftFrequency
|
|
||||||
import llc.arma.ble.domain.usecase.FftViewMode
|
|
||||||
|
|
||||||
val FftFrequency.localized: String
|
|
||||||
get() {
|
|
||||||
return when(this){
|
|
||||||
FftFrequency.OFF -> "откл"
|
|
||||||
FftFrequency.F_1 -> "1 Гц"
|
|
||||||
FftFrequency.F_10 -> "10 Гц"
|
|
||||||
FftFrequency.F_25 -> "25 Гц"
|
|
||||||
FftFrequency.F_50 -> "50 Гц"
|
|
||||||
FftFrequency.F_100 -> "100 Гц"
|
|
||||||
FftFrequency.F_200 -> "200 Гц"
|
|
||||||
FftFrequency.F_400 -> "400 Гц"
|
|
||||||
FftFrequency.F_1620 -> "1620 Гц"
|
|
||||||
FftFrequency.F_1344 -> "1344 Гц"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val FftAxis.localized: String
|
|
||||||
get() {
|
|
||||||
return when(this){
|
|
||||||
FftAxis.AUTO -> "Авто"
|
|
||||||
FftAxis.X -> "Ось X"
|
|
||||||
FftAxis.Y -> "Ось Y"
|
|
||||||
FftAxis.Z -> "Ось Z"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val FftViewMode.localized: String
|
|
||||||
get() {
|
|
||||||
return when(this){
|
|
||||||
FftViewMode.SPECTRE -> "Спектр"
|
|
||||||
FftViewMode.X -> "Ось X"
|
|
||||||
FftViewMode.Y -> "Ось Y"
|
|
||||||
FftViewMode.Z -> "Ось Z"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val AccelScale.localized: String
|
|
||||||
get() {
|
|
||||||
return when(this){
|
|
||||||
AccelScale.S_2 -> "2g"
|
|
||||||
AccelScale.S_4 -> "4g"
|
|
||||||
AccelScale.S_8 -> "8g"
|
|
||||||
AccelScale.S_16 -> "16g"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun AccelSpectreEdit(
|
|
||||||
state: AccelerometerContract.State.Display,
|
|
||||||
onEvent: (AccelerometerContract.Event) -> Unit,
|
|
||||||
){
|
|
||||||
|
|
||||||
val accelMode = state.accelViewMode
|
|
||||||
val fftMode = state.fftViewMode
|
|
||||||
val fftAxis = state.fftAxis
|
|
||||||
val fftFrequency = state.fftFrequency
|
|
||||||
val accelScale = state.accelScale
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier
|
|
||||||
) {
|
|
||||||
|
|
||||||
Text(
|
|
||||||
modifier = Modifier.padding(horizontal = 12.dp),
|
|
||||||
text = "Спектр",
|
|
||||||
style = MaterialTheme.typography.titleLarge
|
|
||||||
)
|
|
||||||
|
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier
|
|
||||||
) {
|
|
||||||
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.padding(
|
|
||||||
vertical = 8.dp,
|
|
||||||
horizontal = 8.dp
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
modifier = Modifier
|
|
||||||
.clip(RoundedCornerShape(16.dp))
|
|
||||||
.clickable {
|
|
||||||
onEvent(AccelerometerContract.Event.OnFftModeEdit)
|
|
||||||
}
|
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.weight(1f)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = "Fft view mode"
|
|
||||||
)
|
|
||||||
Text(
|
|
||||||
color = MaterialTheme.colorScheme.secondary,
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
text = fftMode.localized
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
|
||||||
contentDescription = null
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.padding(
|
|
||||||
vertical = 8.dp,
|
|
||||||
horizontal = 8.dp
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
modifier = Modifier
|
|
||||||
.clip(RoundedCornerShape(16.dp))
|
|
||||||
.clickable { onEvent(AccelerometerContract.Event.OnFftAxisEdit) }
|
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.weight(1f)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = "Fft axis"
|
|
||||||
)
|
|
||||||
Text(
|
|
||||||
color = MaterialTheme.colorScheme.secondary,
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
text = fftAxis.localized
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
|
||||||
contentDescription = null
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.padding(
|
|
||||||
vertical = 8.dp,
|
|
||||||
horizontal = 8.dp
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
modifier = Modifier
|
|
||||||
.clip(RoundedCornerShape(16.dp))
|
|
||||||
.clickable {
|
|
||||||
onEvent(AccelerometerContract.Event.OnFftFrequencyEdit)
|
|
||||||
}
|
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.weight(1f)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = "Fft frequency"
|
|
||||||
)
|
|
||||||
Text(
|
|
||||||
color = MaterialTheme.colorScheme.secondary,
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
text = fftFrequency.localized
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
|
||||||
contentDescription = null
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Box(
|
|
||||||
modifier = Modifier.padding(
|
|
||||||
vertical = 8.dp,
|
|
||||||
horizontal = 8.dp
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Row(
|
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
|
||||||
modifier = Modifier
|
|
||||||
.clip(RoundedCornerShape(16.dp))
|
|
||||||
.clickable {
|
|
||||||
onEvent(AccelerometerContract.Event.OnAccelScaleEdit(next = AccelerometerContract.Event.Next.SPECTRE))
|
|
||||||
}
|
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.weight(1f)
|
|
||||||
) {
|
|
||||||
|
|
||||||
Text(
|
|
||||||
text = "Accel scale"
|
|
||||||
)
|
|
||||||
Text(
|
|
||||||
color = MaterialTheme.colorScheme.secondary,
|
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
|
||||||
text = accelScale.localized
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Rounded.KeyboardArrowDown,
|
|
||||||
contentDescription = null
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
|
||||||
|
|
||||||
Surface(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxWidth()
|
|
||||||
.padding(8.dp)
|
|
||||||
.height(50.dp),
|
|
||||||
shape = CircleShape,
|
|
||||||
color = MaterialTheme.colorScheme.primaryContainer,
|
|
||||||
onClick = {
|
|
||||||
onEvent(AccelerometerContract.Event.OnShowAccelerometerSpectre)
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
|
|
||||||
Box(modifier = Modifier.fillMaxSize()) {
|
|
||||||
|
|
||||||
Text(
|
|
||||||
modifier = Modifier.align(Alignment.Center),
|
|
||||||
color = MaterialTheme.colorScheme.background,
|
|
||||||
style = MaterialTheme.typography.labelLarge,
|
|
||||||
text = "Продолжить"
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -93,10 +93,6 @@ fun AccelViewEdit(
|
||||||
onEvent(AccelerometerContract.Event.OnAccelViewModelChanged(value))
|
onEvent(AccelerometerContract.Event.OnAccelViewModelChanged(value))
|
||||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||||
}
|
}
|
||||||
AccelerometerContract.Event.Next.SPECTRE -> {
|
|
||||||
onEvent(AccelerometerContract.Event.OnAccelViewModelChanged(value))
|
|
||||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
|
||||||
}
|
|
||||||
|
|
||||||
AccelerometerContract.Event.Next.HISTORY -> {
|
AccelerometerContract.Event.Next.HISTORY -> {
|
||||||
onEvent(AccelerometerContract.Event.OnHistoryViewModeChanged(value))
|
onEvent(AccelerometerContract.Event.OnHistoryViewModeChanged(value))
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import llc.arma.ble.app.ui.common.ViewState
|
||||||
import llc.arma.ble.domain.model.BleInfo
|
import llc.arma.ble.domain.model.BleInfo
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.rounded.ArrowBack
|
||||||
import androidx.compose.material.icons.rounded.Refresh
|
import androidx.compose.material.icons.rounded.Refresh
|
||||||
import androidx.compose.ui.graphics.StrokeCap
|
import androidx.compose.ui.graphics.StrokeCap
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
|
@ -66,7 +67,8 @@ fun AccelerometerSpectre(
|
||||||
fftAxis: FftAxis,
|
fftAxis: FftAxis,
|
||||||
fftMode: FftViewMode,
|
fftMode: FftViewMode,
|
||||||
frequency: FftFrequency,
|
frequency: FftFrequency,
|
||||||
accelScale: AccelScale
|
accelScale: AccelScale,
|
||||||
|
onDismiss: (() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val viewModel = hiltViewModel<AccelerometerSpectreViewModel>()
|
val viewModel = hiltViewModel<AccelerometerSpectreViewModel>()
|
||||||
|
|
@ -93,6 +95,17 @@ fun AccelerometerSpectre(
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
onDismiss?.let {
|
||||||
|
|
||||||
|
IconButton(onClick = it) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Rounded.ArrowBack,
|
||||||
|
contentDescription = null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
val title = when(state){
|
val title = when(state){
|
||||||
is AccelerometerSpectreContract.State.Display -> {
|
is AccelerometerSpectreContract.State.Display -> {
|
||||||
if (state.previousHistory !== null) {
|
if (state.previousHistory !== null) {
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import llc.arma.ble.app.ui.common.ViewState
|
||||||
import llc.arma.ble.domain.model.BleInfo
|
import llc.arma.ble.domain.model.BleInfo
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.rounded.ArrowBack
|
||||||
import androidx.compose.material.icons.rounded.Refresh
|
import androidx.compose.material.icons.rounded.Refresh
|
||||||
import androidx.compose.ui.draw.rotate
|
import androidx.compose.ui.draw.rotate
|
||||||
import androidx.compose.ui.graphics.StrokeCap
|
import androidx.compose.ui.graphics.StrokeCap
|
||||||
|
|
@ -57,7 +58,8 @@ fun AccelerometerRealtime(
|
||||||
accelMode: AccelViewMode,
|
accelMode: AccelViewMode,
|
||||||
fftAxis: FftAxis,
|
fftAxis: FftAxis,
|
||||||
fftMode: FftViewMode,
|
fftMode: FftViewMode,
|
||||||
frequency: FftFrequency
|
frequency: FftFrequency,
|
||||||
|
onDismiss: (() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val viewModel = hiltViewModel<AccelerometerAccelViewModel>()
|
val viewModel = hiltViewModel<AccelerometerAccelViewModel>()
|
||||||
|
|
@ -82,6 +84,17 @@ fun AccelerometerRealtime(
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
onDismiss?.let {
|
||||||
|
|
||||||
|
IconButton(onClick = it) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Rounded.ArrowBack,
|
||||||
|
contentDescription = null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
text = accelMode.localized,
|
text = accelMode.localized,
|
||||||
|
|
@ -275,15 +288,12 @@ fun Display(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
|
||||||
Text(text = "Ось Y: ${lastMeasure.tmp}")
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
) {
|
) {
|
||||||
|
|
||||||
Text(text = "Ось X: ${lastMeasure.angle}")
|
Text(text = "Положение: ${lastMeasure.angle}")
|
||||||
|
|
||||||
Spacer(modifier = Modifier.height(8.dp))
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
|
@ -294,7 +304,26 @@ fun Display(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Text(text = "Ось Z:")
|
Text(text = "Скорость:")
|
||||||
|
Chart(
|
||||||
|
marker = marker,
|
||||||
|
chart = lineChart,
|
||||||
|
chartModelProducer = yProducer,
|
||||||
|
startAxis = startAxis(),
|
||||||
|
bottomAxis = bottomAxis(),
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.weight(1f),
|
||||||
|
autoScaleUp = AutoScaleUp.None,
|
||||||
|
diffAnimationSpec = tween(0),
|
||||||
|
chartScrollSpec = rememberChartScrollSpec(
|
||||||
|
initialScroll = InitialScroll.End,
|
||||||
|
autoScrollCondition = AutoScrollCondition.OnModelSizeIncreased,
|
||||||
|
autoScrollAnimationSpec = tween(0)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
Text(text = "Обороты:")
|
||||||
Chart(
|
Chart(
|
||||||
marker = marker,
|
marker = marker,
|
||||||
chart = lineChart,
|
chart = lineChart,
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import llc.arma.ble.app.ui.common.ViewState
|
||||||
import llc.arma.ble.domain.model.BleInfo
|
import llc.arma.ble.domain.model.BleInfo
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.rounded.ArrowBack
|
||||||
import androidx.compose.material.icons.rounded.CloudUpload
|
import androidx.compose.material.icons.rounded.CloudUpload
|
||||||
import androidx.compose.material.icons.rounded.Refresh
|
import androidx.compose.material.icons.rounded.Refresh
|
||||||
import androidx.compose.ui.graphics.StrokeCap
|
import androidx.compose.ui.graphics.StrokeCap
|
||||||
|
|
@ -56,7 +57,9 @@ import llc.arma.ble.domain.usecase.FftFrequency
|
||||||
import llc.arma.ble.domain.usecase.FftViewMode
|
import llc.arma.ble.domain.usecase.FftViewMode
|
||||||
import llc.arma.ble.domain.usecase.GetAccelerometerHistoryBySerial
|
import llc.arma.ble.domain.usecase.GetAccelerometerHistoryBySerial
|
||||||
import llc.arma.ble.domain.usecase.GetBleBySerial
|
import llc.arma.ble.domain.usecase.GetBleBySerial
|
||||||
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
|
import java.util.Locale
|
||||||
|
|
||||||
class AccelEntry(
|
class AccelEntry(
|
||||||
val localDate: Long,
|
val localDate: Long,
|
||||||
|
|
@ -75,7 +78,8 @@ fun AccelerometerHistory(
|
||||||
accelMode: AccelViewMode,
|
accelMode: AccelViewMode,
|
||||||
fftAxis: FftAxis,
|
fftAxis: FftAxis,
|
||||||
fftMode: FftViewMode,
|
fftMode: FftViewMode,
|
||||||
frequency: FftFrequency
|
frequency: FftFrequency,
|
||||||
|
onDismiss: (() -> Unit)? = null
|
||||||
) {
|
) {
|
||||||
|
|
||||||
val viewModel = hiltViewModel<AccelerometerHistoryViewModel>()
|
val viewModel = hiltViewModel<AccelerometerHistoryViewModel>()
|
||||||
|
|
@ -100,6 +104,17 @@ fun AccelerometerHistory(
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
onDismiss?.let {
|
||||||
|
|
||||||
|
IconButton(onClick = it) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Rounded.ArrowBack,
|
||||||
|
contentDescription = null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
val title = when(state){
|
val title = when(state){
|
||||||
is AccelerometerHistoryContract.State.Display -> {
|
is AccelerometerHistoryContract.State.Display -> {
|
||||||
when (state.loadingHistoryState) {
|
when (state.loadingHistoryState) {
|
||||||
|
|
@ -164,6 +179,10 @@ fun AccelerometerHistory(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val dayFormatter = SimpleDateFormat("dd", Locale.getDefault())
|
||||||
|
val dateFormatter = SimpleDateFormat("dd.MM", Locale.getDefault())
|
||||||
|
val timeFormatter = SimpleDateFormat("HH:mm", Locale.getDefault())
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Display(
|
fun Display(
|
||||||
|
|
@ -190,11 +209,33 @@ fun Display(
|
||||||
|
|
||||||
val axisValueFormatter =
|
val axisValueFormatter =
|
||||||
AxisValueFormatter<AxisPosition.Horizontal.Bottom> { value, chartValues ->
|
AxisValueFormatter<AxisPosition.Horizontal.Bottom> { value, chartValues ->
|
||||||
(chartValues.chartEntryModel.entries.firstOrNull()
|
val first = (chartValues.chartEntryModel.entries.firstOrNull()?.firstOrNull() as? AccelEntry)
|
||||||
|
val last = (chartValues.chartEntryModel.entries.firstOrNull()?.lastOrNull() as? AccelEntry)
|
||||||
|
val previous = (chartValues.chartEntryModel.entries.firstOrNull()?.getOrNull(value.toInt() - 1) as? AccelEntry)
|
||||||
|
val current = (chartValues.chartEntryModel.entries.firstOrNull()?.getOrNull(value.toInt()) as? AccelEntry)
|
||||||
|
|
||||||
|
if(current != null) {
|
||||||
|
if (first == current || last == current) {
|
||||||
|
dateFormatter.format(Date(current.localDate))
|
||||||
|
} else {
|
||||||
|
if(previous != null && dayFormatter.format(previous.localDate) != dayFormatter.format(current.localDate)){
|
||||||
|
dateFormatter.format(Date(current.localDate))
|
||||||
|
}else{
|
||||||
|
timeFormatter.format(Date(current.localDate))
|
||||||
|
}
|
||||||
|
}.orEmpty()
|
||||||
|
} else {
|
||||||
|
" "
|
||||||
|
}
|
||||||
|
|
||||||
|
/*(chartValues.chartEntryModel.entries.firstOrNull()
|
||||||
?.getOrNull(value.toInt()) as? AccelEntry)
|
?.getOrNull(value.toInt()) as? AccelEntry)
|
||||||
?.localDate
|
?.localDate
|
||||||
?.let { formatter.format(Date(it)) }
|
?.let {
|
||||||
.orEmpty()
|
if(first)
|
||||||
|
formatter.format(Date(it))
|
||||||
|
}
|
||||||
|
.orEmpty()*/
|
||||||
}
|
}
|
||||||
|
|
||||||
val xProducer = remember {
|
val xProducer = remember {
|
||||||
|
|
@ -288,7 +329,6 @@ fun Display(
|
||||||
Column {
|
Column {
|
||||||
|
|
||||||
Text(text = "Ось X:")
|
Text(text = "Ось X:")
|
||||||
|
|
||||||
Chart(
|
Chart(
|
||||||
marker = marker,
|
marker = marker,
|
||||||
chart = lineChart,
|
chart = lineChart,
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,9 @@ class TemperatureEntry(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val formatter = SimpleDateFormat("dd.MM.yy HH:mm", Locale.getDefault())
|
|
||||||
|
|
||||||
|
val formatter = SimpleDateFormat("dd.MM HH:mm", Locale.getDefault())
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TemperatureHistory(
|
fun TemperatureHistory(
|
||||||
|
|
|
||||||
|
|
@ -361,7 +361,7 @@ class BleRepositoryImpl @Inject constructor(
|
||||||
val interval = characteristic.read().value.let {
|
val interval = characteristic.read().value.let {
|
||||||
if(it.size == 4){
|
if(it.size == 4){
|
||||||
it.get4byteUIntAt(0).toLong()
|
it.get4byteUIntAt(0).toLong()
|
||||||
}else{
|
} else {
|
||||||
0
|
0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
package llc.arma.ble.domain.model
|
package llc.arma.ble.domain.model
|
||||||
|
|
||||||
|
import android.os.Parcelable
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
|
@Parcelize
|
||||||
data class BleInfo(
|
data class BleInfo(
|
||||||
val name: String,
|
val name: String,
|
||||||
val serial: String,
|
val serial: String,
|
||||||
|
|
@ -9,7 +13,7 @@ data class BleInfo(
|
||||||
val scanTime: Long,
|
val scanTime: Long,
|
||||||
val tx: Int,
|
val tx: Int,
|
||||||
val recordEnabled: Boolean
|
val recordEnabled: Boolean
|
||||||
){
|
) : Parcelable {
|
||||||
|
|
||||||
enum class Type {
|
enum class Type {
|
||||||
BEACON, THERMOMETER, ACCELEROMETER
|
BEACON, THERMOMETER, ACCELEROMETER
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue