Loading app/src/main/java/foundation/e/apps/updates/UpdatesFragment.kt +14 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package foundation.e.apps.updates import android.os.Bundle import android.util.Log import android.view.View import android.widget.ImageView import androidx.fragment.app.Fragment Loading @@ -28,6 +29,7 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.work.WorkManager import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.AppInfoFetchViewModel import foundation.e.apps.AppProgressViewModel Loading @@ -41,6 +43,7 @@ import foundation.e.apps.applicationlist.model.ApplicationListRVAdapter import foundation.e.apps.databinding.FragmentUpdatesBinding import foundation.e.apps.manager.download.data.DownloadProgress import foundation.e.apps.manager.pkg.PkgManagerModule import foundation.e.apps.manager.workmanager.InstallWorkManager.INSTALL_WORK_NAME import foundation.e.apps.updates.manager.UpdatesWorkManager import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.enums.User Loading Loading @@ -80,6 +83,7 @@ class UpdatesFragment : Fragment(R.layout.fragment_updates), FusedAPIInterface { updatesViewModel.getUpdates(data) binding.button.setOnClickListener { UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) binding.button.isEnabled = false } } } Loading Loading @@ -140,9 +144,19 @@ class UpdatesFragment : Fragment(R.layout.fragment_updates), FusedAPIInterface { binding.noUpdates.visibility = View.VISIBLE binding.button.isEnabled = false } WorkManager.getInstance(requireContext()) .getWorkInfosForUniqueWorkLiveData(INSTALL_WORK_NAME).observe(viewLifecycleOwner) { lifecycleScope.launchWhenResumed { binding.button.isEnabled = !updatesViewModel.checkWorkInfoListHasAnyUpdatableWork(it) } } } } private fun observeDownloadList() { mainActivityViewModel.downloadList.observe(viewLifecycleOwner) { list -> val appList = updatesViewModel.updatesList.value?.toMutableList() Loading app/src/main/java/foundation/e/apps/updates/UpdatesViewModel.kt +31 −1 Original line number Diff line number Diff line Loading @@ -18,19 +18,24 @@ package foundation.e.apps.updates import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.work.WorkInfo import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.api.fused.FusedAPIRepository import foundation.e.apps.api.fused.data.FusedApp import foundation.e.apps.updates.manager.UpdatesManagerRepository import foundation.e.apps.utils.enums.Status import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class UpdatesViewModel @Inject constructor( private val updatesManagerRepository: UpdatesManagerRepository private val updatesManagerRepository: UpdatesManagerRepository, private val fusedAPIRepository: FusedAPIRepository ) : ViewModel() { val updatesList: MutableLiveData<List<FusedApp>> = MutableLiveData() Loading @@ -43,4 +48,29 @@ class UpdatesViewModel @Inject constructor( ) } } suspend fun checkWorkInfoListHasAnyUpdatableWork(workInfoList: List<WorkInfo>): Boolean { workInfoList.forEach { workInfo -> if (listOf( WorkInfo.State.ENQUEUED, WorkInfo.State.RUNNING ).contains(workInfo.state) && checkWorkIsForUpdateByTag(workInfo.tags.toList()) ) { return true } } return false } private fun checkWorkIsForUpdateByTag(tags: List<String>): Boolean { updatesList.value?.let { it.find { fusedApp -> tags.contains(fusedApp._id) }?.let { foundApp -> return listOf( Status.INSTALLED, Status.UPDATABLE ).contains(fusedAPIRepository.getFusedAppInstallationStatus(foundApp)) } } return false } } Loading
app/src/main/java/foundation/e/apps/updates/UpdatesFragment.kt +14 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package foundation.e.apps.updates import android.os.Bundle import android.util.Log import android.view.View import android.widget.ImageView import androidx.fragment.app.Fragment Loading @@ -28,6 +29,7 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.work.WorkManager import dagger.hilt.android.AndroidEntryPoint import foundation.e.apps.AppInfoFetchViewModel import foundation.e.apps.AppProgressViewModel Loading @@ -41,6 +43,7 @@ import foundation.e.apps.applicationlist.model.ApplicationListRVAdapter import foundation.e.apps.databinding.FragmentUpdatesBinding import foundation.e.apps.manager.download.data.DownloadProgress import foundation.e.apps.manager.pkg.PkgManagerModule import foundation.e.apps.manager.workmanager.InstallWorkManager.INSTALL_WORK_NAME import foundation.e.apps.updates.manager.UpdatesWorkManager import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.enums.User Loading Loading @@ -80,6 +83,7 @@ class UpdatesFragment : Fragment(R.layout.fragment_updates), FusedAPIInterface { updatesViewModel.getUpdates(data) binding.button.setOnClickListener { UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) binding.button.isEnabled = false } } } Loading Loading @@ -140,9 +144,19 @@ class UpdatesFragment : Fragment(R.layout.fragment_updates), FusedAPIInterface { binding.noUpdates.visibility = View.VISIBLE binding.button.isEnabled = false } WorkManager.getInstance(requireContext()) .getWorkInfosForUniqueWorkLiveData(INSTALL_WORK_NAME).observe(viewLifecycleOwner) { lifecycleScope.launchWhenResumed { binding.button.isEnabled = !updatesViewModel.checkWorkInfoListHasAnyUpdatableWork(it) } } } } private fun observeDownloadList() { mainActivityViewModel.downloadList.observe(viewLifecycleOwner) { list -> val appList = updatesViewModel.updatesList.value?.toMutableList() Loading
app/src/main/java/foundation/e/apps/updates/UpdatesViewModel.kt +31 −1 Original line number Diff line number Diff line Loading @@ -18,19 +18,24 @@ package foundation.e.apps.updates import android.util.Log import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.work.WorkInfo import com.aurora.gplayapi.data.models.AuthData import dagger.hilt.android.lifecycle.HiltViewModel import foundation.e.apps.api.fused.FusedAPIRepository import foundation.e.apps.api.fused.data.FusedApp import foundation.e.apps.updates.manager.UpdatesManagerRepository import foundation.e.apps.utils.enums.Status import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class UpdatesViewModel @Inject constructor( private val updatesManagerRepository: UpdatesManagerRepository private val updatesManagerRepository: UpdatesManagerRepository, private val fusedAPIRepository: FusedAPIRepository ) : ViewModel() { val updatesList: MutableLiveData<List<FusedApp>> = MutableLiveData() Loading @@ -43,4 +48,29 @@ class UpdatesViewModel @Inject constructor( ) } } suspend fun checkWorkInfoListHasAnyUpdatableWork(workInfoList: List<WorkInfo>): Boolean { workInfoList.forEach { workInfo -> if (listOf( WorkInfo.State.ENQUEUED, WorkInfo.State.RUNNING ).contains(workInfo.state) && checkWorkIsForUpdateByTag(workInfo.tags.toList()) ) { return true } } return false } private fun checkWorkIsForUpdateByTag(tags: List<String>): Boolean { updatesList.value?.let { it.find { fusedApp -> tags.contains(fusedApp._id) }?.let { foundApp -> return listOf( Status.INSTALLED, Status.UPDATABLE ).contains(fusedAPIRepository.getFusedAppInstallationStatus(foundApp)) } } return false } }