diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_battery/AddBatteryFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_battery/AddBatteryFragment.kt index 8626a6f..251b9fd 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_battery/AddBatteryFragment.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_battery/AddBatteryFragment.kt @@ -40,7 +40,7 @@ class AddBatteryFragment : Fragment() { val model = ViewModelProvider(this)[AddBatteryViewModel::class.java] - var batteries = emptyList() + var batteries by mutableStateOf(emptyList()) model.batteries.observe(viewLifecycleOwner) { batteries = it diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt index 0ae844b..7f9a336 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/add_charge/AddChargeFragment.kt @@ -49,7 +49,7 @@ class AddChargeFragment : Fragment() { ): View { model = ViewModelProvider(this)[AddChargeViewModel::class.java] - var batteries = emptyList() + var batteries by mutableStateOf(emptyList()) model.batteries.observe(this.viewLifecycleOwner){ batteries = it diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt index c4bd5e5..c939cdd 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeFragment.kt @@ -4,29 +4,80 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.TextView +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.* +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy +import androidx.compose.ui.unit.dp import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.compose.viewModel +import com.sockenklaus.batterytracker.R +import com.sockenklaus.batterytracker.room.entities.Battery +import com.sockenklaus.batterytracker.ui.composables.MyOutlinedTextFieldWithSuffix import com.sockenklaus.batterytracker.ui.theme.BatteryTrackerTheme class HomeFragment : Fragment() { + @OptIn(ExperimentalMaterialApi::class) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - val model = ViewModelProvider(this)[HomeViewModel::class.java] - return ComposeView(requireContext()).apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) - - setContent { + + setContent { BatteryTrackerTheme() { - + val model: HomeViewModel = viewModel() + var batteries by remember { mutableStateOf(emptyList()) } + var filterText by remember { mutableStateOf("")} + + model.batteries.observe(viewLifecycleOwner) { + batteries = it + } + + val filteredList = batteries.filter { it.name.contains(filterText, ignoreCase = true) } + val modHorizontalPadding = Modifier.padding(horizontal = 16.dp) + + Column { + MyOutlinedTextFieldWithSuffix( + value = filterText, + onValueChange = { filterText = it }, + labelId = R.string.hint_filter_batteries, + modifier = Modifier.padding( + start = 16.dp, + end = 16.dp, + top = 16.dp + ) + ) + + LazyColumn( + state = LazyListState() + ) { + items(filteredList){ battery -> + ListItem( + text = { Text(battery.name) }, + secondaryText = { + if(battery.declaredCapacity != null){ + Text("Capacity: ${battery.declaredCapacity} Ah") + } + } + ) + Divider(modHorizontalPadding) + } + } + } } } } diff --git a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt index 9e532e8..63bf22c 100644 --- a/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt +++ b/app/src/main/java/com/sockenklaus/batterytracker/ui/fragments/home/HomeViewModel.kt @@ -1,15 +1,11 @@ package com.sockenklaus.batterytracker.ui.fragments.home import android.app.Application -import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData -import androidx.lifecycle.ViewModel +import androidx.lifecycle.* +import com.sockenklaus.batterytracker.room.BatteryTrackerDB class HomeViewModel(application: Application) : AndroidViewModel(application) { - private val _text = MutableLiveData().apply { - value = "This is home Fragment" - } - val text: LiveData = _text + private val db = BatteryTrackerDB.getInstance(application) + val batteries = db.batteryDao().getBatteries().asLiveData() } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4b95960..f076b80 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,4 +30,5 @@ * Required Battery-Name not unique! Battery not found + Filter Batteries… \ No newline at end of file