diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt index c6a0cc31..79ecc675 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragment.kt @@ -62,10 +62,10 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { } entriesBtnBack.clickWithDebounce { findNavController().navigateUp() } entriesSearch.doOnTextChanged { text, _, _, _ -> viewModel.setQuery(text.toString()) } - entriesBtnModes.clickWithDebounce { - val direction = EntriesFragmentDirections.entriesToModes() - findNavController().navigate(direction) - } +// entriesBtnModes.clickWithDebounce { +// val direction = EntriesFragmentDirections.entriesToModes() +// findNavController().navigate(direction) +// } entriesBtnSelect.clickWithDebounce { viewModel.selectCurrentItems(true) } entriesBtnClear.clickWithDebounce { viewModel.selectCurrentItems(false) } val typeMessageFormat = requireContext().getString(R.string.types_message) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragmentCompose.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragmentCompose.kt new file mode 100644 index 00000000..487b0b20 --- /dev/null +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/entriesScreen/EntriesFragmentCompose.kt @@ -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, 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, onSelected: (List, 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, 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() } + } +} diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 8890fb21..44ea5cfb 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -6,7 +6,7 @@ app:startDestination="@id/nav_passes">