AppsGamesFragment: show only what is available on PlayStore
This commit is contained in:
@@ -26,12 +26,13 @@ import android.view.View
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.store.AuroraApp
|
||||
import com.aurora.store.data.event.InstallerEvent
|
||||
import com.aurora.store.data.model.MinimalApp
|
||||
import com.aurora.store.databinding.FragmentGenericWithSearchBinding
|
||||
import com.aurora.store.view.epoxy.views.HeaderViewModel_
|
||||
import com.aurora.store.view.epoxy.views.InstalledAppViewModel_
|
||||
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
|
||||
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
|
||||
import com.aurora.store.view.ui.commons.BaseFragment
|
||||
import com.aurora.store.viewmodel.all.InstalledViewModel
|
||||
@@ -47,7 +48,7 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
viewModel.packages.collect {
|
||||
viewModel.apps.collect {
|
||||
updateController(it)
|
||||
}
|
||||
}
|
||||
@@ -75,9 +76,9 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
|
||||
inputSearch.addTextChangedListener(object : TextWatcher {
|
||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||
if (s.isNullOrEmpty()) {
|
||||
updateController(viewModel.packages.value)
|
||||
updateController(viewModel.apps.value)
|
||||
} else {
|
||||
val filteredPackages = viewModel.packages.value?.filter {
|
||||
val filteredPackages = viewModel.apps.value?.filter {
|
||||
it.displayName.contains(s, true) || it.packageName.contains(s, true)
|
||||
}
|
||||
updateController(filteredPackages)
|
||||
@@ -96,7 +97,7 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateController(packages: List<MinimalApp>?) {
|
||||
private fun updateController(packages: List<App>?) {
|
||||
binding.recycler.withModels {
|
||||
setFilterDuplicates(true)
|
||||
if (packages == null) {
|
||||
@@ -114,17 +115,21 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
|
||||
)
|
||||
packages.forEach { app ->
|
||||
add(
|
||||
InstalledAppViewModel_()
|
||||
AppListViewModel_()
|
||||
.id(app.packageName.hashCode())
|
||||
.packageInfo(app)
|
||||
.app(app)
|
||||
.click { _ ->
|
||||
openDetailsFragment(
|
||||
app.packageName,
|
||||
MinimalApp.toApp(app)
|
||||
app
|
||||
)
|
||||
}
|
||||
.longClick { _ ->
|
||||
openAppMenuSheet(app)
|
||||
openAppMenuSheet(
|
||||
MinimalApp.fromApp(
|
||||
app
|
||||
)
|
||||
)
|
||||
false
|
||||
}
|
||||
)
|
||||
@@ -132,5 +137,4 @@ class AppsGamesFragment : BaseFragment<FragmentGenericWithSearchBinding>() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -20,11 +20,11 @@
|
||||
package com.aurora.store.viewmodel.all
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageInfo
|
||||
import android.util.Log
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.aurora.store.data.model.MinimalApp
|
||||
import com.aurora.gplayapi.data.models.App
|
||||
import com.aurora.gplayapi.helpers.web.WebAppDetailsHelper
|
||||
import com.aurora.store.util.PackageUtil
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
@@ -41,8 +41,8 @@ class InstalledViewModel @Inject constructor(
|
||||
|
||||
private val TAG = InstalledViewModel::class.java.simpleName
|
||||
|
||||
private val _packages = MutableStateFlow<List<MinimalApp>?>(null)
|
||||
val packages = _packages.asStateFlow()
|
||||
private val _apps = MutableStateFlow<List<App>?>(null)
|
||||
val apps = _apps.asStateFlow()
|
||||
|
||||
init {
|
||||
fetchApps()
|
||||
@@ -51,8 +51,16 @@ class InstalledViewModel @Inject constructor(
|
||||
fun fetchApps() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
try {
|
||||
_packages.value = PackageUtil.getAllValidPackages(context)
|
||||
.map { MinimalApp.fromPackageInfo(context, it) }
|
||||
val packages = PackageUtil.getAllValidPackages(context)
|
||||
|
||||
// Divide the list of packages into chunks of 100 & fetch app details
|
||||
// 50 is a safe number to avoid hitting the rate limit or package size limit
|
||||
val chunkedPackages = packages.chunked(50)
|
||||
val allApps = chunkedPackages.flatMap { chunk ->
|
||||
WebAppDetailsHelper().getAppDetails(chunk.map { it.packageName })
|
||||
}
|
||||
|
||||
_apps.emit(allApps)
|
||||
} catch (exception: Exception) {
|
||||
Log.e(TAG, "Failed to fetch apps", exception)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user