worked on AddBatteryFragment.kt

This commit is contained in:
Sockenklaus
2022-07-18 17:21:56 +02:00
parent 5e86f9fdba
commit 7bc969c6c0
4 changed files with 66 additions and 38 deletions

View File

@@ -4,6 +4,7 @@ import android.content.Context
import androidx.room.Database import androidx.room.Database
import androidx.room.Room import androidx.room.Room
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.sockenklaus.batterytracker.room.dao.BatteryDao import com.sockenklaus.batterytracker.room.dao.BatteryDao
import com.sockenklaus.batterytracker.room.dao.ChargeDao import com.sockenklaus.batterytracker.room.dao.ChargeDao
import com.sockenklaus.batterytracker.room.entities.Battery import com.sockenklaus.batterytracker.room.entities.Battery
@@ -13,9 +14,9 @@ import com.sockenklaus.batterytracker.room.entities.Charge
entities = [Charge::class, Battery::class], entities = [Charge::class, Battery::class],
version = 2 version = 2
) )
@TypeConverters(Converters::class)
abstract class BatteryTrackerDB : RoomDatabase() { abstract class BatteryTrackerDB : RoomDatabase() {
abstract fun batteryDao(): BatteryDao abstract fun batteryDao(): BatteryDao
abstract fun chargeDao(): ChargeDao abstract fun chargeDao(): ChargeDao
companion object { companion object {

View File

@@ -0,0 +1,19 @@
package com.sockenklaus.batterytracker.room
import androidx.room.TypeConverter
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
class Converters {
@TypeConverter
fun toLocalDateTime(value: Long): LocalDateTime {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(value), ZoneId.systemDefault())
}
@TypeConverter
fun toEpochMilli(value: LocalDateTime): Long {
return value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
}
}

View File

@@ -10,12 +10,11 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.* import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.*
import androidx.compose.runtime.remember import androidx.compose.ui.Alignment
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
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.TextStyle
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout import androidx.constraintlayout.compose.ConstraintLayout
@@ -53,56 +52,39 @@ class AddBatteryFragment : Fragment() {
var batteryId by remember { mutableStateOf("") } var batteryId by remember { mutableStateOf("") }
var declaredCapacity by remember { mutableStateOf("")} var declaredCapacity by remember { mutableStateOf("")}
ConstraintLayout { val outerPadding = 24.dp
val (textBatteryId, textDeclaredCapacity, fab ) = createRefs() val innerPadding = 16.dp
val outerMargin = 24.dp
val innerMargin = 16.dp
OutlinedTextField( Column(
Modifier.padding(outerPadding)
) {
MyOutlinedTextField(
value = batteryId, value = batteryId,
onValueChange = { batteryId = it }, onValueChange = { batteryId = it },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text), labelId = R.string.hint_enter_battery_id,
label = { Text(stringResource(R.string.hint_enter_battery_id)) }, leadingIcon = { Icon(Icons.Default.Tag, "Icon Tag") }
leadingIcon = { Icon(Icons.Default.Tag, null) },
modifier = Modifier
.constrainAs(textBatteryId) {
top.linkTo(parent.top, margin = outerMargin)
start.linkTo(parent.start, margin = outerMargin)
end.linkTo(parent.end, margin = outerMargin)
width = Dimension.fillToConstraints
}
.wrapContentHeight()
) )
OutlinedTextField( Spacer(Modifier.size(innerPadding))
MyOutlinedTextField(
value = declaredCapacity, value = declaredCapacity,
onValueChange = { declaredCapacity = validateDecimal(it, declaredCapacity) }, onValueChange = { declaredCapacity = validateDecimal(it, declaredCapacity) },
labelId = R.string.hint_enter_declared_capacity,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
label = { Text(stringResource(R.string.hint_enter_declared_capacity)) }, leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") }
leadingIcon = { Icon(Icons.Default.BatteryFull, null) },
modifier = Modifier
.constrainAs(textDeclaredCapacity) {
top.linkTo(textBatteryId.bottom, margin = innerMargin)
start.linkTo(parent.start, margin = outerMargin)
end.linkTo(parent.end, margin = outerMargin)
width = Dimension.fillToConstraints
}
) )
Spacer(Modifier.size(outerPadding))
ExtendedFloatingActionButton( ExtendedFloatingActionButton(
onClick = { saveBattery( onClick = { saveBattery(
batteryId, declaredCapacity batteryId, declaredCapacity
) }, ) },
icon = { Icon(Icons.Default.Save, null) }, icon = { Icon(Icons.Default.Save, null) },
text = { Text(stringResource(R.string.button_save_battery)) }, text = { Text(stringResource(R.string.button_save_battery)) },
modifier = Modifier modifier = Modifier.align(Alignment.End)
.constrainAs(fab) {
top.linkTo(textDeclaredCapacity.bottom, margin = 24.dp)
end.linkTo(parent.end, margin = outerMargin)
}
) )
} }
} }
} }
@@ -111,6 +93,31 @@ class AddBatteryFragment : Fragment() {
return view return view
} }
@Composable
fun MyOutlinedTextField(
value: String,
onValueChange: (String) -> Unit,
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
labelId: Int,
leadingIcon: (@Composable () -> Unit)? = null,
isError: Boolean = false,
helperText: String = ""
) {
OutlinedTextField(
value = value,
onValueChange = onValueChange,
keyboardOptions = keyboardOptions,
label = { Text(stringResource(labelId)) },
leadingIcon = leadingIcon,
modifier = Modifier.fillMaxWidth()
)
Text(
text = helperText,
style = MaterialTheme.typography.caption,
modifier = Modifier.padding(start = 16.dp)
)
}
/* /*
TODO: Implement the action TODO: Implement the action
*/ */

View File

@@ -148,6 +148,7 @@ class AddChargeFragment : Fragment() {
onSelect: (LocalDateTime) -> Unit, onSelect: (LocalDateTime) -> Unit,
) { ) {
val dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(Locale.GERMANY) val dateFormat: DateTimeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(Locale.GERMANY)
val datePicker = MaterialDatePicker.Builder.datePicker() val datePicker = MaterialDatePicker.Builder.datePicker()
.setTitleText("Select date") .setTitleText("Select date")
.setSelection( date.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() ) .setSelection( date.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() )