From 5e676f257ff8dcf04647f770cdac4c0021928283 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Sun, 18 Sep 2022 16:13:51 +0200 Subject: [PATCH] Remove: Main Fragments --- .../machiav3lli/fdroid/entity/SubEntities.kt | 89 ++++++ .../fdroid/ui/fragments/ExploreFragment.kt | 161 ----------- .../fdroid/ui/fragments/InstalledFragment.kt | 253 ------------------ .../fdroid/ui/fragments/LatestFragment.kt | 187 ------------- .../fdroid/ui/fragments/MainNavFragmentX.kt | 120 --------- .../fdroid/ui/navigation/NavHost.kt | 2 +- .../viewmodels/MainNavFragmentViewModelX.kt | 4 +- src/main/res/layout/fragment.xml | 50 ---- 8 files changed, 92 insertions(+), 774 deletions(-) delete mode 100644 src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/ExploreFragment.kt delete mode 100644 src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/InstalledFragment.kt delete mode 100644 src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/LatestFragment.kt delete mode 100644 src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/MainNavFragmentX.kt delete mode 100644 src/main/res/layout/fragment.xml diff --git a/src/main/kotlin/com/machiav3lli/fdroid/entity/SubEntities.kt b/src/main/kotlin/com/machiav3lli/fdroid/entity/SubEntities.kt index 6347eb06..5f2c75fb 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/entity/SubEntities.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/entity/SubEntities.kt @@ -194,6 +194,95 @@ class DonateType(donate: Donate, context: Context) : LinkType( } ) +enum class Source(val sections: Boolean, val order: Boolean) { + AVAILABLE(true, true), + INSTALLED(false, true), + UPDATES(false, false), + UPDATED(false, true), + NEW(false, true) +} + +sealed class Request { + internal abstract val id: Int + internal abstract val installed: Boolean + internal abstract val updates: Boolean + internal abstract val searchQuery: String + internal abstract val section: Section + internal abstract val order: Order + internal abstract val updateCategory: UpdateCategory + internal open val numberOfItems: Int = 0 + + data class ProductsAll( + override val searchQuery: String, override val section: Section, + override val order: Order, + ) : Request() { + override val id: Int + get() = 1 + override val installed: Boolean + get() = false + override val updates: Boolean + get() = false + override val updateCategory: UpdateCategory + get() = UpdateCategory.ALL + } + + data class ProductsInstalled( + override val searchQuery: String, override val section: Section, + override val order: Order, + ) : Request() { + override val id: Int + get() = 2 + override val installed: Boolean + get() = true + override val updates: Boolean + get() = false + override val updateCategory: UpdateCategory + get() = UpdateCategory.ALL + } + + data class ProductsUpdates( + override val searchQuery: String, override val section: Section, + override val order: Order, + ) : Request() { + override val id: Int + get() = 3 + override val installed: Boolean + get() = true + override val updates: Boolean + get() = true + override val updateCategory: UpdateCategory + get() = UpdateCategory.ALL + } + + data class ProductsUpdated( + override val searchQuery: String, override val section: Section, + override val order: Order, override val numberOfItems: Int, + ) : Request() { + override val id: Int + get() = 4 + override val installed: Boolean + get() = false + override val updates: Boolean + get() = false + override val updateCategory: UpdateCategory + get() = UpdateCategory.UPDATED + } + + data class ProductsNew( + override val searchQuery: String, override val section: Section, + override val order: Order, override val numberOfItems: Int, + ) : Request() { + override val id: Int + get() = 5 + override val installed: Boolean + get() = false + override val updates: Boolean + get() = false + override val updateCategory: UpdateCategory + get() = UpdateCategory.NEW + } +} + class PermissionsType( val group: PermissionGroupInfo?, val permissions: List, diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/ExploreFragment.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/ExploreFragment.kt deleted file mode 100644 index 5cf6ab0e..00000000 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/ExploreFragment.kt +++ /dev/null @@ -1,161 +0,0 @@ -package com.machiav3lli.fdroid.ui.fragments - -import android.content.Intent -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.isSystemInDarkTheme -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Settings -import androidx.compose.material.icons.rounded.Sync -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.res.stringResource -import com.machiav3lli.fdroid.R -import com.machiav3lli.fdroid.content.Preferences -import com.machiav3lli.fdroid.database.entity.Repository -import com.machiav3lli.fdroid.entity.Section -import com.machiav3lli.fdroid.service.SyncService -import com.machiav3lli.fdroid.ui.activities.PrefsActivityX -import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler -import com.machiav3lli.fdroid.ui.compose.components.ExpandableSearchAction -import com.machiav3lli.fdroid.ui.compose.components.TopBar -import com.machiav3lli.fdroid.ui.compose.components.TopBarAction -import com.machiav3lli.fdroid.ui.compose.components.CategoryChipList -import com.machiav3lli.fdroid.ui.compose.theme.AppTheme -import com.machiav3lli.fdroid.utility.isDarkTheme -import com.machiav3lli.fdroid.utility.onLaunchClick - -class ExploreFragment : MainNavFragmentX() { - - override val primarySource = Source.AVAILABLE - override val secondarySource = Source.AVAILABLE - - private var repositories: Map = mapOf() - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View { - super.onCreate(savedInstanceState) - return ComposeView(requireContext()).apply { - setContent { ExplorePage() } - } - } - - override fun setupLayout() { - viewModel.repositories.observe(viewLifecycleOwner) { - repositories = it.associateBy { repo -> repo.id } - } - } - - @OptIn(ExperimentalMaterial3Api::class) - @Composable - private fun ExplorePage() { - val products by viewModel.primaryProducts.observeAsState(null) - val categories by viewModel.categories.observeAsState(emptyList()) - val installedList by viewModel.installed.observeAsState(null) - val searchQuery by viewModel.searchQuery.observeAsState("") - val favorites by mainActivityX.db.extrasDao.favoritesLive.observeAsState(emptyArray()) - - /*val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior( - rememberTopAppBarState() - ) { true }*/ - - AppTheme( - darkTheme = when (Preferences[Preferences.Key.Theme]) { - is Preferences.Theme.System -> isSystemInDarkTheme() - is Preferences.Theme.SystemBlack -> isSystemInDarkTheme() - else -> isDarkTheme - } - ) { - Scaffold( - // TODO add the topBar to the activity instead of the fragments - //modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - topBar = { - TopBar( - title = stringResource(id = R.string.application_name), - //scrollBehavior = scrollBehavior - ) { - ExpandableSearchAction( - query = searchQuery.orEmpty(), - onClose = { - viewModel.searchQuery.postValue("") - }, - onQueryChanged = { query -> - if (isResumed && query != searchQuery) - viewModel.searchQuery.postValue(query) - } - ) - TopBarAction(icon = Icons.Rounded.Sync) { - mainActivityX.syncConnection.binder?.sync(SyncService.SyncRequest.MANUAL) - } - TopBarAction(icon = Icons.Rounded.Settings) { - startActivity(Intent(context, PrefsActivityX::class.java)) - } - } - } - ) { padding -> - Column( - Modifier - .padding(padding) - .background(MaterialTheme.colorScheme.background) - .fillMaxSize() - ) { - CategoryChipList( - list = listOf( - stringResource(id = R.string.all_applications), - stringResource(id = R.string.favorite_applications), - *categories.sorted().toTypedArray() - ) - ) { - viewModel.sections.postValue( - when (it) { - getString(R.string.all_applications) -> Section.All - getString(R.string.favorite_applications) -> Section.FAVORITE - else -> Section.Category(it) - } - ) - } - ProductsVerticalRecycler( - productsList = products, - repositories = repositories, - favorites = favorites, - modifier = Modifier - .fillMaxWidth() - .weight(1f), - onUserClick = { item -> - mainActivityX.navigateProduct(item.packageName) - }, - onFavouriteClick = { item -> - viewModel.setFavorite( - item.packageName, - !favorites.contains(item.packageName) - ) - }, - getInstalled = { installedList?.get(it.packageName) } - ) { item -> - val installed = installedList?.get(item.packageName) - if (installed != null && installed.launcherActivities.isNotEmpty()) - requireContext().onLaunchClick(installed, childFragmentManager) - else - mainActivityX.syncConnection.binder?.installApps(listOf(item)) - } - } - } - } - } -} diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/InstalledFragment.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/InstalledFragment.kt deleted file mode 100644 index 51ca6de0..00000000 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/InstalledFragment.kt +++ /dev/null @@ -1,253 +0,0 @@ -package com.machiav3lli.fdroid.ui.fragments - -import android.content.Intent -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.foundation.background -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Settings -import androidx.compose.material.icons.rounded.Sync -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.ElevatedButton -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SuggestionChip -import androidx.compose.material3.SuggestionChipDefaults -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.ComposeView -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 -import com.machiav3lli.fdroid.R -import com.machiav3lli.fdroid.content.Preferences -import com.machiav3lli.fdroid.database.entity.Product -import com.machiav3lli.fdroid.database.entity.Repository -import com.machiav3lli.fdroid.service.SyncService -import com.machiav3lli.fdroid.ui.activities.PrefsActivityX -import com.machiav3lli.fdroid.ui.compose.ProductsHorizontalRecycler -import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler -import com.machiav3lli.fdroid.ui.compose.components.ExpandableSearchAction -import com.machiav3lli.fdroid.ui.compose.components.TopBar -import com.machiav3lli.fdroid.ui.compose.components.TopBarAction -import com.machiav3lli.fdroid.ui.compose.theme.AppTheme -import com.machiav3lli.fdroid.utility.isDarkTheme -import com.machiav3lli.fdroid.utility.onLaunchClick - -class InstalledFragment : MainNavFragmentX() { - - override val primarySource = Source.INSTALLED - override val secondarySource = Source.UPDATES - - private var repositories: Map = mapOf() - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View { - super.onCreate(savedInstanceState) - return ComposeView(requireContext()).apply { - setContent { InstalledPage() } - } - } - - override fun setupLayout() { - viewModel.repositories.observe(viewLifecycleOwner) { - repositories = it.associateBy { repo -> repo.id } - } - } - - @OptIn(ExperimentalMaterial3Api::class) - @Composable - private fun InstalledPage() { - val primaryList by viewModel.primaryProducts.observeAsState(null) - val secondaryList by viewModel.secondaryProducts.observeAsState(null) - val installedList by viewModel.installed.observeAsState(null) - val searchQuery by viewModel.searchQuery.observeAsState("") - val favorites by mainActivityX.db.extrasDao.favoritesLive.observeAsState(emptyArray()) - - /*val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior( - rememberTopAppBarState() - ) { true }*/ - - AppTheme( - darkTheme = when (Preferences[Preferences.Key.Theme]) { - is Preferences.Theme.System -> isSystemInDarkTheme() - is Preferences.Theme.SystemBlack -> isSystemInDarkTheme() - else -> isDarkTheme - } - ) { - Scaffold( - // TODO add the topBar to the activity instead of the fragments - //modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - topBar = { - TopBar( - title = stringResource(id = R.string.application_name), - //scrollBehavior = scrollBehavior - ) { - ExpandableSearchAction( - query = searchQuery.orEmpty(), - onClose = { - viewModel.searchQuery.postValue("") - }, - onQueryChanged = { query -> - if (isResumed && query != searchQuery) - viewModel.searchQuery.postValue(query) - } - ) - TopBarAction(icon = Icons.Rounded.Sync) { - mainActivityX.syncConnection.binder?.sync(SyncService.SyncRequest.MANUAL) - } - TopBarAction(icon = Icons.Rounded.Settings) { - startActivity(Intent(context, PrefsActivityX::class.java)) - } - } - } - ) { padding -> - var updatesVisible by remember(secondaryList) { mutableStateOf(true) } - - Column( - Modifier - .padding(padding) - .background(MaterialTheme.colorScheme.background) - .fillMaxSize() - ) { - AnimatedVisibility(visible = secondaryList.orEmpty().isNotEmpty()) { - Column { - Row( - modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - ElevatedButton( - colors = ButtonDefaults.elevatedButtonColors( - contentColor = MaterialTheme.colorScheme.primary - ), - onClick = { updatesVisible = !updatesVisible } - ) { - Text( - modifier = Modifier.padding(start = 4.dp), - text = stringResource(id = R.string.updates), - textAlign = TextAlign.Center, - style = MaterialTheme.typography.titleSmall - ) - Spacer(modifier = Modifier.width(8.dp)) - Icon( - modifier = Modifier.size(18.dp), - painter = painterResource(id = if (updatesVisible) R.drawable.ic_arrow_up else R.drawable.ic_arrow_down), - contentDescription = stringResource(id = R.string.updates) - ) - } - Spacer(modifier = Modifier.weight(1f)) - SuggestionChip( - shape = MaterialTheme.shapes.medium, - colors = SuggestionChipDefaults.suggestionChipColors( - containerColor = MaterialTheme.colorScheme.surface, - labelColor = MaterialTheme.colorScheme.onSurface, - ), - onClick = { - secondaryList?.let { - mainActivityX.syncConnection.binder?.updateApps( - it.map( - Product::toItem - ) - ) - } - }, - icon = { - Icon( - modifier = Modifier.size(18.dp), - painter = painterResource(id = R.drawable.ic_download), - contentDescription = stringResource(id = R.string.update_all) - ) - }, - label = { - Text(text = stringResource(id = R.string.update_all)) - } - ) - } - AnimatedVisibility(visible = updatesVisible) { - ProductsHorizontalRecycler(secondaryList, repositories) { item -> - mainActivityX.navigateProduct(item.packageName) - } - } - } - } - Row( - modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = stringResource(id = R.string.installed_applications), - modifier = Modifier.weight(1f), - ) - /*SuggestionChip( - shape = MaterialTheme.shapes.medium, - colors = SuggestionChipDefaults.suggestionChipColors( - containerColor = MaterialTheme.colorScheme.surface, - labelColor = MaterialTheme.colorScheme.onSurface, - ), - onClick = { }, // TODO add sort & filter - 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)) - } - )*/ - } - ProductsVerticalRecycler( - productsList = primaryList?.sortedBy { it.label.lowercase() }, - repositories = repositories, - favorites = favorites, - modifier = Modifier - .fillMaxWidth() - .weight(1f), - onUserClick = { item -> - mainActivityX.navigateProduct(item.packageName) - }, - onFavouriteClick = { item -> - viewModel.setFavorite( - item.packageName, - !favorites.contains(item.packageName) - ) - }, - getInstalled = { installedList?.get(it.packageName) } - ) { item -> - val installed = installedList?.get(item.packageName) - if (installed != null && installed.launcherActivities.isNotEmpty()) - requireContext().onLaunchClick(installed, childFragmentManager) - else - mainActivityX.syncConnection.binder?.installApps(listOf(item)) - } - } - } - } - } -} diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/LatestFragment.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/LatestFragment.kt deleted file mode 100644 index eba29691..00000000 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/LatestFragment.kt +++ /dev/null @@ -1,187 +0,0 @@ -package com.machiav3lli.fdroid.ui.fragments - -import android.content.Intent -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.isSystemInDarkTheme -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Settings -import androidx.compose.material.icons.rounded.Sync -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp -import com.machiav3lli.fdroid.R -import com.machiav3lli.fdroid.content.Preferences -import com.machiav3lli.fdroid.database.entity.Repository -import com.machiav3lli.fdroid.service.SyncService -import com.machiav3lli.fdroid.ui.activities.PrefsActivityX -import com.machiav3lli.fdroid.ui.compose.ProductsHorizontalRecycler -import com.machiav3lli.fdroid.ui.compose.components.ExpandableSearchAction -import com.machiav3lli.fdroid.ui.compose.components.ProductsListItem -import com.machiav3lli.fdroid.ui.compose.components.TopBar -import com.machiav3lli.fdroid.ui.compose.components.TopBarAction -import com.machiav3lli.fdroid.ui.compose.theme.AppTheme -import com.machiav3lli.fdroid.utility.isDarkTheme -import com.machiav3lli.fdroid.utility.onLaunchClick - -class LatestFragment : MainNavFragmentX() { - - override val primarySource = Source.UPDATED - override val secondarySource = Source.NEW - - private var repositories: Map = mapOf() - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View { - super.onCreate(savedInstanceState) - return ComposeView(requireContext()).apply { - setContent { LatestPage() } - } - } - - override fun setupLayout() { - viewModel.repositories.observe(viewLifecycleOwner) { - repositories = it.associateBy { repo -> repo.id } - } - } - - @OptIn(ExperimentalMaterial3Api::class) - @Composable - private fun LatestPage() { - val primaryList by viewModel.primaryProducts.observeAsState(null) - val secondaryList by viewModel.secondaryProducts.observeAsState(null) - val installedList by viewModel.installed.observeAsState(null) - val searchQuery by viewModel.searchQuery.observeAsState("") - val favorites by mainActivityX.db.extrasDao.favoritesLive.observeAsState(emptyArray()) - - /*val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior( - rememberTopAppBarState() - ) { true }*/ - - AppTheme( - darkTheme = when (Preferences[Preferences.Key.Theme]) { - is Preferences.Theme.System -> isSystemInDarkTheme() - is Preferences.Theme.SystemBlack -> isSystemInDarkTheme() - else -> isDarkTheme - } - ) { - Scaffold( - // TODO add the topBar to the activity instead of the fragments - //modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), - topBar = { - TopBar( - title = stringResource(id = R.string.application_name), - //scrollBehavior = scrollBehavior - ) { - ExpandableSearchAction( - query = searchQuery.orEmpty(), - onClose = { - viewModel.searchQuery.postValue("") - }, - onQueryChanged = { query -> - if (isResumed && query != searchQuery) - viewModel.searchQuery.postValue(query) - } - ) - TopBarAction(icon = Icons.Rounded.Sync) { - mainActivityX.syncConnection.binder?.sync(SyncService.SyncRequest.MANUAL) - } - TopBarAction(icon = Icons.Rounded.Settings) { - startActivity(Intent(context, PrefsActivityX::class.java)) - } - } - } - ) { padding -> - LazyColumn( - Modifier - .padding(padding) - .background(MaterialTheme.colorScheme.background) - .fillMaxSize(), - ) { - item { - Text( - text = stringResource(id = R.string.new_applications), - modifier = Modifier.padding(8.dp) - ) - ProductsHorizontalRecycler(secondaryList, repositories) { item -> - mainActivityX.navigateProduct(item.packageName) - } - } - item { - Row( - modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = stringResource(id = R.string.recently_updated), - modifier = Modifier.weight(1f), - ) - /*SuggestionChip( - shape = MaterialTheme.shapes.medium, - colors = SuggestionChipDefaults.suggestionChipColors( - containerColor = MaterialTheme.colorScheme.surface, - labelColor = MaterialTheme.colorScheme.onSurface, - ), - onClick = { }, // TODO add sort & filter - 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)) - } - )*/ - } - } - items( - items = primaryList?.map { it.toItem() } ?: emptyList(), - ) { item -> - ProductsListItem( - item = item, - repo = repositories[item.repositoryId], - isFavorite = favorites.contains(item.packageName), - onUserClick = { mainActivityX.navigateProduct(it.packageName) }, - onFavouriteClick = { - viewModel.setFavorite( - it.packageName, - !favorites.contains(it.packageName) - ) - }, - installed = installedList?.get(item.packageName), - onActionClick = { - val installed = installedList?.get(it.packageName) - if (installed != null && installed.launcherActivities.isNotEmpty()) - requireContext().onLaunchClick(installed, childFragmentManager) - else - mainActivityX.syncConnection.binder?.installApps(listOf(it)) - } - ) - } - } - } - } - } -} diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/MainNavFragmentX.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/MainNavFragmentX.kt deleted file mode 100644 index 8fa0d35b..00000000 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/fragments/MainNavFragmentX.kt +++ /dev/null @@ -1,120 +0,0 @@ -package com.machiav3lli.fdroid.ui.fragments - -import androidx.fragment.app.Fragment -import androidx.fragment.app.viewModels -import com.machiav3lli.fdroid.R -import com.machiav3lli.fdroid.entity.Order -import com.machiav3lli.fdroid.entity.Section -import com.machiav3lli.fdroid.entity.UpdateCategory -import com.machiav3lli.fdroid.ui.activities.MainActivityX -import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX - -abstract class MainNavFragmentX : BaseNavFragment() { - protected val mainActivityX: MainActivityX - get() = requireActivity() as MainActivityX - val viewModel: MainNavFragmentViewModelX by viewModels { - MainNavFragmentViewModelX.Factory(mainActivityX.db, primarySource, secondarySource) - } - abstract val primarySource: Source - abstract val secondarySource: Source - - open fun onBackPressed(): Boolean = false - - protected fun launchFragment(fragment: Fragment): Boolean { - requireActivity().supportFragmentManager - .beginTransaction() - .replace(R.id.fragment_content, fragment) - .addToBackStack(null) - .commit() - return true - } -} - -enum class Source(val sections: Boolean, val order: Boolean) { - AVAILABLE(true, true), - INSTALLED(false, true), - UPDATES(false, false), - UPDATED(false, true), - NEW(false, true) -} - -sealed class Request { - internal abstract val id: Int - internal abstract val installed: Boolean - internal abstract val updates: Boolean - internal abstract val searchQuery: String - internal abstract val section: Section - internal abstract val order: Order - internal abstract val updateCategory: UpdateCategory - internal open val numberOfItems: Int = 0 - - data class ProductsAll( - override val searchQuery: String, override val section: Section, - override val order: Order, - ) : Request() { - override val id: Int - get() = 1 - override val installed: Boolean - get() = false - override val updates: Boolean - get() = false - override val updateCategory: UpdateCategory - get() = UpdateCategory.ALL - } - - data class ProductsInstalled( - override val searchQuery: String, override val section: Section, - override val order: Order, - ) : Request() { - override val id: Int - get() = 2 - override val installed: Boolean - get() = true - override val updates: Boolean - get() = false - override val updateCategory: UpdateCategory - get() = UpdateCategory.ALL - } - - data class ProductsUpdates( - override val searchQuery: String, override val section: Section, - override val order: Order, - ) : Request() { - override val id: Int - get() = 3 - override val installed: Boolean - get() = true - override val updates: Boolean - get() = true - override val updateCategory: UpdateCategory - get() = UpdateCategory.ALL - } - - data class ProductsUpdated( - override val searchQuery: String, override val section: Section, - override val order: Order, override val numberOfItems: Int, - ) : Request() { - override val id: Int - get() = 4 - override val installed: Boolean - get() = false - override val updates: Boolean - get() = false - override val updateCategory: UpdateCategory - get() = UpdateCategory.UPDATED - } - - data class ProductsNew( - override val searchQuery: String, override val section: Section, - override val order: Order, override val numberOfItems: Int, - ) : Request() { - override val id: Int - get() = 5 - override val installed: Boolean - get() = false - override val updates: Boolean - get() = false - override val updateCategory: UpdateCategory - get() = UpdateCategory.NEW - } -} \ No newline at end of file diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/navigation/NavHost.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/navigation/NavHost.kt index 669048d7..f7d90099 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/navigation/NavHost.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/ui/navigation/NavHost.kt @@ -17,8 +17,8 @@ import com.google.accompanist.navigation.animation.AnimatedNavHost import com.google.accompanist.navigation.animation.composable import com.machiav3lli.fdroid.content.Preferences import com.machiav3lli.fdroid.database.DatabaseX +import com.machiav3lli.fdroid.entity.Source import com.machiav3lli.fdroid.ui.activities.PrefsActivityX -import com.machiav3lli.fdroid.ui.fragments.Source import com.machiav3lli.fdroid.ui.pages.ExplorePage import com.machiav3lli.fdroid.ui.pages.InstalledPage import com.machiav3lli.fdroid.ui.pages.LatestPage diff --git a/src/main/kotlin/com/machiav3lli/fdroid/ui/viewmodels/MainNavFragmentViewModelX.kt b/src/main/kotlin/com/machiav3lli/fdroid/ui/viewmodels/MainNavFragmentViewModelX.kt index 2522d8aa..d3915775 100644 --- a/src/main/kotlin/com/machiav3lli/fdroid/ui/viewmodels/MainNavFragmentViewModelX.kt +++ b/src/main/kotlin/com/machiav3lli/fdroid/ui/viewmodels/MainNavFragmentViewModelX.kt @@ -12,9 +12,9 @@ import com.machiav3lli.fdroid.database.entity.Installed import com.machiav3lli.fdroid.database.entity.Product import com.machiav3lli.fdroid.database.entity.Repository import com.machiav3lli.fdroid.entity.Order +import com.machiav3lli.fdroid.entity.Request import com.machiav3lli.fdroid.entity.Section -import com.machiav3lli.fdroid.ui.fragments.Request -import com.machiav3lli.fdroid.ui.fragments.Source +import com.machiav3lli.fdroid.entity.Source import com.machiav3lli.fdroid.utility.extension.ManageableLiveData import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch diff --git a/src/main/res/layout/fragment.xml b/src/main/res/layout/fragment.xml deleted file mode 100644 index cb7f4126..00000000 --- a/src/main/res/layout/fragment.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file