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

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

fixed: auto update for settings of disable auto install

parent 3a8175d4
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.WorkInfo
import androidx.work.WorkManager
import dagger.hilt.android.AndroidEntryPoint
@@ -284,11 +283,7 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte
    private fun initUpdataAllButton() {
        binding.button.setOnClickListener {
            val interval = updatesViewModel.getUpdateInterval()
            UpdatesWorkManager.enqueueWork(
                requireContext(),
                interval,
                ExistingPeriodicWorkPolicy.REPLACE
            )
            UpdatesWorkManager.startUpdateAllWork(requireContext())
            observeUpdateWork()
            binding.button.isEnabled = false
        }
+21 −0
Original line number Diff line number Diff line
@@ -20,15 +20,36 @@ package foundation.e.apps.updates.manager
import android.content.Context
import android.util.Log
import androidx.work.Constraints
import androidx.work.Data
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.ExistingWorkPolicy
import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequest
import androidx.work.PeriodicWorkRequest
import androidx.work.WorkManager
import java.util.concurrent.TimeUnit

object UpdatesWorkManager {
    private const val UPDATES_WORK_NAME = "updates_work"
    private const val UPDATES_WORK_USER_NAME = "updates_work_user"
    const val TAG = "UpdatesWorkTag"
    const val USER_TAG = "UpdatesWorkUserTag"

    fun startUpdateAllWork(context: Context) {
        WorkManager.getInstance(context).enqueueUniqueWork(
            UPDATES_WORK_USER_NAME,
            ExistingWorkPolicy.REPLACE,
            buildOneTimeWorkRequest()
        )
    }

    private fun buildOneTimeWorkRequest(): OneTimeWorkRequest {
        return OneTimeWorkRequest.Builder(UpdatesWorker::class.java).apply {
            setConstraints(buildWorkerConstraints())
            addTag(USER_TAG)
        }.setInputData(Data.Builder().putBoolean(UpdatesWorker.IS_AUTO_UPDATE, false).build())
            .build()
    }

    private fun buildWorkerConstraints() = Constraints.Builder().apply {
        setRequiresBatteryNotLow(true)
+20 −0
Original line number Diff line number Diff line
@@ -11,7 +11,10 @@ import android.util.Base64
import androidx.hilt.work.HiltWorker
import androidx.preference.PreferenceManager
import androidx.work.CoroutineWorker
import androidx.work.WorkInfo
import androidx.work.WorkManager
import androidx.work.WorkerParameters
import androidx.work.await
import com.aurora.gplayapi.data.models.AuthData
import com.google.gson.Gson
import dagger.assisted.Assisted
@@ -64,6 +67,10 @@ class UpdatesWorker @AssistedInject constructor(
    override suspend fun doWork(): Result {
        return try {
            isAutoUpdate = params.inputData.getBoolean(IS_AUTO_UPDATE, true)
            if (isAutoUpdate && checkManualUpdateRunning()) {
                return Result.success()
            }

            checkForUpdates()
            Result.success()
        } catch (e: Throwable) {
@@ -76,6 +83,19 @@ class UpdatesWorker @AssistedInject constructor(
        }
    }

    private suspend fun checkManualUpdateRunning(): Boolean {
        val workInfos =
            WorkManager.getInstance(context).getWorkInfosByTag(UpdatesWorkManager.USER_TAG).await()
        if (workInfos.isNotEmpty()) {
            val workInfo = workInfos[0]
            Timber.d("Manual update status: workInfo.state=${workInfo.state}, id=${workInfo.id}")
            if (workInfo.state == WorkInfo.State.BLOCKED || workInfo.state == WorkInfo.State.ENQUEUED || workInfo.state == WorkInfo.State.RUNNING) {
                return true
            }
        }
        return false
    }

    private fun getUser(): User {
        return dataStoreManager.getUserType()
    }