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

Commit 5dd075c5 authored by Hasib Prince's avatar Hasib Prince
Browse files

Update worker failure case is handled

parent be7b7aeb
Loading
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -241,7 +241,6 @@ class PkgManagerModule @Inject constructor(

    fun isGplay(packageName: String): Boolean {
        val installerPackageName = packageManager.getInstallerPackageName(packageName)
        Timber.d("===> installer package name for $packageName : $installerPackageName")
        return installerPackageName?.contains(FAKE_STORE_PACKAGE_NAME) == true
    }

+15 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.work.WorkInfo
import androidx.work.WorkManager
import com.aurora.gplayapi.data.models.AuthData
import dagger.hilt.android.AndroidEntryPoint
@@ -199,7 +200,20 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte
        showLoadingUI()
        updatesViewModel.getUpdates(authData)
        binding.button.setOnClickListener {
            UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext)
            val id = UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext)
            WorkManager.getInstance(requireContext())
                .getWorkInfosByTagLiveData(UpdatesWorkManager.UPDATES_WORK_NAME)
                .observe(viewLifecycleOwner) {
                    val errorStates =
                        listOf(
                            WorkInfo.State.FAILED,
                            WorkInfo.State.BLOCKED,
                            WorkInfo.State.CANCELLED
                        )
                    if (!it.isNullOrEmpty() && errorStates.contains(it.last().state)) {
                        binding.button.isEnabled = true
                    }
                }
            binding.button.isEnabled = false
        }
    }
+11 −7
Original line number Diff line number Diff line
@@ -29,13 +29,11 @@ import androidx.core.app.NotificationManagerCompat
import foundation.e.apps.MainActivity
import foundation.e.apps.R

class UpdatesNotifier {
    companion object {
object UpdatesNotifier {
    const val UPDATES_NOTIFICATION_CLICK_EXTRA = "updates_notification_click_extra"
    private const val UPDATES_NOTIFICATION_ID = 76
    private const val UPDATES_NOTIFICATION_CHANNEL_ID = "updates_notification"
    private const val UPDATES_NOTIFICATION_CHANNEL_TITLE = "App updates"
    }

    fun getNotification(
        context: Context,
@@ -133,4 +131,10 @@ class UpdatesNotifier {
            )
        }
    }

    fun cancelNotification(context: Context) {
        val notificationManager: NotificationManager =
            context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.cancel(UPDATES_NOTIFICATION_ID)
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -28,8 +28,8 @@ class UpdatesManagerRepository @Inject constructor(
    private val updatesManagerImpl: UpdatesManagerImpl
) {

    suspend fun getUpdates(authData: AuthData, isFromUpdateProcess: Boolean = false): Pair<List<FusedApp>, ResultStatus> {
        if (isFromUpdateProcess && MemoryDao.hasAnyAppsForUpdate()) {
    suspend fun getUpdates(authData: AuthData): Pair<List<FusedApp>, ResultStatus> {
        if (MemoryDao.hasAnyAppsForUpdate()) {
            return Pair(MemoryDao.appsAwaitingForUpdate, ResultStatus.OK)
        }
        return updatesManagerImpl.getUpdates(authData).run {
+6 −1
Original line number Diff line number Diff line
@@ -27,18 +27,21 @@ import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequest
import androidx.work.PeriodicWorkRequest
import androidx.work.WorkManager
import java.util.UUID
import java.util.concurrent.TimeUnit

object UpdatesWorkManager {
    const val UPDATES_WORK_NAME = "updates_work"
    private const val TAG = "UpdatesManager"

    fun startUpdateAllWork(context: Context) {
    fun startUpdateAllWork(context: Context): UUID {
        val oneTimeWorkRequest = buildOneTimeWorkRequest()
        WorkManager.getInstance(context).enqueueUniqueWork(
            UPDATES_WORK_NAME,
            ExistingWorkPolicy.REPLACE,
            buildOneTimeWorkRequest()
        )
        return oneTimeWorkRequest.id
    }

    private fun buildWorkerConstraints() = Constraints.Builder().apply {
@@ -53,12 +56,14 @@ object UpdatesWorkManager {
            TimeUnit.MINUTES
        ).apply {
            setConstraints(buildWorkerConstraints())
            addTag(TAG)
        }.build()
    }

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