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 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 -> {}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user