Add: SortFilter launcher button to main Pages

This commit is contained in:
machiav3lli 2022-09-24 06:08:31 +02:00
parent dd87e0dbe7
commit f435b8c65b
3 changed files with 48 additions and 7 deletions

View File

@ -8,15 +8,20 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SuggestionChip import androidx.compose.material3.SuggestionChip
import androidx.compose.material3.SuggestionChipDefaults import androidx.compose.material3.SuggestionChipDefaults
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@ -30,6 +35,7 @@ import com.machiav3lli.fdroid.ui.activities.MainActivityX
import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler
import com.machiav3lli.fdroid.ui.compose.components.CategoryChip import com.machiav3lli.fdroid.ui.compose.components.CategoryChip
import com.machiav3lli.fdroid.ui.compose.theme.AppTheme import com.machiav3lli.fdroid.ui.compose.theme.AppTheme
import com.machiav3lli.fdroid.ui.navigation.NavItem
import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX
import com.machiav3lli.fdroid.utility.isDarkTheme import com.machiav3lli.fdroid.utility.isDarkTheme
import com.machiav3lli.fdroid.utility.onLaunchClick import com.machiav3lli.fdroid.utility.onLaunchClick
@ -37,6 +43,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun ExplorePage(viewModel: MainNavFragmentViewModelX) { fun ExplorePage(viewModel: MainNavFragmentViewModelX) {
val context = LocalContext.current val context = LocalContext.current
@ -78,6 +85,27 @@ fun ExplorePage(viewModel: MainNavFragmentViewModelX) {
var favoriteFilter by remember { var favoriteFilter by remember {
mutableStateOf(false) mutableStateOf(false)
} }
SuggestionChip(
shape = MaterialTheme.shapes.medium,
colors = SuggestionChipDefaults.suggestionChipColors(
containerColor = MaterialTheme.colorScheme.surface,
labelColor = MaterialTheme.colorScheme.onSurface,
),
onClick = {
mainActivityX.navigateSortFilter(NavItem.Explore)
},
icon = {
Icon(
modifier = Modifier.size(18.dp),
painter = painterResource(id = R.drawable.ic_sort),
contentDescription = stringResource(id = R.string.sort_filter)
)
},
label = {
Text(text = stringResource(id = R.string.sort_filter))
}
)
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
CategoryChip( CategoryChip(
category = stringResource(id = R.string.favorite_applications), category = stringResource(id = R.string.favorite_applications),

View File

@ -40,6 +40,7 @@ import com.machiav3lli.fdroid.ui.activities.MainActivityX
import com.machiav3lli.fdroid.ui.compose.ProductsHorizontalRecycler import com.machiav3lli.fdroid.ui.compose.ProductsHorizontalRecycler
import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler
import com.machiav3lli.fdroid.ui.compose.theme.AppTheme import com.machiav3lli.fdroid.ui.compose.theme.AppTheme
import com.machiav3lli.fdroid.ui.navigation.NavItem
import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX
import com.machiav3lli.fdroid.utility.isDarkTheme import com.machiav3lli.fdroid.utility.isDarkTheme
import com.machiav3lli.fdroid.utility.onLaunchClick import com.machiav3lli.fdroid.utility.onLaunchClick
@ -152,13 +153,15 @@ fun InstalledPage(viewModel: MainNavFragmentViewModelX) {
text = stringResource(id = R.string.installed_applications), text = stringResource(id = R.string.installed_applications),
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
/*SuggestionChip( SuggestionChip(
shape = MaterialTheme.shapes.medium, shape = MaterialTheme.shapes.medium,
colors = SuggestionChipDefaults.suggestionChipColors( colors = SuggestionChipDefaults.suggestionChipColors(
containerColor = MaterialTheme.colorScheme.surface, containerColor = MaterialTheme.colorScheme.surface,
labelColor = MaterialTheme.colorScheme.onSurface, labelColor = MaterialTheme.colorScheme.onSurface,
), ),
onClick = { }, // TODO add sort & filter onClick = {
mainActivityX.navigateSortFilter(NavItem.Installed)
},
icon = { icon = {
Icon( Icon(
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@ -169,7 +172,7 @@ fun InstalledPage(viewModel: MainNavFragmentViewModelX) {
label = { label = {
Text(text = stringResource(id = R.string.sort_filter)) Text(text = stringResource(id = R.string.sort_filter))
} }
)*/ )
} }
ProductsVerticalRecycler( ProductsVerticalRecycler(
productsList = primaryList?.sortedBy { it.label.lowercase() }, productsList = primaryList?.sortedBy { it.label.lowercase() },

View File

@ -1,13 +1,18 @@
package com.machiav3lli.fdroid.ui.pages package com.machiav3lli.fdroid.ui.pages
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SuggestionChip
import androidx.compose.material3.SuggestionChipDefaults
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect import androidx.compose.runtime.SideEffect
@ -18,6 +23,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.machiav3lli.fdroid.R import com.machiav3lli.fdroid.R
@ -26,6 +32,7 @@ import com.machiav3lli.fdroid.ui.activities.MainActivityX
import com.machiav3lli.fdroid.ui.compose.ProductsHorizontalRecycler import com.machiav3lli.fdroid.ui.compose.ProductsHorizontalRecycler
import com.machiav3lli.fdroid.ui.compose.components.ProductsListItem import com.machiav3lli.fdroid.ui.compose.components.ProductsListItem
import com.machiav3lli.fdroid.ui.compose.theme.AppTheme import com.machiav3lli.fdroid.ui.compose.theme.AppTheme
import com.machiav3lli.fdroid.ui.navigation.NavItem
import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX
import com.machiav3lli.fdroid.utility.isDarkTheme import com.machiav3lli.fdroid.utility.isDarkTheme
import com.machiav3lli.fdroid.utility.onLaunchClick import com.machiav3lli.fdroid.utility.onLaunchClick
@ -33,6 +40,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun LatestPage(viewModel: MainNavFragmentViewModelX) { fun LatestPage(viewModel: MainNavFragmentViewModelX) {
val context = LocalContext.current val context = LocalContext.current
@ -86,13 +94,15 @@ fun LatestPage(viewModel: MainNavFragmentViewModelX) {
text = stringResource(id = R.string.recently_updated), text = stringResource(id = R.string.recently_updated),
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
) )
/*SuggestionChip( SuggestionChip(
shape = MaterialTheme.shapes.medium, shape = MaterialTheme.shapes.medium,
colors = SuggestionChipDefaults.suggestionChipColors( colors = SuggestionChipDefaults.suggestionChipColors(
containerColor = MaterialTheme.colorScheme.surface, containerColor = MaterialTheme.colorScheme.surface,
labelColor = MaterialTheme.colorScheme.onSurface, labelColor = MaterialTheme.colorScheme.onSurface,
), ),
onClick = { }, // TODO add sort & filter onClick = {
mainActivityX.navigateSortFilter(NavItem.Latest)
},
icon = { icon = {
Icon( Icon(
modifier = Modifier.size(18.dp), modifier = Modifier.size(18.dp),
@ -103,7 +113,7 @@ fun LatestPage(viewModel: MainNavFragmentViewModelX) {
label = { label = {
Text(text = stringResource(id = R.string.sort_filter)) Text(text = stringResource(id = R.string.sort_filter))
} }
)*/ )
} }
} }
items( items(