Merge branch 'auto-capitalize' of socrates/batterytracker into master

This commit is contained in:
Pascal König
2022-07-23 16:42:51 +02:00
committed by Gogs
7 changed files with 113 additions and 161 deletions

View File

@@ -16,7 +16,7 @@ interface BatteryDao {
@Update @Update
fun updateBattery(battery: Battery): Int fun updateBattery(battery: Battery): Int
@Query("Select * FROM batteries ORDER BY name ASC") @Query("Select * FROM batteries ORDER BY name COLLATE NOCASE ASC")
fun getBatteries(): Flow<List<Battery>> fun getBatteries(): Flow<List<Battery>>
@Query("Select * FROM batteries WHERE id = :id") @Query("Select * FROM batteries WHERE id = :id")

View File

@@ -53,7 +53,7 @@ fun BatteryTracker() {
) )
} }
} }
) { _ -> ) {
ModalDrawer( ModalDrawer(
drawerState = state.scaffoldState.drawerState, drawerState = state.scaffoldState.drawerState,
drawerContent = { drawerContent = {

View File

@@ -10,7 +10,9 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment 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.text.input.KeyboardCapitalization
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.toUpperCase
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController import androidx.navigation.NavController
@@ -19,6 +21,7 @@ import com.sockenklaus.batterytracker.ui.Routes
import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix
import com.sockenklaus.batterytracker.ui.models.AddBatteryViewModel import com.sockenklaus.batterytracker.ui.models.AddBatteryViewModel
import com.sockenklaus.batterytracker.util.validateDecimal import com.sockenklaus.batterytracker.util.validateDecimal
import java.util.*
@Composable @Composable
fun AddBattery(navController: NavController){ fun AddBattery(navController: NavController){
@@ -32,6 +35,11 @@ fun AddBattery(navController: NavController){
Modifier.padding(outerPadding) Modifier.padding(outerPadding)
) { ) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
){
MyOutlinedTextFieldWithSuffix( MyOutlinedTextFieldWithSuffix(
value = model.batteryName, value = model.batteryName,
onValueChange = { value -> onValueChange = { value ->
@@ -46,8 +54,27 @@ fun AddBattery(navController: NavController){
labelId = R.string.hint_enter_battery_name, labelId = R.string.hint_enter_battery_name,
leadingIcon = { Icon(Icons.Default.Tag, "Icon Tag") }, leadingIcon = { Icon(Icons.Default.Tag, "Icon Tag") },
isError = model.batteryHasError, isError = model.batteryHasError,
helperTextId = model.batteryHelperId helperTextId = model.batteryHelperId,
keyboardOptions = KeyboardOptions(
capitalization = if(model.switchAutoCap) KeyboardCapitalization.Characters else KeyboardCapitalization.None,
autoCorrect = false,
keyboardType = KeyboardType.Ascii
) )
)
Column() {
Switch(
checked = model.switchAutoCap,
onCheckedChange = { model.switchAutoCap = !model.switchAutoCap }
)
Text(
text = "Auto-Cap.",
style = MaterialTheme.typography.caption
)
}
}
Spacer(Modifier.size(innerPadding)) Spacer(Modifier.size(innerPadding))
@@ -59,7 +86,8 @@ fun AddBattery(navController: NavController){
labelId = R.string.hint_enter_declared_capacity, labelId = R.string.hint_enter_declared_capacity,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") }, leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") },
suffix = "Ah" suffix = "Ah",
modifier = Modifier.fillMaxWidth()
) )
Spacer(Modifier.size(outerPadding)) Spacer(Modifier.size(outerPadding))

View File

@@ -110,7 +110,8 @@ fun AddCharge(navController: NavController){
leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") }, leadingIcon = { Icon(Icons.Default.BatteryChargingFull, "Icon Battery Charging Full") },
isError = model.chargeHasError, isError = model.chargeHasError,
helperTextId = R.string.helper_required, helperTextId = R.string.helper_required,
suffix = "Ah" suffix = "Ah",
modifier = Modifier.fillMaxWidth(),
) )
Spacer(Modifier.size(innerPadding)) Spacer(Modifier.size(innerPadding))

View File

@@ -30,7 +30,9 @@ fun Home(
val filteredList = batteries.filter { it.name.contains(filterText, ignoreCase = true) } val filteredList = batteries.filter { it.name.contains(filterText, ignoreCase = true) }
Column { Column(
modifier = Modifier.padding(bottom = 16.dp)
) {
MyOutlinedTextFieldWithSuffix( MyOutlinedTextFieldWithSuffix(
value = filterText, value = filterText,
onValueChange = { filterText = it }, onValueChange = { filterText = it },
@@ -40,6 +42,7 @@ fun Home(
start = 16.dp, start = 16.dp,
end = 16.dp end = 16.dp
) )
.fillMaxWidth()
) )
LazyColumn( LazyColumn(

View File

@@ -21,90 +21,6 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.sockenklaus.batterytracker.ui.theme.Gray500 import com.sockenklaus.batterytracker.ui.theme.Gray500
/*@Composable
fun TopAppBar(
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
navigationIcon: @Composable (() -> Unit)? = null,
actions: @Composable RowScope.() -> Unit = {},
backgroundColor: Color = MaterialTheme.colors.primarySurface,
contentColor: Color = contentColorFor(backgroundColor),
elevation: Dp = AppBarDefaults.TopAppBarElevation
) {
AppBar(
backgroundColor,
contentColor,
elevation,
AppBarDefaults.ContentPadding,
RectangleShape,
modifier
) {
if (navigationIcon == null) {
Spacer(Modifier.width(16.dp - 4.dp))
} else {
Row(Modifier.fillMaxHeight().width(72.dp - 4.dp), verticalAlignment = Alignment.CenterVertically) {
CompositionLocalProvider(
LocalContentAlpha provides ContentAlpha.high,
content = navigationIcon
)
}
}
Row(
Modifier.fillMaxHeight().weight(1f),
verticalAlignment = Alignment.CenterVertically
) {
ProvideTextStyle(value = MaterialTheme.typography.h6) {
CompositionLocalProvider(
LocalContentAlpha provides ContentAlpha.high,
content = title
)
}
}
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
Row(
Modifier.fillMaxHeight(),
horizontalArrangement = Arrangement.End,
verticalAlignment = Alignment.CenterVertically,
content = actions
)
}
}
}
@Composable
private fun AppBar(
backgroundColor: Color,
contentColor: Color,
elevation: Dp,
contentPadding: PaddingValues,
shape: Shape,
modifier: Modifier = Modifier,
content: @Composable RowScope.() -> Unit
) {
Surface(
color = backgroundColor,
contentColor = contentColor,
elevation = elevation,
shape = shape,
modifier = modifier
) {
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
Row(
Modifier.fillMaxWidth()
.padding(contentPadding)
.height(56.dp),
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically,
content = content
)
}
}
}*/
@Composable @Composable
@OptIn(ExperimentalMaterialApi::class) @OptIn(ExperimentalMaterialApi::class)
fun MyOutlinedTextFieldWithSuffix( fun MyOutlinedTextFieldWithSuffix(
@@ -142,11 +58,11 @@ fun MyOutlinedTextFieldWithSuffix(
Gray500 Gray500
} }
Column() {
BasicTextField( BasicTextField(
value = value, value = value,
modifier = modifier modifier = modifier
.padding(top = 8.dp) .padding(top = 8.dp)
.background(colors.backgroundColor(enabled).value, shape) .background(colors.backgroundColor(enabled).value, shape)
.defaultMinSize( .defaultMinSize(
minWidth = TextFieldDefaults.MinWidth, minWidth = TextFieldDefaults.MinWidth,
@@ -168,9 +84,11 @@ fun MyOutlinedTextFieldWithSuffix(
value = value, value = value,
visualTransformation = visualTransformation, visualTransformation = visualTransformation,
innerTextField = { innerTextField = {
Row { Row(
horizontalArrangement = Arrangement.SpaceBetween
) {
val alignModifier = Modifier.alignByBaseline() val alignModifier = Modifier.alignByBaseline()
Box(alignModifier.weight(1f)){ Box(alignModifier){
innerTextField() innerTextField()
} }
Text( Text(
@@ -207,4 +125,5 @@ fun MyOutlinedTextFieldWithSuffix(
color = helperTextColor, color = helperTextColor,
modifier = Modifier.padding(start = 16.dp) modifier = Modifier.padding(start = 16.dp)
) )
}
} }

View File

@@ -22,6 +22,7 @@ class AddBatteryViewModel(application: Application): AndroidViewModel(applicatio
var batteryName by mutableStateOf("") var batteryName by mutableStateOf("")
var batteryHasError by mutableStateOf(false) var batteryHasError by mutableStateOf(false)
var batteryHelperId by mutableStateOf(R.string.helper_required) var batteryHelperId by mutableStateOf(R.string.helper_required)
var switchAutoCap by mutableStateOf(true)
var declaredCapacity by mutableStateOf("") var declaredCapacity by mutableStateOf("")