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

View File

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