Stash updates

This commit is contained in:
Rahul Patel
2024-06-29 05:49:34 +05:30
committed by Aayush Gupta
parent c16ae15540
commit a43779ed79
2 changed files with 24 additions and 12 deletions

View File

@@ -26,7 +26,7 @@ import android.os.Environment
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import com.aurora.Constants
@@ -61,7 +61,7 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
private var _binding: FragmentUpdatesBinding? = null
private val binding get() = _binding!!
private val viewModel: UpdatesViewModel by viewModels()
private val viewModel: UpdatesViewModel by activityViewModels()
private val startForStorageManagerResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
@@ -71,6 +71,7 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
toast(R.string.permissions_denied)
}
}
private val startForPermissions =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { perm ->
if (perm) viewModel.download(app) else toast(R.string.permissions_denied)
@@ -86,6 +87,7 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
R.id.menu_download_manager -> {
findNavController().navigate(R.id.downloadFragment)
}
R.id.menu_more -> {
findNavController().navigate(
MobileNavigationDirections.actionGlobalMoreDialogFragment()
@@ -140,11 +142,9 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
}
binding.swipeRefreshLayout.setOnRefreshListener {
viewModel.observe()
viewModel.observe(true)
}
updateController(null)
viewLifecycleOwner.lifecycleScope.launch {
AuroraApp.flowEvent.busEvent.collect { onEvent(it) }
}
@@ -158,7 +158,7 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
private fun onEvent(event: BusEvent) {
when (event) {
is BusEvent.InstallEvent, is BusEvent.UninstallEvent -> {
viewModel.observe()
viewModel.observe(true)
}
else -> {}

View File

@@ -32,12 +32,14 @@ import com.aurora.store.util.Preferences
import com.google.gson.Gson
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import java.util.Locale
import javax.inject.Inject
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import java.util.Locale
import javax.inject.Inject
@HiltViewModel
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
@@ -47,28 +49,38 @@ class UpdatesViewModel @Inject constructor(
private val downloadWorkerUtil: DownloadWorkerUtil,
private val authProvider: AuthProvider
) : ViewModel() {
private val TAG = UpdatesViewModel::class.java.simpleName
var updateAllEnqueued: Boolean = false
private val _updates = MutableSharedFlow<List<App>?>()
val updates = _updates.asSharedFlow()
private val _updates = MutableStateFlow<List<App>?>(null)
val updates = _updates.asStateFlow()
val stash: MutableList<App> = mutableListOf()
val downloadsList get() = downloadWorkerUtil.downloadsList
fun observe() {
fun observe(forceRefresh: Boolean = false) {
viewModelScope.launch(Dispatchers.IO) {
if (stash.isNotEmpty() && !forceRefresh) {
_updates.emit(stash)
}
try {
val isExtendedUpdateEnabled = Preferences.getBoolean(
context, Preferences.PREFERENCE_UPDATES_EXTENDED
)
val updates = AppUtil.getUpdatableApps(
context,
authProvider.authData,
gson,
!isExtendedUpdateEnabled
).sortedBy { it.displayName.lowercase(Locale.getDefault()) }
stash.clear()
stash.addAll(updates)
_updates.emit(updates)
} catch (exception: Exception) {
Log.d(TAG, "Failed to get updates", exception)