diff --git a/src/main/kotlin/com/machiav3lli/fdroid/Common.kt b/src/main/kotlin/com/machiav3lli/fdroid/Common.kt index 9b896102..97e2a21a 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/Common.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/Common.kt @@ -62,6 +62,7 @@ const val PREFS_LANGUAGE = "languages" const val PREFS_LANGUAGE_DEFAULT = "system" const val EXTRA_REPOSITORY_ID = "repositoryId" +const val EXTRA_PAGE_ROUTE = "pageRoute" const val HELP_SOURCECODE = "https://github.com/NeoApplications/Neo-Store" const val HELP_CHANGELOG = "https://github.com/NeoApplications/Neo-Store/blob/master/CHANGELOG.md" diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/SortFilterSheet.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/SortFilterSheet.kt index 2c0d79c1..842b1773 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/SortFilterSheet.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/SortFilterSheet.kt @@ -5,12 +5,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity +import androidx.compose.foundation.background import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme @@ -27,6 +30,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.rememberNestedScrollInteropConnection +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -37,6 +41,7 @@ import com.machiav3lli.fdroid.MainApplication import com.machiav3lli.fdroid.R import com.machiav3lli.fdroid.content.Preferences import com.machiav3lli.fdroid.index.RepositoryUpdater.db +import com.machiav3lli.fdroid.ui.compose.components.ActionButton import com.machiav3lli.fdroid.ui.compose.components.ChipsSwitch import com.machiav3lli.fdroid.ui.compose.components.SelectChip import com.machiav3lli.fdroid.ui.compose.theme.AppTheme @@ -111,7 +116,53 @@ class SortFilterSheet() : FullscreenBottomSheetDialogFragment() { else -> Preferences.Key.CategoriesFilterExplore // NavItem.Explore } - Scaffold() { paddingValues -> + var sortOption by remember(Preferences[sortKey]) { + mutableStateOf(Preferences[sortKey]) + } + var sortAscending by remember(Preferences[sortAscendingKey]) { + mutableStateOf(Preferences[sortAscendingKey]) + } + val filteredOutRepos by remember(Preferences[reposFilterKey]) { + mutableStateOf(Preferences[reposFilterKey].toMutableSet()) + } + val filteredOutCategories by remember(Preferences[categoriesFilterKey]) { + mutableStateOf(Preferences[categoriesFilterKey].toMutableSet()) + } + + Scaffold( + bottomBar = { + Row( + modifier = Modifier + .background(color = MaterialTheme.colorScheme.surface) + .fillMaxWidth() + .padding(12.dp) + .wrapContentHeight(), + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + ActionButton( + modifier = Modifier.weight(1f), + text = stringResource(id = R.string.action_reset), + icon = painterResource(id = R.drawable.ic_delete), + positive = false, + onClick = ::dismissAllowingStateLoss + ) + ActionButton( + text = stringResource(id = R.string.action_apply), + icon = painterResource(id = R.drawable.ic_check), + modifier = Modifier.weight(1f), + positive = true, + onClick = { + // TODO save prefs + Preferences[sortKey] = sortOption + Preferences[sortAscendingKey] = sortAscending + Preferences[reposFilterKey] = filteredOutRepos + Preferences[categoriesFilterKey] = filteredOutCategories + dismissAllowingStateLoss() + } + ) + } + } + ) { paddingValues -> LazyColumn( modifier = Modifier .padding(paddingValues) @@ -133,35 +184,25 @@ class SortFilterSheet() : FullscreenBottomSheetDialogFragment() { crossAxisSpacing = 4.dp, mainAxisAlignment = MainAxisAlignment.Center, ) { - var selected by remember { - mutableStateOf( - Preferences[sortKey] - ) - } sortKey.default.value.values.forEach { SelectChip( text = stringResource(id = it.order.titleResId), - checked = it == selected + checked = it == sortOption ) { - Preferences[sortKey] = it - selected = it + sortOption = it } } } - var ascending by remember { - mutableStateOf(Preferences[sortAscendingKey]) - } ChipsSwitch( firstTextId = R.string.sort_ascending, firstIconId = R.drawable.ic_arrow_up, secondTextId = R.string.sort_descending, secondIconId = R.drawable.ic_arrow_down, - firstSelected = ascending, + firstSelected = sortAscending, onCheckedChange = { checked -> - ascending = checked - Preferences[sortAscendingKey] = checked + sortAscending = checked } ) } @@ -181,8 +222,7 @@ class SortFilterSheet() : FullscreenBottomSheetDialogFragment() { activeRepos.forEach { var checked by remember { mutableStateOf( - !Preferences[reposFilterKey] - .contains(it.id.toString()) + !filteredOutRepos.contains(it.id.toString()) ) } @@ -192,13 +232,9 @@ class SortFilterSheet() : FullscreenBottomSheetDialogFragment() { ) { checked = !checked if (checked) - Preferences[reposFilterKey] = - Preferences[reposFilterKey] - .minus(it.id.toString()) + filteredOutRepos.remove(it.id.toString()) else - Preferences[reposFilterKey] = - Preferences[reposFilterKey] - .plus(it.id.toString()) + filteredOutRepos.add(it.id.toString()) } } } @@ -219,7 +255,7 @@ class SortFilterSheet() : FullscreenBottomSheetDialogFragment() { categories.sorted().forEach { var checked by remember { mutableStateOf( - !Preferences[categoriesFilterKey].contains(it) + !filteredOutCategories.contains(it) ) } @@ -229,13 +265,9 @@ class SortFilterSheet() : FullscreenBottomSheetDialogFragment() { ) { checked = !checked if (checked) - Preferences[categoriesFilterKey] = - Preferences[categoriesFilterKey] - .minus(it) + filteredOutCategories.remove(it) else - Preferences[categoriesFilterKey] = - Preferences[categoriesFilterKey] - .plus(it) + filteredOutCategories.add(it) } } } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index c76b634f..e5d0bc88 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -222,4 +222,6 @@ Categories Ascending Descending + Apply + Reset