kotlin ble migration
This commit is contained in:
parent
57c1d331d6
commit
55b6807081
|
|
@ -3,6 +3,7 @@ plugins {
|
|||
id 'org.jetbrains.kotlin.android'
|
||||
id 'kotlin-kapt'
|
||||
id 'dagger.hilt.android.plugin'
|
||||
id("kotlin-parcelize")
|
||||
}
|
||||
|
||||
android {
|
||||
|
|
@ -13,8 +14,8 @@ android {
|
|||
applicationId "llc.arma.ble"
|
||||
minSdk 26
|
||||
targetSdk 34
|
||||
versionCode 25
|
||||
versionName "1.3.5"
|
||||
versionCode 27
|
||||
versionName "1.3.7"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
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
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import llc.arma.ble.app.ui.common.ViewEvent
|
||||
import llc.arma.ble.app.ui.common.ViewSideEffect
|
||||
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.domain.common.BleException
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
|
|
@ -10,6 +11,11 @@ import androidx.compose.material.icons.rounded.ArrowBack
|
|||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.Composable
|
||||
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.Modifier
|
||||
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.inspection.accelerometer.AccelerometerContract
|
||||
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.password.ChangePasswordContract
|
||||
import llc.arma.ble.app.ui.screen.inspection.thermometer.ThermometerContract
|
||||
|
|
@ -38,21 +47,38 @@ fun ConnectionScreen(
|
|||
val viewModel = hiltViewModel<ConnectionViewModel>()
|
||||
val state = viewModel.viewState.value
|
||||
|
||||
var innerScreen by rememberSaveable {
|
||||
mutableStateOf<ConnectionContract.Effect.InnerNavigation?>(null)
|
||||
}
|
||||
|
||||
BackHandler(innerScreen != null) {
|
||||
innerScreen = null
|
||||
}
|
||||
|
||||
LaunchedEffect("effect"){
|
||||
viewModel.effect.onEach {
|
||||
when(it){
|
||||
is ConnectionContract.Effect.Navigation -> onNavigationEvent(it)
|
||||
is ConnectionContract.Effect.InnerNavigation -> {
|
||||
innerScreen = it
|
||||
}
|
||||
}
|
||||
}.launchIn(this)
|
||||
}
|
||||
|
||||
Box {
|
||||
|
||||
Column {
|
||||
|
||||
CenterAlignedTopAppBar(
|
||||
navigationIcon = {
|
||||
IconButton(
|
||||
onClick = {
|
||||
if(innerScreen != null) {
|
||||
innerScreen = null
|
||||
} else {
|
||||
viewModel.setEvent(ConnectionContract.Event.OnNavigateUp)
|
||||
}
|
||||
},
|
||||
content = {
|
||||
Icon(
|
||||
|
|
@ -65,7 +91,7 @@ fun ConnectionScreen(
|
|||
title = {
|
||||
|
||||
AnimatedContent(
|
||||
targetState = when(state){
|
||||
targetState = when (state) {
|
||||
is ConnectionContract.State.Display -> state.ble.info.name
|
||||
is ConnectionContract.State.DisplayException -> "Исключение"
|
||||
is ConnectionContract.State.Loading -> "Соединение.."
|
||||
|
|
@ -91,15 +117,21 @@ fun ConnectionScreen(
|
|||
viewModel.setEvent(it)
|
||||
}
|
||||
)
|
||||
|
||||
is ConnectionContract.State.Loading -> LoadingState()
|
||||
is ConnectionContract.State.Display -> {
|
||||
when(state.ble){
|
||||
when (state.ble) {
|
||||
is Ble.Beacon -> BeaconScreen(
|
||||
ble = state.ble,
|
||||
onNavigationEvent = {
|
||||
viewModel.setEvent(ConnectionContract.Event.OnBeaconNavigationEvent(it))
|
||||
viewModel.setEvent(
|
||||
ConnectionContract.Event.OnBeaconNavigationEvent(
|
||||
it
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
is Ble.Thermometer -> {
|
||||
|
||||
Column(modifier = Modifier.weight(1f)) {
|
||||
|
|
@ -131,6 +163,66 @@ fun ConnectionScreen(
|
|||
|
||||
}
|
||||
|
||||
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")!!)
|
||||
}
|
||||
}
|
||||
|
||||
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.screen.inspection.accelerometer.view.RealtimeViewMode
|
||||
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
|
||||
|
|
@ -19,7 +20,6 @@ class AccelerometerContract {
|
|||
object OnShowAccelerometerAccel : Event()
|
||||
object OnHideAccelerometerAccel : Event()
|
||||
|
||||
object OnShowAccelerometerSpectre : Event()
|
||||
object OnHideAccelerometerSpectre : Event()
|
||||
|
||||
object OnShowAccelerometerHistory : Event()
|
||||
|
|
@ -32,7 +32,7 @@ class AccelerometerContract {
|
|||
) : Event()
|
||||
|
||||
enum class Next {
|
||||
ACCEL, SPECTRE, HISTORY
|
||||
ACCEL, HISTORY
|
||||
}
|
||||
|
||||
data class OnAccelScaleEdit(
|
||||
|
|
@ -40,7 +40,7 @@ class AccelerometerContract {
|
|||
) : Event()
|
||||
|
||||
object OnAccelEdit : Event()
|
||||
object OnSpectreEdit : Event()
|
||||
|
||||
object OnHistoryEdit : Event()
|
||||
object OnFftFrequencyEdit : Event()
|
||||
|
||||
|
|
@ -149,10 +149,6 @@ class AccelerometerContract {
|
|||
|
||||
object ShowRealtimeViewModeEdit : Effect()
|
||||
|
||||
object ShowAccelerometerAccel : Effect()
|
||||
object ShowAccelerometerSpectre : Effect()
|
||||
object ShowAccelerometerHistory : Effect()
|
||||
|
||||
object ShowPowerPicker : Effect()
|
||||
object HidePowerPicker : Effect()
|
||||
|
||||
|
|
@ -170,7 +166,8 @@ class AccelerometerContract {
|
|||
) : Effect()
|
||||
|
||||
object ShowAccelEdit : Effect()
|
||||
object ShowSpectreEdit : Effect()
|
||||
object HideAccelEdit : Effect()
|
||||
|
||||
object ShowFftFrequencyEdit : Effect()
|
||||
object ShowFftAxisEdit : Effect()
|
||||
object ShowFftModeEdit : Effect()
|
||||
|
|
@ -185,6 +182,33 @@ class AccelerometerContract {
|
|||
|
||||
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.AccelRealtimeViewEdit
|
||||
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.AccelerometerSpectre
|
||||
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
|
||||
|
||||
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)
|
||||
|
|
@ -75,75 +74,6 @@ fun AccelerometerScreen(
|
|||
|
||||
LaunchedEffect(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 {
|
||||
|
||||
val currentState = viewModel.viewState.value
|
||||
|
|
@ -198,7 +128,7 @@ fun AccelerometerScreen(
|
|||
|
||||
if(currentState is AccelerometerContract.State.Display) {
|
||||
AccelViewEdit(
|
||||
next = AccelerometerContract.Event.Next.SPECTRE,
|
||||
next = AccelerometerContract.Event.Next.ACCEL,
|
||||
state = currentState,
|
||||
onEvent = {
|
||||
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 {
|
||||
|
||||
|
|
@ -313,7 +229,7 @@ fun AccelerometerScreen(
|
|||
|
||||
if(currentState is AccelerometerContract.State.Display) {
|
||||
AccelScaleEdit(
|
||||
next = AccelerometerContract.Event.Next.SPECTRE,
|
||||
next = AccelerometerContract.Event.Next.ACCEL,
|
||||
state = currentState,
|
||||
onEvent = {
|
||||
viewModel.setEvent(it)
|
||||
|
|
@ -397,11 +313,6 @@ fun AccelerometerScreen(
|
|||
LaunchedEffect("effect"){
|
||||
viewModel.effect.onEach {
|
||||
when(it){
|
||||
is AccelerometerContract.Effect.ShowAccelerometerAccel -> launch {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
sheetPage = SheetPage.ACCEL
|
||||
}
|
||||
is AccelerometerContract.Effect.HidePowerPicker -> launch {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
|
|
@ -420,25 +331,14 @@ fun AccelerometerScreen(
|
|||
delay(100)
|
||||
sheetPage = SheetPage.WRITE
|
||||
}
|
||||
is AccelerometerContract.Effect.ShowAccelerometerSpectre -> launch {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
sheetPage = SheetPage.SPECTRE
|
||||
}
|
||||
is AccelerometerContract.Effect.ShowAccelViewEdit -> launch {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
sheetPage = when(it.next){
|
||||
AccelerometerContract.Event.Next.ACCEL -> SheetPage.ACCEL_MODE_EDIT
|
||||
AccelerometerContract.Event.Next.SPECTRE -> SheetPage.SPECTRE_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 {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
|
|
@ -454,11 +354,6 @@ fun AccelerometerScreen(
|
|||
delay(100)
|
||||
sheetPage = SheetPage.FFT_MODE_EDIT
|
||||
}
|
||||
is AccelerometerContract.Effect.ShowAccelerometerHistory -> launch {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
sheetPage = SheetPage.HISTORY
|
||||
}
|
||||
is AccelerometerContract.Effect.HideIntervalPicker -> {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
|
|
@ -473,7 +368,6 @@ fun AccelerometerScreen(
|
|||
delay(100)
|
||||
sheetPage = when(it.next){
|
||||
AccelerometerContract.Event.Next.ACCEL -> SheetPage.ACCEL_SCALE
|
||||
AccelerometerContract.Event.Next.SPECTRE -> SheetPage.SPECTRE_SCALE
|
||||
AccelerometerContract.Event.Next.HISTORY -> SheetPage.HISTORY_SCALE
|
||||
}
|
||||
}
|
||||
|
|
@ -500,6 +394,11 @@ fun AccelerometerScreen(
|
|||
delay(100)
|
||||
sheetPage = SheetPage.ACCEL_REALTIME_EDIT
|
||||
}
|
||||
|
||||
AccelerometerContract.Effect.HideAccelEdit -> {
|
||||
sheetPage = null
|
||||
delay(100)
|
||||
}
|
||||
}
|
||||
}.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.BleViewMapper
|
||||
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.domain.model.Ble
|
||||
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.OnWriteBle -> 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.OnAccelViewModelChanged -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnSpectreEdit -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnFftFrequencyEdit -> reduce(viewState.value, event)
|
||||
is AccelerometerContract.Event.OnFftAxisChanged -> 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(
|
||||
state: AccelerometerContract.State,
|
||||
event: AccelerometerContract.Event.OnHideAccelerometerSpectre
|
||||
|
|
@ -383,8 +362,26 @@ class AccelerometerViewModel @Inject constructor(
|
|||
event: AccelerometerContract.Event.OnShowAccelerometerHistory
|
||||
) {
|
||||
|
||||
setEffect {
|
||||
/*setEffect {
|
||||
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){
|
||||
|
||||
setEffect {
|
||||
/*setEffect {
|
||||
|
||||
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.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 AccelEdit(
|
||||
|
|
|
|||
|
|
@ -25,8 +25,7 @@ fun AccelScaleEdit(
|
|||
){
|
||||
|
||||
var fftMode = when(next){
|
||||
AccelerometerContract.Event.Next.ACCEL,
|
||||
AccelerometerContract.Event.Next.SPECTRE ->
|
||||
AccelerometerContract.Event.Next.ACCEL ->
|
||||
state.accelScale
|
||||
AccelerometerContract.Event.Next.HISTORY -> {
|
||||
val history = state.accelerometer.accelerometerState.saveHistory
|
||||
|
|
@ -59,8 +58,7 @@ fun AccelScaleEdit(
|
|||
.clip(RoundedCornerShape(8.dp))
|
||||
.clickable {
|
||||
when(next){
|
||||
AccelerometerContract.Event.Next.ACCEL,
|
||||
AccelerometerContract.Event.Next.SPECTRE ->
|
||||
AccelerometerContract.Event.Next.ACCEL ->
|
||||
onEvent(AccelerometerContract.Event.OnAccelScaleChanged(it))
|
||||
AccelerometerContract.Event.Next.HISTORY ->
|
||||
onEvent(AccelerometerContract.Event.OnHistoryScaleChanged(it))
|
||||
|
|
@ -73,8 +71,7 @@ fun AccelScaleEdit(
|
|||
selected = it == fftMode,
|
||||
onClick = {
|
||||
when(next){
|
||||
AccelerometerContract.Event.Next.ACCEL,
|
||||
AccelerometerContract.Event.Next.SPECTRE ->
|
||||
AccelerometerContract.Event.Next.ACCEL ->
|
||||
onEvent(AccelerometerContract.Event.OnAccelScaleChanged(it))
|
||||
AccelerometerContract.Event.Next.HISTORY ->
|
||||
onEvent(AccelerometerContract.Event.OnHistoryScaleChanged(it))
|
||||
|
|
@ -102,8 +99,6 @@ fun AccelScaleEdit(
|
|||
when(next){
|
||||
AccelerometerContract.Event.Next.ACCEL ->
|
||||
onEvent(AccelerometerContract.Event.OnAccelEdit)
|
||||
AccelerometerContract.Event.Next.SPECTRE ->
|
||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
||||
AccelerometerContract.Event.Next.HISTORY ->
|
||||
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.OnAccelEdit)
|
||||
}
|
||||
AccelerometerContract.Event.Next.SPECTRE -> {
|
||||
onEvent(AccelerometerContract.Event.OnAccelViewModelChanged(value))
|
||||
onEvent(AccelerometerContract.Event.OnSpectreEdit)
|
||||
}
|
||||
|
||||
AccelerometerContract.Event.Next.HISTORY -> {
|
||||
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 javax.inject.Inject
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.Refresh
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
|
|
@ -66,7 +67,8 @@ fun AccelerometerSpectre(
|
|||
fftAxis: FftAxis,
|
||||
fftMode: FftViewMode,
|
||||
frequency: FftFrequency,
|
||||
accelScale: AccelScale
|
||||
accelScale: AccelScale,
|
||||
onDismiss: (() -> Unit)? = null
|
||||
) {
|
||||
|
||||
val viewModel = hiltViewModel<AccelerometerSpectreViewModel>()
|
||||
|
|
@ -93,6 +95,17 @@ fun AccelerometerSpectre(
|
|||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
|
||||
onDismiss?.let {
|
||||
|
||||
IconButton(onClick = it) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.ArrowBack,
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
val title = when(state){
|
||||
is AccelerometerSpectreContract.State.Display -> {
|
||||
if (state.previousHistory !== null) {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import llc.arma.ble.app.ui.common.ViewState
|
|||
import llc.arma.ble.domain.model.BleInfo
|
||||
import javax.inject.Inject
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.ArrowBack
|
||||
import androidx.compose.material.icons.rounded.Refresh
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
|
|
@ -57,7 +58,8 @@ fun AccelerometerRealtime(
|
|||
accelMode: AccelViewMode,
|
||||
fftAxis: FftAxis,
|
||||
fftMode: FftViewMode,
|
||||
frequency: FftFrequency
|
||||
frequency: FftFrequency,
|
||||
onDismiss: (() -> Unit)? = null
|
||||
) {
|
||||
|
||||
val viewModel = hiltViewModel<AccelerometerAccelViewModel>()
|
||||
|
|
@ -82,6 +84,17 @@ fun AccelerometerRealtime(
|
|||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
|
||||
onDismiss?.let {
|
||||
|
||||
IconButton(onClick = it) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.ArrowBack,
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = accelMode.localized,
|
||||
|
|
@ -275,15 +288,12 @@ fun Display(
|
|||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
|
||||
|
||||
Text(text = "Ось Y: ${lastMeasure.tmp}")
|
||||
|
||||
Column(
|
||||
modifier = Modifier.weight(1f),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
|
||||
Text(text = "Ось X: ${lastMeasure.angle}")
|
||||
Text(text = "Положение: ${lastMeasure.angle}")
|
||||
|
||||
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(
|
||||
marker = marker,
|
||||
chart = lineChart,
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import llc.arma.ble.app.ui.common.ViewState
|
|||
import llc.arma.ble.domain.model.BleInfo
|
||||
import javax.inject.Inject
|
||||
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.Refresh
|
||||
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.GetAccelerometerHistoryBySerial
|
||||
import llc.arma.ble.domain.usecase.GetBleBySerial
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
|
||||
class AccelEntry(
|
||||
val localDate: Long,
|
||||
|
|
@ -75,7 +78,8 @@ fun AccelerometerHistory(
|
|||
accelMode: AccelViewMode,
|
||||
fftAxis: FftAxis,
|
||||
fftMode: FftViewMode,
|
||||
frequency: FftFrequency
|
||||
frequency: FftFrequency,
|
||||
onDismiss: (() -> Unit)? = null
|
||||
) {
|
||||
|
||||
val viewModel = hiltViewModel<AccelerometerHistoryViewModel>()
|
||||
|
|
@ -100,6 +104,17 @@ fun AccelerometerHistory(
|
|||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
|
||||
onDismiss?.let {
|
||||
|
||||
IconButton(onClick = it) {
|
||||
Icon(
|
||||
imageVector = Icons.Rounded.ArrowBack,
|
||||
contentDescription = null
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
val title = when(state){
|
||||
is AccelerometerHistoryContract.State.Display -> {
|
||||
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
|
||||
fun Display(
|
||||
|
|
@ -190,11 +209,33 @@ fun Display(
|
|||
|
||||
val axisValueFormatter =
|
||||
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)
|
||||
?.localDate
|
||||
?.let { formatter.format(Date(it)) }
|
||||
.orEmpty()
|
||||
?.let {
|
||||
if(first)
|
||||
formatter.format(Date(it))
|
||||
}
|
||||
.orEmpty()*/
|
||||
}
|
||||
|
||||
val xProducer = remember {
|
||||
|
|
@ -288,7 +329,6 @@ fun Display(
|
|||
Column {
|
||||
|
||||
Text(text = "Ось X:")
|
||||
|
||||
Chart(
|
||||
marker = marker,
|
||||
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
|
||||
fun TemperatureHistory(
|
||||
|
|
|
|||
|
|
@ -361,7 +361,7 @@ class BleRepositoryImpl @Inject constructor(
|
|||
val interval = characteristic.read().value.let {
|
||||
if(it.size == 4){
|
||||
it.get4byteUIntAt(0).toLong()
|
||||
}else{
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
package llc.arma.ble.domain.model
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
@Parcelize
|
||||
data class BleInfo(
|
||||
val name: String,
|
||||
val serial: String,
|
||||
|
|
@ -9,7 +13,7 @@ data class BleInfo(
|
|||
val scanTime: Long,
|
||||
val tx: Int,
|
||||
val recordEnabled: Boolean
|
||||
){
|
||||
) : Parcelable {
|
||||
|
||||
enum class Type {
|
||||
BEACON, THERMOMETER, ACCELEROMETER
|
||||
|
|
|
|||
Loading…
Reference in New Issue