mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Add: Favorite management logic to items
This commit is contained in:
parent
5bc860389a
commit
f022a29990
@ -69,6 +69,7 @@ class ExploreFragment : MainNavFragmentX() {
|
||||
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())
|
||||
|
||||
AppTheme(
|
||||
darkTheme = when (Preferences[Preferences.Key.Theme]) {
|
||||
@ -120,24 +121,29 @@ class ExploreFragment : MainNavFragmentX() {
|
||||
)
|
||||
}
|
||||
ProductsVerticalRecycler(
|
||||
products,
|
||||
repositories,
|
||||
Modifier
|
||||
productsList = products,
|
||||
repositories = repositories,
|
||||
favorites = favorites,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.weight(1f),
|
||||
onUserClick = { item ->
|
||||
mainActivityX.navigateProduct(item.packageName)
|
||||
},
|
||||
onFavouriteClick = {},
|
||||
getInstalled = { installedList?.get(it.packageName) },
|
||||
onActionClick = { item ->
|
||||
val installed = installedList?.get(item.packageName)
|
||||
if (installed != null && installed.launcherActivities.isNotEmpty())
|
||||
requireContext().onLaunchClick(installed, childFragmentManager)
|
||||
else
|
||||
mainActivityX.syncConnection.binder?.installApps(listOf(item))
|
||||
}
|
||||
)
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,13 +8,32 @@ import android.view.ViewGroup
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.layout.*
|
||||
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.*
|
||||
import androidx.compose.runtime.*
|
||||
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
|
||||
@ -68,6 +87,7 @@ class InstalledFragment : MainNavFragmentX() {
|
||||
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())
|
||||
|
||||
AppTheme(
|
||||
darkTheme = when (Preferences[Preferences.Key.Theme]) {
|
||||
@ -194,24 +214,30 @@ class InstalledFragment : MainNavFragmentX() {
|
||||
}
|
||||
)
|
||||
}
|
||||
ProductsVerticalRecycler(primaryList?.sortedBy(Product::label),
|
||||
repositories,
|
||||
ProductsVerticalRecycler(
|
||||
productsList = primaryList?.sortedBy(Product::label),
|
||||
repositories = repositories,
|
||||
favorites = favorites,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.weight(1f),
|
||||
onUserClick = { item ->
|
||||
mainActivityX.navigateProduct(item.packageName)
|
||||
},
|
||||
onFavouriteClick = {},
|
||||
getInstalled = { installedList?.get(it.packageName) },
|
||||
onActionClick = { item ->
|
||||
val installed = installedList?.get(item.packageName)
|
||||
if (installed != null && installed.launcherActivities.isNotEmpty())
|
||||
requireContext().onLaunchClick(installed, childFragmentManager)
|
||||
else
|
||||
mainActivityX.syncConnection.binder?.installApps(listOf(item))
|
||||
}
|
||||
)
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,11 +7,22 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.layout.Column
|
||||
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.size
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.rounded.Settings
|
||||
import androidx.compose.material.icons.rounded.Sync
|
||||
import androidx.compose.material3.*
|
||||
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
|
||||
@ -66,6 +77,7 @@ class LatestFragment : MainNavFragmentX() {
|
||||
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())
|
||||
|
||||
AppTheme(
|
||||
darkTheme = when (Preferences[Preferences.Key.Theme]) {
|
||||
@ -137,23 +149,30 @@ class LatestFragment : MainNavFragmentX() {
|
||||
}
|
||||
)
|
||||
}
|
||||
ProductsVerticalRecycler(primaryList, repositories,
|
||||
ProductsVerticalRecycler(
|
||||
productsList = primaryList,
|
||||
repositories = repositories,
|
||||
favorites = favorites,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.weight(1f),
|
||||
onUserClick = { item ->
|
||||
mainActivityX.navigateProduct(item.packageName)
|
||||
},
|
||||
onFavouriteClick = {},
|
||||
getInstalled = { installedList?.get(it.packageName) },
|
||||
onActionClick = { item ->
|
||||
val installed = installedList?.get(item.packageName)
|
||||
if (installed != null && installed.launcherActivities.isNotEmpty())
|
||||
requireContext().onLaunchClick(installed, childFragmentManager)
|
||||
else
|
||||
mainActivityX.syncConnection.binder?.installApps(listOf(item))
|
||||
}
|
||||
)
|
||||
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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -139,6 +139,22 @@ class AppViewModelX(val db: DatabaseX, val packageName: String) : ViewModel() {
|
||||
}
|
||||
}
|
||||
|
||||
fun setFavorite(packageName: String, setBoolean: Boolean) {
|
||||
viewModelScope.launch {
|
||||
saveFavorite(packageName, setBoolean)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun saveFavorite(packageName: String, setBoolean: Boolean) {
|
||||
withContext(Dispatchers.IO) {
|
||||
val oldValue = db.extrasDao[packageName]
|
||||
if (oldValue != null) db.extrasDao
|
||||
.insertReplace(oldValue.copy(favorite = setBoolean))
|
||||
else db.extrasDao
|
||||
.insertReplace(Extras(packageName, favorite = setBoolean))
|
||||
}
|
||||
}
|
||||
|
||||
class Factory(val db: DatabaseX, val packageName: String) : ViewModelProvider.Factory {
|
||||
@Suppress("unchecked_cast")
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
|
@ -7,6 +7,7 @@ import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.droidify.content.Preferences
|
||||
import com.looker.droidify.database.DatabaseX
|
||||
import com.looker.droidify.database.entity.Extras
|
||||
import com.looker.droidify.database.entity.Installed
|
||||
import com.looker.droidify.database.entity.Product
|
||||
import com.looker.droidify.database.entity.Repository
|
||||
@ -127,6 +128,25 @@ class MainNavFragmentViewModelX(
|
||||
}
|
||||
installed.postValue(it.associateBy { it.packageName })
|
||||
}
|
||||
/*if (secondaryRequest.updates) secondaryProducts.addSource(db.extrasDao.allLive) {
|
||||
secondaryProducts.value = secondaryProducts.value.filter { secondaryProducts.it.packageName) }
|
||||
}*/
|
||||
}
|
||||
|
||||
fun setFavorite(packageName: String, setBoolean: Boolean) {
|
||||
viewModelScope.launch {
|
||||
saveFavorite(packageName, setBoolean)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun saveFavorite(packageName: String, setBoolean: Boolean) {
|
||||
withContext(Dispatchers.IO) {
|
||||
val oldValue = db.extrasDao[packageName]
|
||||
if (oldValue != null) db.extrasDao
|
||||
.insertReplace(oldValue.copy(favorite = setBoolean))
|
||||
else db.extrasDao
|
||||
.insertReplace(Extras(packageName, favorite = setBoolean))
|
||||
}
|
||||
}
|
||||
|
||||
class Factory(
|
||||
|
Loading…
x
Reference in New Issue
Block a user