diff --git a/app/build.gradle b/app/build.gradle index ac39721..63bd607 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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 { diff --git a/app/release/Arma BLE v1.3.1.apk b/app/release/Arma BLE v1.3.1.apk deleted file mode 100644 index 4e5bc22..0000000 Binary files a/app/release/Arma BLE v1.3.1.apk and /dev/null differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json deleted file mode 100644 index a0650fa..0000000 --- a/app/release/output-metadata.json +++ /dev/null @@ -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" -} \ No newline at end of file diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionContract.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionContract.kt index 0d066ba..3592198 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionContract.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionContract.kt @@ -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 + + } + } } \ No newline at end of file diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionScreen.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionScreen.kt index e17bf59..ef1abca 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionScreen.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionScreen.kt @@ -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,95 +47,178 @@ fun ConnectionScreen( val viewModel = hiltViewModel() val state = viewModel.viewState.value + var innerScreen by rememberSaveable { + mutableStateOf(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) } - Column { + Box { - CenterAlignedTopAppBar( - navigationIcon = { - IconButton( - onClick = { - viewModel.setEvent(ConnectionContract.Event.OnNavigateUp) - }, - content = { - Icon( - imageVector = Icons.Rounded.ArrowBack, - contentDescription = null - ) - } - ) - }, - title = { + Column { - 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 + CenterAlignedTopAppBar( + navigationIcon = { + IconButton( + onClick = { + if(innerScreen != null) { + innerScreen = null + } else { + viewModel.setEvent(ConnectionContract.Event.OnNavigateUp) + } + }, + content = { + Icon( + imageVector = Icons.Rounded.ArrowBack, + contentDescription = null + ) + } ) - } + }, + 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( - ble = state.ble, - onNavigationEvent = { - viewModel.setEvent( - ConnectionContract.Event.OnThermometerNavigationEvent(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)) { + + ThermometerScreen( + ble = state.ble, + onNavigationEvent = { + viewModel.setEvent( + ConnectionContract.Event.OnThermometerNavigationEvent(it) + ) + } + ) + + } } - } - - is Ble.Accelerometer -> { - AccelerometerScreen(ble = state.ble) { - viewModel.setEvent( - ConnectionContract.Event.OnAccelNavigationEvent(it) - ) + is Ble.Accelerometer -> { + AccelerometerScreen(ble = state.ble) { + 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 + } + ) + } + } } + } } diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionViewModel.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionViewModel.kt index 00f76b3..0f26681 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionViewModel.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/connection/ConnectionViewModel.kt @@ -86,6 +86,44 @@ class ConnectionViewModel @Inject constructor( ConnectionContract.Effect.Navigation.NavigateToChangePassword(savedStateHandle.get("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 + ) + } + } } } diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerContract.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerContract.kt index c4491b8..2ff2a66 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerContract.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerContract.kt @@ -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() + } } diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerScreen.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerScreen.kt index 4185a9e..27a3c42 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerScreen.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerScreen.kt @@ -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) } diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerViewModel.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerViewModel.kt index cf42b30..02f412e 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerViewModel.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/AccelerometerViewModel.kt @@ -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 + ) + + } + } + } } diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelEdit.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelEdit.kt index 2cf8f48..00f1e04 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelEdit.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelEdit.kt @@ -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( diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelScaleEdit.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelScaleEdit.kt index 8bcd84b..80a23cd 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelScaleEdit.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelScaleEdit.kt @@ -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) } diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelSpectreEdit.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelSpectreEdit.kt deleted file mode 100644 index a56b76e..0000000 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelSpectreEdit.kt +++ /dev/null @@ -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 = "Продолжить" - ) - - } - - } - - } - -} \ No newline at end of file diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelViewEdit.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelViewEdit.kt index e763384..f66193d 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelViewEdit.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelViewEdit.kt @@ -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)) diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelerometerSpectre.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelerometerSpectre.kt index 3f9d56f..4cb1e2e 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelerometerSpectre.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AccelerometerSpectre.kt @@ -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() @@ -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) { diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterAccel.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterAccel.kt index 6c84ef3..7a755c5 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterAccel.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterAccel.kt @@ -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() @@ -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, diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterHistory.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterHistory.kt index f0ff989..294f468 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterHistory.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/accelerometer/view/AcceleromterHistory.kt @@ -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() @@ -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) { @@ -163,6 +178,10 @@ fun AccelerometerHistory( } } + +val dayFormatter = SimpleDateFormat("dd", Locale.getDefault()) +val dateFormatter = SimpleDateFormat("dd.MM", Locale.getDefault()) +val timeFormatter = SimpleDateFormat("HH:mm", Locale.getDefault()) @Composable @@ -190,11 +209,33 @@ fun Display( val axisValueFormatter = AxisValueFormatter { 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, diff --git a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/thermometer/view/TemperatureHistory.kt b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/thermometer/view/TemperatureHistory.kt index 1713a3a..ebaf13f 100644 --- a/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/thermometer/view/TemperatureHistory.kt +++ b/app/src/main/java/llc/arma/ble/app/ui/screen/inspection/thermometer/view/TemperatureHistory.kt @@ -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( diff --git a/app/src/main/java/llc/arma/ble/data/BleRepositoryImpl.kt b/app/src/main/java/llc/arma/ble/data/BleRepositoryImpl.kt index 45d90cf..0e23e89 100644 --- a/app/src/main/java/llc/arma/ble/data/BleRepositoryImpl.kt +++ b/app/src/main/java/llc/arma/ble/data/BleRepositoryImpl.kt @@ -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 } } diff --git a/app/src/main/java/llc/arma/ble/domain/model/BleInfo.kt b/app/src/main/java/llc/arma/ble/domain/model/BleInfo.kt index c3e5166..175b911 100644 --- a/app/src/main/java/llc/arma/ble/domain/model/BleInfo.kt +++ b/app/src/main/java/llc/arma/ble/domain/model/BleInfo.kt @@ -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