|
@@ -1,11 +1,7 @@
|
|
|
package com.example.torus.ui
|
|
package com.example.torus.ui
|
|
|
|
|
|
|
|
-import androidx.compose.foundation.BorderStroke
|
|
|
|
|
-import androidx.compose.foundation.background
|
|
|
|
|
-import androidx.compose.foundation.border
|
|
|
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
import androidx.compose.foundation.layout.Arrangement
|
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Column
|
|
|
-import androidx.compose.foundation.layout.Row
|
|
|
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.layout.padding
|
|
@@ -15,11 +11,7 @@ import androidx.compose.foundation.verticalScroll
|
|
|
import androidx.compose.material3.Button
|
|
import androidx.compose.material3.Button
|
|
|
import androidx.compose.material3.ButtonDefaults
|
|
import androidx.compose.material3.ButtonDefaults
|
|
|
import androidx.compose.material3.MaterialTheme
|
|
import androidx.compose.material3.MaterialTheme
|
|
|
-import androidx.compose.material3.OutlinedButton
|
|
|
|
|
-import androidx.compose.material3.OutlinedTextField
|
|
|
|
|
-import androidx.compose.material3.OutlinedTextFieldDefaults
|
|
|
|
|
import androidx.compose.material3.Text
|
|
import androidx.compose.material3.Text
|
|
|
-import androidx.compose.material3.TextFieldColors
|
|
|
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.Composable
|
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.getValue
|
|
|
import androidx.compose.runtime.key
|
|
import androidx.compose.runtime.key
|
|
@@ -30,7 +22,6 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.runtime.setValue
|
|
|
import androidx.compose.runtime.withFrameNanos
|
|
import androidx.compose.runtime.withFrameNanos
|
|
|
-import androidx.compose.ui.Alignment
|
|
|
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.Modifier
|
|
|
import androidx.compose.ui.res.stringResource
|
|
import androidx.compose.ui.res.stringResource
|
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
@@ -137,137 +128,6 @@ fun CreateWorkoutScreen(
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-private fun updateExercise(
|
|
|
|
|
- exercises: MutableList<DraftExercise>,
|
|
|
|
|
- id: String,
|
|
|
|
|
- transform: (DraftExercise) -> DraftExercise
|
|
|
|
|
-) {
|
|
|
|
|
- val index = exercises.indexOfFirst { it.id == id }
|
|
|
|
|
- if (index >= 0) {
|
|
|
|
|
- exercises[index] = transform(exercises[index])
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-@Composable
|
|
|
|
|
-private fun NamedExerciseEditor(
|
|
|
|
|
- number: Int,
|
|
|
|
|
- typeLabel: String,
|
|
|
|
|
- name: String,
|
|
|
|
|
- onNameChange: (String) -> Unit
|
|
|
|
|
-) {
|
|
|
|
|
- val shape = RoundedCornerShape(14.dp)
|
|
|
|
|
- Column(
|
|
|
|
|
- modifier = Modifier
|
|
|
|
|
- .fillMaxWidth()
|
|
|
|
|
- .border(1.dp, MaterialTheme.colorScheme.outline, shape)
|
|
|
|
|
- .padding(16.dp),
|
|
|
|
|
- verticalArrangement = Arrangement.spacedBy(12.dp)
|
|
|
|
|
- ) {
|
|
|
|
|
- Row(
|
|
|
|
|
- modifier = Modifier.fillMaxWidth(),
|
|
|
|
|
- horizontalArrangement = Arrangement.SpaceBetween,
|
|
|
|
|
- verticalAlignment = Alignment.CenterVertically
|
|
|
|
|
- ) {
|
|
|
|
|
- Text(
|
|
|
|
|
- text = typeLabel,
|
|
|
|
|
- color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
|
|
|
- style = MaterialTheme.typography.labelLarge
|
|
|
|
|
- )
|
|
|
|
|
- Text(
|
|
|
|
|
- text = number.toString(),
|
|
|
|
|
- color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
|
|
|
- style = MaterialTheme.typography.labelSmall
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- TorusTextField(
|
|
|
|
|
- value = name,
|
|
|
|
|
- onValueChange = onNameChange,
|
|
|
|
|
- label = stringResource(R.string.exercise_name)
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-@Composable
|
|
|
|
|
-private fun ExerciseTypePicker(
|
|
|
|
|
- onWeightsClick: () -> Unit,
|
|
|
|
|
- onRunClick: () -> Unit = {}
|
|
|
|
|
-) {
|
|
|
|
|
- val shape = RoundedCornerShape(14.dp)
|
|
|
|
|
- Column(
|
|
|
|
|
- modifier = Modifier
|
|
|
|
|
- .fillMaxWidth()
|
|
|
|
|
- .background(MaterialTheme.colorScheme.surfaceVariant, shape)
|
|
|
|
|
- .border(1.dp, MaterialTheme.colorScheme.primary, shape)
|
|
|
|
|
- .padding(16.dp),
|
|
|
|
|
- verticalArrangement = Arrangement.spacedBy(12.dp)
|
|
|
|
|
- ) {
|
|
|
|
|
- Text(
|
|
|
|
|
- text = stringResource(R.string.choose_exercise_type),
|
|
|
|
|
- color = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
|
|
|
- style = MaterialTheme.typography.titleSmall
|
|
|
|
|
- )
|
|
|
|
|
- ExerciseTypeOption(
|
|
|
|
|
- label = stringResource(R.string.exercise_type_weights),
|
|
|
|
|
- onClick = onWeightsClick
|
|
|
|
|
- )
|
|
|
|
|
- ExerciseTypeOption(
|
|
|
|
|
- label = stringResource(R.string.exercise_type_run),
|
|
|
|
|
- onClick = onRunClick
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-@Composable
|
|
|
|
|
-private fun ExerciseTypeOption(
|
|
|
|
|
- label: String,
|
|
|
|
|
- onClick: () -> Unit = {}
|
|
|
|
|
-) {
|
|
|
|
|
- OutlinedButton(
|
|
|
|
|
- onClick = onClick,
|
|
|
|
|
- modifier = Modifier.fillMaxWidth(),
|
|
|
|
|
- shape = RoundedCornerShape(50),
|
|
|
|
|
- colors = ButtonDefaults.outlinedButtonColors(
|
|
|
|
|
- contentColor = MaterialTheme.colorScheme.onBackground
|
|
|
|
|
- ),
|
|
|
|
|
- border = BorderStroke(1.dp, MaterialTheme.colorScheme.outlineVariant)
|
|
|
|
|
- ) {
|
|
|
|
|
- Text(text = label)
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-@Composable
|
|
|
|
|
-private fun TorusTextField(
|
|
|
|
|
- value: String,
|
|
|
|
|
- onValueChange: (String) -> Unit,
|
|
|
|
|
- label: String,
|
|
|
|
|
- modifier: Modifier = Modifier
|
|
|
|
|
-) {
|
|
|
|
|
- OutlinedTextField(
|
|
|
|
|
- value = value,
|
|
|
|
|
- onValueChange = onValueChange,
|
|
|
|
|
- modifier = modifier.fillMaxWidth(),
|
|
|
|
|
- label = { Text(text = label) },
|
|
|
|
|
- singleLine = true,
|
|
|
|
|
- shape = RoundedCornerShape(14.dp),
|
|
|
|
|
- colors = torusTextFieldColors()
|
|
|
|
|
- )
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-@Composable
|
|
|
|
|
-private fun torusTextFieldColors(): TextFieldColors {
|
|
|
|
|
- return OutlinedTextFieldDefaults.colors(
|
|
|
|
|
- focusedTextColor = MaterialTheme.colorScheme.onBackground,
|
|
|
|
|
- unfocusedTextColor = MaterialTheme.colorScheme.onBackground,
|
|
|
|
|
- focusedBorderColor = MaterialTheme.colorScheme.primary,
|
|
|
|
|
- unfocusedBorderColor = MaterialTheme.colorScheme.outline,
|
|
|
|
|
- focusedLabelColor = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
|
|
|
- unfocusedLabelColor = MaterialTheme.colorScheme.onSurfaceVariant,
|
|
|
|
|
- cursorColor = MaterialTheme.colorScheme.primary,
|
|
|
|
|
- focusedContainerColor = MaterialTheme.colorScheme.surface,
|
|
|
|
|
- unfocusedContainerColor = MaterialTheme.colorScheme.surface
|
|
|
|
|
- )
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
@Preview(showBackground = true, backgroundColor = 0xFF0C0F14)
|
|
@Preview(showBackground = true, backgroundColor = 0xFF0C0F14)
|
|
|
@Composable
|
|
@Composable
|
|
|
private fun CreateWorkoutScreenPreview() {
|
|
private fun CreateWorkoutScreenPreview() {
|