mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Initial entries list implementation in Compose
This commit is contained in:
1 parent
ee5b5a894b
commit
853c36d19b
3 files changed
+111
-5
No files matched your search
+4
-4
@@ -62,10 +62,10 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
|
|||||||
}
|
}
|
||||||
entriesBtnBack.clickWithDebounce { findNavController().navigateUp() }
|
entriesBtnBack.clickWithDebounce { findNavController().navigateUp() }
|
||||||
entriesSearch.doOnTextChanged { text, _, _, _ -> viewModel.setQuery(text.toString()) }
|
entriesSearch.doOnTextChanged { text, _, _, _ -> viewModel.setQuery(text.toString()) }
|
||||||
entriesBtnModes.clickWithDebounce {
|
// entriesBtnModes.clickWithDebounce {
|
||||||
val direction = EntriesFragmentDirections.entriesToModes()
|
// val direction = EntriesFragmentDirections.entriesToModes()
|
||||||
findNavController().navigate(direction)
|
// findNavController().navigate(direction)
|
||||||
}
|
// }
|
||||||
entriesBtnSelect.clickWithDebounce { viewModel.selectCurrentItems(true) }
|
entriesBtnSelect.clickWithDebounce { viewModel.selectCurrentItems(true) }
|
||||||
entriesBtnClear.clickWithDebounce { viewModel.selectCurrentItems(false) }
|
entriesBtnClear.clickWithDebounce { viewModel.selectCurrentItems(false) }
|
||||||
val typeMessageFormat = requireContext().getString(R.string.types_message)
|
val typeMessageFormat = requireContext().getString(R.string.types_message)
|
||||||
|
|||||||
+106
@@ -0,0 +1,106 @@
|
|||||||
|
package com.rtbishop.look4sat.presentation.entriesScreen
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.lazy.grid.GridCells
|
||||||
|
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||||
|
import androidx.compose.foundation.lazy.grid.items
|
||||||
|
import androidx.compose.material.Card
|
||||||
|
import androidx.compose.material.Checkbox
|
||||||
|
import androidx.compose.material.MaterialTheme
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.livedata.observeAsState
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.composed
|
||||||
|
import androidx.compose.ui.platform.ComposeView
|
||||||
|
import androidx.compose.ui.platform.ViewCompositionStrategy
|
||||||
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
|
import com.rtbishop.look4sat.domain.model.DataState
|
||||||
|
import com.rtbishop.look4sat.domain.model.SatItem
|
||||||
|
import com.rtbishop.look4sat.presentation.theme.Look4SatTheme
|
||||||
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
|
@AndroidEntryPoint
|
||||||
|
class EntriesFragmentCompose : Fragment() {
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||||
|
): View {
|
||||||
|
return ComposeView(requireContext()).apply {
|
||||||
|
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
|
||||||
|
setContent {
|
||||||
|
val entriesViewModel: EntriesViewModel = viewModel()
|
||||||
|
EntriesScreen(entriesViewModel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview(showBackground = true, widthDp = 400, heightDp = 720, showSystemUi = true)
|
||||||
|
@Composable
|
||||||
|
private fun EntriesScreen(entriesViewModel: EntriesViewModel = viewModel()) {
|
||||||
|
Look4SatTheme {
|
||||||
|
val dataState = entriesViewModel.satData.observeAsState(DataState.Loading)
|
||||||
|
val onSelected: (List<Int>, Boolean) -> Unit = { list, value ->
|
||||||
|
entriesViewModel.updateSelection(list, value)
|
||||||
|
}
|
||||||
|
Card(modifier = Modifier.padding(6.dp)) {
|
||||||
|
when (val state = dataState.value) {
|
||||||
|
is DataState.Success -> {
|
||||||
|
Column(modifier = Modifier.fillMaxSize()) {
|
||||||
|
SearchBar()
|
||||||
|
EntriesList(dataState = state.data, onSelected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SearchBar() {
|
||||||
|
Card {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun EntriesList(dataState: List<SatItem>, onSelected: (List<Int>, Boolean) -> Unit) {
|
||||||
|
LazyVerticalGrid(
|
||||||
|
columns = GridCells.Fixed(2),
|
||||||
|
verticalArrangement = Arrangement.spacedBy(2.dp),
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(2.dp),
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.background(MaterialTheme.colors.background)
|
||||||
|
) { items(dataState) { EntryItem(item = it, onSelected) } }
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun EntryItem(item: SatItem, onSelected: (List<Int>, Boolean) -> Unit) {
|
||||||
|
Row(verticalAlignment = Alignment.CenterVertically,
|
||||||
|
modifier = Modifier
|
||||||
|
.background(MaterialTheme.colors.surface)
|
||||||
|
.noRippleClickable { onSelected(listOf(item.catnum), item.isSelected.not()) }) {
|
||||||
|
Checkbox(checked = item.isSelected, onCheckedChange = null, Modifier.padding(6.dp))
|
||||||
|
Text(text = item.name, maxLines = 1, overflow = TextOverflow.Ellipsis)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Modifier.noRippleClickable(onClick: () -> Unit): Modifier = composed {
|
||||||
|
clickable(remember { MutableInteractionSource() }, null) { onClick() }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
app:startDestination="@id/nav_passes">
|
app:startDestination="@id/nav_passes">
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/nav_entries"
|
android:id="@+id/nav_entries"
|
||||||
android:name="com.rtbishop.look4sat.presentation.entriesScreen.EntriesFragment"
|
android:name="com.rtbishop.look4sat.presentation.entriesScreen.EntriesFragmentCompose"
|
||||||
tools:layout="@layout/fragment_entries">
|
tools:layout="@layout/fragment_entries">
|
||||||
<action
|
<action
|
||||||
android:id="@+id/entries_to_modes"
|
android:id="@+id/entries_to_modes"
|
||||||
|
|||||||
Reference in new issue
Block a user