diff --git a/app/src/main/java/com/ankitsuda/rebound/ui/main/MainScreen.kt b/app/src/main/java/com/ankitsuda/rebound/ui/main/MainScreen.kt index e2fc353b..a5cf4e70 100644 --- a/app/src/main/java/com/ankitsuda/rebound/ui/main/MainScreen.kt +++ b/app/src/main/java/com/ankitsuda/rebound/ui/main/MainScreen.kt @@ -136,12 +136,12 @@ private fun MainLayout( ReboundThemeWrapper(themeState = themeState) { NavigatorHost { - ReboundKeyboardHost { - CompositionLocalProvider( - LocalDialog provides dialog, - LocalPanel provides mainPanel, - LocalAppSettings provides appSettings - ) { + CompositionLocalProvider( + LocalDialog provides dialog, + LocalPanel provides mainPanel, + LocalAppSettings provides appSettings + ) { + ReboundKeyboardHost { Box() { /** * Temporary using ModalBottomSheetLayout diff --git a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/PlatesDao.kt b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/PlatesDao.kt index 2a043b8a..1f871f7a 100644 --- a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/PlatesDao.kt +++ b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/db/daos/PlatesDao.kt @@ -18,6 +18,7 @@ import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query +import com.ankitsuda.rebound.domain.WeightUnit import com.ankitsuda.rebound.domain.entities.Muscle import com.ankitsuda.rebound.domain.entities.Plate import kotlinx.coroutines.flow.Flow @@ -31,8 +32,8 @@ interface PlatesDao { @Query("SELECT * FROM plates ORDER BY weight") fun getPlates(): Flow> - @Query("SELECT * FROM plates WHERE is_active = 1") - fun getActivePlates(): Flow> + @Query("SELECT * FROM plates WHERE for_weight_unit = :forWeightUnit AND is_active = 1") + fun getActivePlates(forWeightUnit: WeightUnit): Flow> @Query("UPDATE plates SET is_active = :isActive WHERE id = :plateId") suspend fun updateIsActive(plateId: String, isActive: Boolean) diff --git a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/PlatesRepository.kt b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/PlatesRepository.kt index 8130fad1..95637507 100644 --- a/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/PlatesRepository.kt +++ b/modules/core-data/src/main/java/com/ankitsuda/rebound/data/repositories/PlatesRepository.kt @@ -16,6 +16,7 @@ package com.ankitsuda.rebound.data.repositories import com.ankitsuda.rebound.data.db.daos.MusclesDao import com.ankitsuda.rebound.data.db.daos.PlatesDao +import com.ankitsuda.rebound.domain.WeightUnit import com.ankitsuda.rebound.domain.entities.Plate import javax.inject.Inject @@ -23,7 +24,7 @@ class PlatesRepository @Inject constructor(private val platesDao: PlatesDao) { fun getPlates() = platesDao.getPlates() - fun getActivePlates() = platesDao.getActivePlates() + fun getActivePlates(forWeightUnit: WeightUnit) = platesDao.getActivePlates(forWeightUnit) fun getPlate(plateId: String) = platesDao.getPlate(plateId) diff --git a/modules/domain/src/main/java/com/ankitsuda/rebound/domain/entities/Plate.kt b/modules/domain/src/main/java/com/ankitsuda/rebound/domain/entities/Plate.kt index 05e00cdf..2359d36e 100644 --- a/modules/domain/src/main/java/com/ankitsuda/rebound/domain/entities/Plate.kt +++ b/modules/domain/src/main/java/com/ankitsuda/rebound/domain/entities/Plate.kt @@ -28,11 +28,10 @@ data class Plate( @ColumnInfo(name = "id") val id: String, - // weight column is stored in kg + // weight column should be stored according to the weight unit @ColumnInfo(name = "weight") var weight: Double? = null, - // forWeightUnit does not represent weight unit of weight column @ColumnInfo(name = "for_weight_unit") var forWeightUnit: WeightUnit? = null, diff --git a/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/ReboundSetKeyboardComponent.kt b/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/ReboundSetKeyboardComponent.kt index c88d785b..432ed66a 100644 --- a/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/ReboundSetKeyboardComponent.kt +++ b/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/ReboundSetKeyboardComponent.kt @@ -26,6 +26,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import com.ankitsuda.common.compose.LocalAppSettings import com.ankitsuda.rebound.ui.keyboard.enums.KeyboardModeType import com.ankitsuda.rebound.ui.keyboard.enums.ReboundKeyboardType import com.ankitsuda.rebound.ui.keyboard.models.ClearNumKey @@ -90,14 +91,16 @@ fun ReboundSetKeyboardComponent( ) } KeyboardModeType.PLATE_CALCULATOR -> { - PlateCalculatorComponent( - modifier = Modifier - .fillMaxWidth() - .height( - height = 250.dp, - ), - weight = inputConnection?.getText()?.toDoubleOrNull() ?: 0.0 - ) + key(LocalAppSettings.current.weightUnit) { + PlateCalculatorComponent( + modifier = Modifier + .fillMaxWidth() + .height( + height = 250.dp, + ), + weight = inputConnection?.getText()?.toDoubleOrNull() ?: 0.0 + ) + } } KeyboardModeType.WARMUP_PICKER -> { WarmUpListPickerComponent( diff --git a/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponent.kt b/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponent.kt index d731d81a..7711005a 100644 --- a/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponent.kt +++ b/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponent.kt @@ -30,6 +30,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import com.ankitsuda.base.util.toReadableString +import com.ankitsuda.common.compose.userPrefWeightUnitStr import com.ankitsuda.rebound.domain.entities.Plate import com.ankitsuda.rebound.ui.components.RSpacer import com.ankitsuda.rebound.ui.theme.LocalThemeState @@ -58,13 +59,13 @@ fun PlateCalculatorComponent( Column(modifier = Modifier.height(comHeight * 0.35F)) { Text( modifier = Modifier.padding(start = 16.dp, top = 16.dp), - text = "${weight.toReadableString()} kg", // TODO: Move to strings.xml + text = "${weight.toReadableString()} ${userPrefWeightUnitStr()}", color = theme.keyboardContentColor ) if (remainingWeight > 0.0) { Text( modifier = Modifier.padding(start = 16.dp, top = 4.dp), - text = "Remaining weight: ${remainingWeight.toReadableString()} kg", // TODO: Move to strings.xml + text = "Remaining weight: ${remainingWeight.toReadableString()} ${userPrefWeightUnitStr()}", // TODO: Move to strings.xml style = ReboundTheme.typography.caption, color = theme.keyboardContentColor.copy(alpha = 0.75f) ) @@ -111,7 +112,7 @@ private fun BarbellComponent( contentAlignment = Alignment.Center ) { Text( - text = "${barbellWeight.toReadableString()} kg", + text = "${barbellWeight.toReadableString()} ${userPrefWeightUnitStr()}", fontSize = 12.sp, color = onBarbellColor ) diff --git a/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponentViewModel.kt b/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponentViewModel.kt index 8b9a5ef6..7835a8f4 100644 --- a/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponentViewModel.kt +++ b/modules/ui-keyboard/src/main/java/com/ankitsuda/rebound/ui/keyboard/platecalculator/PlateCalculatorComponentViewModel.kt @@ -16,6 +16,7 @@ package com.ankitsuda.rebound.ui.keyboard.platecalculator import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.ankitsuda.rebound.data.datastore.AppPreferences import com.ankitsuda.rebound.data.repositories.PlatesRepository import com.ankitsuda.rebound.domain.entities.Plate import dagger.hilt.android.lifecycle.HiltViewModel @@ -29,6 +30,7 @@ import kotlin.math.roundToInt @HiltViewModel class PlateCalculatorComponentViewModel @Inject constructor( + private val prefs: AppPreferences, private val platesRepository: PlatesRepository ) : ViewModel() { @@ -45,11 +47,13 @@ class PlateCalculatorComponentViewModel @Inject constructor( init { viewModelScope.launch { - platesRepository.getActivePlates().collectLatest { - _allPlates.clear() - _allPlates.addAll(it) - if (lastWeight != null) { - refreshPlates(lastWeight!!) + prefs.weightUnit.collectLatest { unit -> + platesRepository.getActivePlates(forWeightUnit = unit).collectLatest { + _allPlates.clear() + _allPlates.addAll(it) + if (lastWeight != null) { + refreshPlates(lastWeight!!) + } } } } @@ -58,12 +62,8 @@ class PlateCalculatorComponentViewModel @Inject constructor( fun refreshPlates(newWeight: Double) { platesJob?.cancel() platesJob = viewModelScope.launch { - if (_allPlates.isEmpty()) { - val availablePlates = platesRepository.getActivePlates().first() - _allPlates.clear() - _allPlates.addAll(availablePlates) - } - val platesNeeded = calculatePlates(newWeight, _allPlates.sortedByDescending { it.weight }) + val platesNeeded = + calculatePlates(newWeight, _allPlates.sortedByDescending { it.weight }) val sumOfPlates = platesNeeded.sumOf { it.weight ?: 0.0 } _plates.value = platesNeeded _remainingWeight.value = try {