Add: Compose's categories bar

This commit is contained in:
machiav3lli 2022-04-11 01:15:30 +02:00
parent c2b2eb44d5
commit 0bf3dad2f2

View File

@ -5,19 +5,26 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Scaffold import androidx.compose.foundation.layout.Column
import androidx.core.view.children import androidx.compose.foundation.layout.fillMaxSize
import com.google.android.material.chip.Chip import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import com.looker.droidify.R import com.looker.droidify.R
import com.looker.droidify.content.Preferences import com.looker.droidify.content.Preferences
import com.looker.droidify.database.entity.Category
import com.looker.droidify.database.entity.Product import com.looker.droidify.database.entity.Product
import com.looker.droidify.database.entity.Repository import com.looker.droidify.database.entity.Repository
import com.looker.droidify.databinding.FragmentExploreXBinding import com.looker.droidify.databinding.FragmentExploreXBinding
import com.looker.droidify.entity.Section import com.looker.droidify.entity.Section
import com.looker.droidify.ui.compose.ProductsVerticalRecycler import com.looker.droidify.ui.compose.ProductsVerticalRecycler
import com.looker.droidify.ui.compose.theme.AppTheme import com.looker.droidify.ui.compose.theme.AppTheme
import com.looker.droidify.ui.compose.utils.SelectableChipRow
import com.looker.droidify.utility.isDarkTheme import com.looker.droidify.utility.isDarkTheme
import com.looker.droidify.widget.FocusSearchView import com.looker.droidify.widget.FocusSearchView
@ -49,9 +56,10 @@ class ExploreFragment : MainNavFragmentX() {
repositories = it.associateBy { repo -> repo.id } repositories = it.associateBy { repo -> repo.id }
} }
viewModel.primaryProducts.observe(viewLifecycleOwner) { viewModel.primaryProducts.observe(viewLifecycleOwner) {
redrawPage(it) redrawPage(it, viewModel.categories.value ?: emptyList())
} }
viewModel.categories.observe(viewLifecycleOwner) { viewModel.categories.observe(viewLifecycleOwner) {
redrawPage(viewModel.primaryProducts.value, it)
} }
mainActivityX.menuSetup.observe(viewLifecycleOwner) { mainActivityX.menuSetup.observe(viewLifecycleOwner) {
if (it != null) { if (it != null) {
@ -74,6 +82,7 @@ class ExploreFragment : MainNavFragmentX() {
} }
} }
@OptIn(ExperimentalMaterialApi::class, ExperimentalMaterial3Api::class)
private fun redrawPage(products: List<Product>?, categories: List<String> = emptyList()) { private fun redrawPage(products: List<Product>?, categories: List<String> = emptyList()) {
binding.primaryComposeRecycler.setContent { binding.primaryComposeRecycler.setContent {
AppTheme( AppTheme(
@ -84,16 +93,39 @@ class ExploreFragment : MainNavFragmentX() {
} }
) { ) {
Scaffold { _ -> Scaffold { _ ->
ProductsVerticalRecycler(products, repositories, Column(
onUserClick = { item -> Modifier
AppSheetX(item.packageName) .background(MaterialTheme.colorScheme.background)
.showNow(parentFragmentManager, "Product ${item.packageName}") .fillMaxSize()
}, ) {
onFavouriteClick = {}, SelectableChipRow(
onInstallClick = { list = listOf(
mainActivityX.syncConnection.binder?.installApps(listOf(it)) stringResource(id = R.string.all_applications),
*categories.sorted().toTypedArray()
)
) {
viewModel.setSection(
when (it) {
getString(R.string.all_applications) -> Section.All
else -> Section.Category(it)
}
)
} }
) ProductsVerticalRecycler(products,
repositories,
Modifier
.fillMaxWidth()
.weight(1f),
onUserClick = { item ->
AppSheetX(item.packageName)
.showNow(parentFragmentManager, "Product ${item.packageName}")
},
onFavouriteClick = {},
onInstallClick = {
mainActivityX.syncConnection.binder?.installApps(listOf(it))
}
)
}
} }
} }
} }