worked on AddBatteryFragment.kt
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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() )
|
||||
|
||||
Reference in New Issue
Block a user