Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fdf465c6 authored by Hasib Prince's avatar Hasib Prince
Browse files

App Lounge: disable update all button when update running

parent 454bace8
Loading
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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
                    }
                }
            }
@@ -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()
+31 −1
Original line number Diff line number Diff line
@@ -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()
@@ -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
    }
}