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.Room
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import com.sockenklaus.batterytracker.room.dao.BatteryDao
import com.sockenklaus.batterytracker.room.dao.ChargeDao
import com.sockenklaus.batterytracker.room.entities.Battery
@@ -13,9 +14,9 @@ import com.sockenklaus.batterytracker.room.entities.Charge
entities = [Charge::class, Battery::class],
version = 2
)
@TypeConverters(Converters::class)
abstract class BatteryTrackerDB : RoomDatabase() {
abstract fun batteryDao(): BatteryDao
abstract fun chargeDao(): ChargeDao
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.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
@@ -53,56 +52,39 @@ class AddBatteryFragment : Fragment() {
var batteryId by remember { mutableStateOf("") }
var declaredCapacity by remember { mutableStateOf("")}
ConstraintLayout {
val (textBatteryId, textDeclaredCapacity, fab ) = createRefs()
val outerMargin = 24.dp
val innerMargin = 16.dp
val outerPadding = 24.dp
val innerPadding = 16.dp
OutlinedTextField(
Column(
Modifier.padding(outerPadding)
) {
MyOutlinedTextField(
value = batteryId,
onValueChange = { batteryId = it },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
label = { Text(stringResource(R.string.hint_enter_battery_id)) },
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()
labelId = R.string.hint_enter_battery_id,
leadingIcon = { Icon(Icons.Default.Tag, "Icon Tag") }
)
OutlinedTextField(
Spacer(Modifier.size(innerPadding))
MyOutlinedTextField(
value = declaredCapacity,
onValueChange = { declaredCapacity = validateDecimal(it, declaredCapacity) },
labelId = R.string.hint_enter_declared_capacity,
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal),
label = { Text(stringResource(R.string.hint_enter_declared_capacity)) },
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
}
leadingIcon = { Icon(Icons.Default.BatteryFull, "Icon Battery Full") }
)
Spacer(Modifier.size(outerPadding))
ExtendedFloatingActionButton(
onClick = { saveBattery(
batteryId, declaredCapacity
) },
icon = { Icon(Icons.Default.Save, null) },
text = { Text(stringResource(R.string.button_save_battery)) },
modifier = Modifier
.constrainAs(fab) {
top.linkTo(textDeclaredCapacity.bottom, margin = 24.dp)
end.linkTo(parent.end, margin = outerMargin)
}
modifier = Modifier.align(Alignment.End)
)
}
}
}
@@ -111,6 +93,31 @@ class AddBatteryFragment : Fragment() {
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
*/

View File

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