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