Stash updates
This commit is contained in:
committed by
Aayush Gupta
parent
c16ae15540
commit
a43779ed79
@@ -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 -> {}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user