Implemented more details in Home view

This commit is contained in:
sockenklaus
2022-07-21 16:11:16 +02:00
parent f637007e64
commit f172fa4f89
4 changed files with 95 additions and 27 deletions

View File

@@ -0,0 +1,8 @@
package com.sockenklaus.batterytracker.ui.composables
import androidx.compose.runtime.Composable
@Composable
fun BatteryDetails(){
}

View File

@@ -1,14 +1,15 @@
package com.sockenklaus.batterytracker.ui.composables package com.sockenklaus.batterytracker.ui.composables
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
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
@@ -16,6 +17,7 @@ import com.sockenklaus.batterytracker.R
import com.sockenklaus.batterytracker.room.entities.Battery import com.sockenklaus.batterytracker.room.entities.Battery
import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.composables.util.MyOutlinedTextFieldWithSuffix
import com.sockenklaus.batterytracker.ui.models.HomeViewModel import com.sockenklaus.batterytracker.ui.models.HomeViewModel
import java.lang.reflect.GenericDeclaration
@OptIn(ExperimentalMaterialApi::class) @OptIn(ExperimentalMaterialApi::class)
@Composable @Composable
@@ -44,11 +46,15 @@ fun Home(navController: NavController) {
) { ) {
items(filteredList){ battery -> items(filteredList){ battery ->
ListItem( ListItem(
text = { Text(battery.name) }, text = {
ListPrimaryText(battery)
},
secondaryText = { secondaryText = {
if(battery.declaredCapacity != null){ ListSecondaryText(
Text("Capacity: ${battery.declaredCapacity} Ah") min = model.getMinChargeById(battery.id),
} avg = model.getAvgChargeById(battery.id),
max = model.getMaxChargeById(battery.id)
)
} }
) )
Divider(modHorizontalPadding) Divider(modHorizontalPadding)
@@ -57,29 +63,43 @@ fun Home(navController: NavController) {
} }
} }
@Composable
/* fun ListPrimaryText(
class HomeFragment : Fragment() { battery: Battery
){
@OptIn(ExperimentalMaterialApi::class) Row(
override fun onCreateView( horizontalArrangement = Arrangement.SpaceBetween
inflater: LayoutInflater, ){
container: ViewGroup?, Text(
savedInstanceState: Bundle? text = battery.name,
): View { fontWeight = FontWeight.Bold,
modifier = Modifier.alignByBaseline()
return ComposeView(requireContext()).apply { )
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) if(battery.declaredCapacity != null){
CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.medium) {
setContent { Text(
BatteryTrackerTheme() { text = "Cap: ${battery.declaredCapacity} Ah",
style = MaterialTheme.typography.body2,
} modifier = Modifier.alignByBaseline()
)
} }
} }
} }
}
override fun onDestroyView() {
super.onDestroyView() @Composable
fun ListSecondaryText(
min: Double?,
avg: Double?,
max: Double?
) {
Row(
horizontalArrangement = Arrangement.SpaceBetween
) {
Text(if(min != null) "Min.: $min Ah" else "")
Text(if(avg != null) "Avg.: $avg Ah" else "")
Text(if(max != null) "Max.: $max Ah" else "")
} }
}*/ }

View File

@@ -1,6 +1,7 @@
package com.sockenklaus.batterytracker.ui.models package com.sockenklaus.batterytracker.ui.models
import android.app.Application import android.app.Application
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue

View File

@@ -1,11 +1,50 @@
package com.sockenklaus.batterytracker.ui.models package com.sockenklaus.batterytracker.ui.models
import android.app.Application import android.app.Application
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.lifecycle.* import androidx.lifecycle.*
import com.sockenklaus.batterytracker.room.BatteryTrackerDB import com.sockenklaus.batterytracker.room.BatteryTrackerDB
import java.math.BigDecimal
import java.math.RoundingMode
class HomeViewModel(application: Application) : AndroidViewModel(application) { class HomeViewModel(application: Application) : AndroidViewModel(application) {
private val db = BatteryTrackerDB.getInstance(application) private val db = BatteryTrackerDB.getInstance(application)
val batteries = db.batteryDao().getBatteries().asLiveData() val batteries = db.batteryDao().getBatteries().asLiveData()
private val batteriesAndCharges = db.batteryDao().getBatteriesAndCharges().asLiveData()
@Composable
fun getMinChargeById(batteryId: Int): Double? {
val _batteriesAndCharges by batteriesAndCharges.observeAsState()
val batteryAndCharges = _batteriesAndCharges?.find{ it.battery.id == batteryId }
if(batteryAndCharges != null && batteryAndCharges.charges.isNotEmpty()){
return batteryAndCharges.charges.map { it.charge }.min()
}
return null
}
@Composable
fun getMaxChargeById(batteryId: Int): Double? {
val _batteriesAndCharges by batteriesAndCharges.observeAsState()
val batteryAndCharges = _batteriesAndCharges?.find { it.battery.id == batteryId }
if(batteryAndCharges != null && batteryAndCharges.charges.isNotEmpty()) {
return batteryAndCharges.charges.map { it.charge }.max()
}
return null
}
@Composable
fun getAvgChargeById(batteryId: Int): Double? {
val _batteriesAndCharges by batteriesAndCharges.observeAsState()
val batteryAndCharges = _batteriesAndCharges?.find{ it.battery.id == batteryId }
if(batteryAndCharges != null && batteryAndCharges.charges.isNotEmpty()) {
return BigDecimal(batteryAndCharges.charges.map { it.charge }.average()).setScale(2, RoundingMode.HALF_UP).toDouble()
}
return null
}
} }