mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Add: Explore Page
This commit is contained in:
parent
608eb9c4c0
commit
0e0261b6c7
@ -0,0 +1,94 @@
|
||||
package com.machiav3lli.fdroid.ui.pages
|
||||
|
||||
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.material3.MaterialTheme
|
||||
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.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import com.machiav3lli.fdroid.R
|
||||
import com.machiav3lli.fdroid.content.Preferences
|
||||
import com.machiav3lli.fdroid.entity.Section
|
||||
import com.machiav3lli.fdroid.ui.activities.MainActivityX
|
||||
import com.machiav3lli.fdroid.ui.compose.ProductsVerticalRecycler
|
||||
import com.machiav3lli.fdroid.ui.compose.pages.home.components.CategoryChipList
|
||||
import com.machiav3lli.fdroid.ui.compose.theme.AppTheme
|
||||
import com.machiav3lli.fdroid.ui.viewmodels.MainNavFragmentViewModelX
|
||||
import com.machiav3lli.fdroid.utility.isDarkTheme
|
||||
import com.machiav3lli.fdroid.utility.onLaunchClick
|
||||
|
||||
@Composable
|
||||
fun ExplorePage(viewModel: MainNavFragmentViewModelX) {
|
||||
val context = LocalContext.current
|
||||
val mainActivityX = context as MainActivityX
|
||||
val products by viewModel.primaryProducts.observeAsState(null)
|
||||
val categories by viewModel.categories.observeAsState(emptyList())
|
||||
val installedList by viewModel.installed.observeAsState(null)
|
||||
val repositories by viewModel.repositories.observeAsState(null)
|
||||
val repositoriesMap by remember(repositories) {
|
||||
mutableStateOf(repositories?.associateBy { repo -> repo.id } ?: emptyMap())
|
||||
}
|
||||
val favorites by mainActivityX.db.extrasDao.favoritesLive.observeAsState(emptyArray())
|
||||
|
||||
AppTheme(
|
||||
darkTheme = when (Preferences[Preferences.Key.Theme]) {
|
||||
is Preferences.Theme.System -> isSystemInDarkTheme()
|
||||
is Preferences.Theme.AmoledSystem -> isSystemInDarkTheme()
|
||||
else -> isDarkTheme
|
||||
}
|
||||
) {
|
||||
Column(
|
||||
Modifier
|
||||
.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) {
|
||||
context.getString(R.string.all_applications) -> Section.All
|
||||
context.getString(R.string.favorite_applications) -> Section.FAVORITE
|
||||
else -> Section.Category(it)
|
||||
}
|
||||
)
|
||||
}
|
||||
ProductsVerticalRecycler(
|
||||
productsList = products,
|
||||
repositories = repositoriesMap,
|
||||
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())
|
||||
context.onLaunchClick(installed, mainActivityX.supportFragmentManager)
|
||||
else
|
||||
mainActivityX.syncConnection.binder?.installApps(listOf(item))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user