Loading app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt +1 −1 Original line number Diff line number Diff line Loading @@ -97,7 +97,7 @@ class SettingsFragment : PreferenceFragmentCompat() { UpdatesWorkManager.enqueueWork( it, newValue.toString().toLong(), ExistingPeriodicWorkPolicy.KEEP ExistingPeriodicWorkPolicy.REPLACE ) } true Loading app/src/main/java/foundation/e/apps/updates/UpdatesFragment.kt +13 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ 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 Loading Loading @@ -181,7 +182,9 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte ( workInfoList.isNullOrEmpty() || ( !updatesViewModel.checkWorkInfoListHasAnyUpdatableWork(workInfoList) && !updatesViewModel.checkWorkInfoListHasAnyUpdatableWork( workInfoList ) && updatesViewModel.hasAnyUpdatableApp() ) ) Loading Loading @@ -275,7 +278,12 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte true } binding.button.setOnClickListener { UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) val interval = updatesViewModel.getUpdateInterval() UpdatesWorkManager.enqueueWork( requireContext(), interval, ExistingPeriodicWorkPolicy.REPLACE ) observeUpdateWork() binding.button.isEnabled = false } Loading @@ -283,7 +291,7 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte private fun observeUpdateWork() { WorkManager.getInstance(requireContext()) .getWorkInfosByTagLiveData(UpdatesWorkManager.UPDATES_WORK_NAME) .getWorkInfosByTagLiveData(UpdatesWorkManager.TAG) .observe(viewLifecycleOwner) { binding.button.isEnabled = hasAnyPendingUpdates(it) } Loading Loading @@ -357,6 +365,8 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte } override fun onDestroyView() { mainActivityViewModel.downloadList.removeObservers(viewLifecycleOwner) isDownloadObserverAdded = false super.onDestroyView() _binding = null } Loading app/src/main/java/foundation/e/apps/updates/UpdatesViewModel.kt +5 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import foundation.e.apps.utils.enums.ResultStatus import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.exceptions.CleanApkException import foundation.e.apps.utils.exceptions.GPlayException import foundation.e.apps.utils.modules.PreferenceManagerModule import foundation.e.apps.utils.parentFragment.LoadingViewModel import kotlinx.coroutines.launch import javax.inject.Inject Loading @@ -38,7 +39,8 @@ import javax.inject.Inject @HiltViewModel class UpdatesViewModel @Inject constructor( private val updatesManagerRepository: UpdatesManagerRepository, private val fusedAPIRepository: FusedAPIRepository private val fusedAPIRepository: FusedAPIRepository, private val preferenceManagerModule: PreferenceManagerModule ) : LoadingViewModel() { val updatesList: MutableLiveData<Pair<List<FusedApp>, ResultStatus?>> = MutableLiveData() Loading Loading @@ -133,4 +135,6 @@ class UpdatesViewModel @Inject constructor( ) return updatesList.value?.first?.any { pendingStatesForUpdate.contains(it.status) } == true } fun getUpdateInterval() = preferenceManagerModule.getUpdateInterval() } app/src/main/java/foundation/e/apps/updates/manager/UpdatesBroadcastReceiver.kt +4 −9 Original line number Diff line number Diff line Loading @@ -20,9 +20,8 @@ package foundation.e.apps.updates.manager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import androidx.preference.PreferenceManager import androidx.work.ExistingPeriodicWorkPolicy import foundation.e.apps.R import foundation.e.apps.utils.modules.PreferenceManagerModule import timber.log.Timber class UpdatesBroadcastReceiver : BroadcastReceiver() { Loading @@ -33,13 +32,9 @@ class UpdatesBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Timber.d("onReceive: ${intent.action}") if (intent.action == Intent.ACTION_BOOT_COMPLETED) { val preferences = PreferenceManager.getDefaultSharedPreferences(context) val interval = preferences.getString( context.getString(R.string.update_check_intervals), context.getString(R.string.preference_update_interval_default) )!!.toLong() UpdatesWorkManager.enqueueWork(context, interval, ExistingPeriodicWorkPolicy.KEEP) val preferenceManagerModule = PreferenceManagerModule(context) val interval = preferenceManagerModule.getUpdateInterval() UpdatesWorkManager.enqueueWork(context, interval, ExistingPeriodicWorkPolicy.REPLACE) } } } app/src/main/java/foundation/e/apps/updates/manager/UpdatesWorkManager.kt +2 −24 Original line number Diff line number Diff line Loading @@ -20,29 +20,15 @@ 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.UUID import java.util.concurrent.TimeUnit object UpdatesWorkManager { const val UPDATES_WORK_NAME = "updates_work" private const val TAG = "UpdatesManager" fun startUpdateAllWork(context: Context): UUID { val oneTimeWorkRequest = buildOneTimeWorkRequest() WorkManager.getInstance(context).enqueueUniqueWork( UPDATES_WORK_NAME, ExistingWorkPolicy.REPLACE, buildOneTimeWorkRequest() ) return oneTimeWorkRequest.id } private const val UPDATES_WORK_NAME = "updates_work" const val TAG = "UpdatesWorkTag" private fun buildWorkerConstraints() = Constraints.Builder().apply { setRequiresBatteryNotLow(true) Loading @@ -60,14 +46,6 @@ object UpdatesWorkManager { }.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() } fun enqueueWork( context: Context, interval: Long, Loading Loading
app/src/main/java/foundation/e/apps/settings/SettingsFragment.kt +1 −1 Original line number Diff line number Diff line Loading @@ -97,7 +97,7 @@ class SettingsFragment : PreferenceFragmentCompat() { UpdatesWorkManager.enqueueWork( it, newValue.toString().toLong(), ExistingPeriodicWorkPolicy.KEEP ExistingPeriodicWorkPolicy.REPLACE ) } true Loading
app/src/main/java/foundation/e/apps/updates/UpdatesFragment.kt +13 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ 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 Loading Loading @@ -181,7 +182,9 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte ( workInfoList.isNullOrEmpty() || ( !updatesViewModel.checkWorkInfoListHasAnyUpdatableWork(workInfoList) && !updatesViewModel.checkWorkInfoListHasAnyUpdatableWork( workInfoList ) && updatesViewModel.hasAnyUpdatableApp() ) ) Loading Loading @@ -275,7 +278,12 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte true } binding.button.setOnClickListener { UpdatesWorkManager.startUpdateAllWork(requireContext().applicationContext) val interval = updatesViewModel.getUpdateInterval() UpdatesWorkManager.enqueueWork( requireContext(), interval, ExistingPeriodicWorkPolicy.REPLACE ) observeUpdateWork() binding.button.isEnabled = false } Loading @@ -283,7 +291,7 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte private fun observeUpdateWork() { WorkManager.getInstance(requireContext()) .getWorkInfosByTagLiveData(UpdatesWorkManager.UPDATES_WORK_NAME) .getWorkInfosByTagLiveData(UpdatesWorkManager.TAG) .observe(viewLifecycleOwner) { binding.button.isEnabled = hasAnyPendingUpdates(it) } Loading Loading @@ -357,6 +365,8 @@ class UpdatesFragment : TimeoutFragment(R.layout.fragment_updates), FusedAPIInte } override fun onDestroyView() { mainActivityViewModel.downloadList.removeObservers(viewLifecycleOwner) isDownloadObserverAdded = false super.onDestroyView() _binding = null } Loading
app/src/main/java/foundation/e/apps/updates/UpdatesViewModel.kt +5 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import foundation.e.apps.utils.enums.ResultStatus import foundation.e.apps.utils.enums.Status import foundation.e.apps.utils.exceptions.CleanApkException import foundation.e.apps.utils.exceptions.GPlayException import foundation.e.apps.utils.modules.PreferenceManagerModule import foundation.e.apps.utils.parentFragment.LoadingViewModel import kotlinx.coroutines.launch import javax.inject.Inject Loading @@ -38,7 +39,8 @@ import javax.inject.Inject @HiltViewModel class UpdatesViewModel @Inject constructor( private val updatesManagerRepository: UpdatesManagerRepository, private val fusedAPIRepository: FusedAPIRepository private val fusedAPIRepository: FusedAPIRepository, private val preferenceManagerModule: PreferenceManagerModule ) : LoadingViewModel() { val updatesList: MutableLiveData<Pair<List<FusedApp>, ResultStatus?>> = MutableLiveData() Loading Loading @@ -133,4 +135,6 @@ class UpdatesViewModel @Inject constructor( ) return updatesList.value?.first?.any { pendingStatesForUpdate.contains(it.status) } == true } fun getUpdateInterval() = preferenceManagerModule.getUpdateInterval() }
app/src/main/java/foundation/e/apps/updates/manager/UpdatesBroadcastReceiver.kt +4 −9 Original line number Diff line number Diff line Loading @@ -20,9 +20,8 @@ package foundation.e.apps.updates.manager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import androidx.preference.PreferenceManager import androidx.work.ExistingPeriodicWorkPolicy import foundation.e.apps.R import foundation.e.apps.utils.modules.PreferenceManagerModule import timber.log.Timber class UpdatesBroadcastReceiver : BroadcastReceiver() { Loading @@ -33,13 +32,9 @@ class UpdatesBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Timber.d("onReceive: ${intent.action}") if (intent.action == Intent.ACTION_BOOT_COMPLETED) { val preferences = PreferenceManager.getDefaultSharedPreferences(context) val interval = preferences.getString( context.getString(R.string.update_check_intervals), context.getString(R.string.preference_update_interval_default) )!!.toLong() UpdatesWorkManager.enqueueWork(context, interval, ExistingPeriodicWorkPolicy.KEEP) val preferenceManagerModule = PreferenceManagerModule(context) val interval = preferenceManagerModule.getUpdateInterval() UpdatesWorkManager.enqueueWork(context, interval, ExistingPeriodicWorkPolicy.REPLACE) } } }
app/src/main/java/foundation/e/apps/updates/manager/UpdatesWorkManager.kt +2 −24 Original line number Diff line number Diff line Loading @@ -20,29 +20,15 @@ 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.UUID import java.util.concurrent.TimeUnit object UpdatesWorkManager { const val UPDATES_WORK_NAME = "updates_work" private const val TAG = "UpdatesManager" fun startUpdateAllWork(context: Context): UUID { val oneTimeWorkRequest = buildOneTimeWorkRequest() WorkManager.getInstance(context).enqueueUniqueWork( UPDATES_WORK_NAME, ExistingWorkPolicy.REPLACE, buildOneTimeWorkRequest() ) return oneTimeWorkRequest.id } private const val UPDATES_WORK_NAME = "updates_work" const val TAG = "UpdatesWorkTag" private fun buildWorkerConstraints() = Constraints.Builder().apply { setRequiresBatteryNotLow(true) Loading @@ -60,14 +46,6 @@ object UpdatesWorkManager { }.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() } fun enqueueWork( context: Context, interval: Long, Loading