From c36649fb546920c1ae5b44f8903463efaa03b553 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Tue, 30 Jun 2020 12:11:16 -0500 Subject: [PATCH] Use coroutines in preference fragments --- .../org/tasks/preferences/fragments/Debug.kt | 2 +- .../injection/InjectingPreferenceFragment.kt | 8 +++- .../org/tasks/injection/ProductionModule.kt | 8 ++-- .../main/java/org/tasks/jobs/WorkManager.kt | 2 +- .../java/org/tasks/jobs/WorkManagerImpl.kt | 30 ++++++------- .../tasks/preferences/fragments/Advanced.kt | 2 +- .../tasks/preferences/fragments/Backups.kt | 2 +- .../tasks/preferences/fragments/DashClock.kt | 2 +- .../preferences/fragments/DateAndTime.kt | 2 +- .../preferences/fragments/HelpAndFeedback.kt | 2 +- .../preferences/fragments/LookAndFeel.kt | 2 +- .../fragments/MainSettingsFragment.kt | 2 +- .../preferences/fragments/NavigationDrawer.kt | 2 +- .../preferences/fragments/Notifications.kt | 2 +- .../preferences/fragments/ScrollableWidget.kt | 2 +- .../preferences/fragments/Synchronization.kt | 43 +++++++++++-------- .../preferences/fragments/TaskDefaults.kt | 2 +- .../fragments/TaskerListNotification.kt | 2 +- .../tasks/preferences/fragments/Widgets.kt | 35 ++++++++------- 19 files changed, 81 insertions(+), 71 deletions(-) diff --git a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt index edac165d4..9f1fd140c 100644 --- a/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt +++ b/app/src/debug/java/org/tasks/preferences/fragments/Debug.kt @@ -21,7 +21,7 @@ class Debug : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_debug - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { for (pref in listOf( R.string.p_leakcanary, R.string.p_flipper, diff --git a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt index c913e8a8e..c9aaa8899 100644 --- a/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt +++ b/app/src/main/java/org/tasks/injection/InjectingPreferenceFragment.kt @@ -2,10 +2,12 @@ package org.tasks.injection import android.os.Bundle import androidx.annotation.StringRes +import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceGroup import androidx.preference.PreferenceScreen +import kotlinx.coroutines.launch import org.tasks.R import org.tasks.dialogs.DialogBuilder import org.tasks.preferences.Device @@ -40,7 +42,9 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { tintIcons(preferenceScreen, requireContext().getColor(R.color.icon_tint_with_alpha)) - setupPreferences(savedInstanceState) + lifecycleScope.launch { + setupPreferences(savedInstanceState) + } } protected open fun showRestartDialog() { @@ -90,7 +94,7 @@ abstract class InjectingPreferenceFragment : PreferenceFragmentCompat() { abstract fun getPreferenceXml(): Int - abstract fun setupPreferences(savedInstanceState: Bundle?) + abstract suspend fun setupPreferences(savedInstanceState: Bundle?) protected fun recreate() { requireActivity().recreate() diff --git a/app/src/main/java/org/tasks/injection/ProductionModule.kt b/app/src/main/java/org/tasks/injection/ProductionModule.kt index 25325e8da..abc088131 100644 --- a/app/src/main/java/org/tasks/injection/ProductionModule.kt +++ b/app/src/main/java/org/tasks/injection/ProductionModule.kt @@ -10,8 +10,8 @@ import dagger.hilt.android.components.ApplicationComponent import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.BuildConfig import org.tasks.R -import org.tasks.data.CaldavDaoBlocking -import org.tasks.data.GoogleTaskListDaoBlocking +import org.tasks.data.CaldavDao +import org.tasks.data.GoogleTaskListDao import org.tasks.db.Migrations import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManagerImpl @@ -40,8 +40,8 @@ internal class ProductionModule { fun getWorkManager( @ApplicationContext context: Context, preferences: Preferences, - googleTaskListDao: GoogleTaskListDaoBlocking, - caldavDao: CaldavDaoBlocking): WorkManager { + googleTaskListDao: GoogleTaskListDao, + caldavDao: CaldavDao): WorkManager { return WorkManagerImpl(context, preferences, googleTaskListDao, caldavDao) } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/WorkManager.kt b/app/src/main/java/org/tasks/jobs/WorkManager.kt index d870bd59d..949754cc7 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManager.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManager.kt @@ -17,7 +17,7 @@ interface WorkManager { fun updateBackgroundSync() - fun updateBackgroundSync( + suspend fun updateBackgroundSync( forceAccountPresent: Boolean?, forceBackgroundEnabled: Boolean?, forceOnlyOnUnmetered: Boolean?) diff --git a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt index 1114c5d85..41d3a199c 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt @@ -10,14 +10,11 @@ import androidx.work.* import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.data.Task -import io.reactivex.Single -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.functions.BiFunction -import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.runBlocking import org.tasks.BuildConfig import org.tasks.R -import org.tasks.data.CaldavDaoBlocking -import org.tasks.data.GoogleTaskListDaoBlocking +import org.tasks.data.CaldavDao +import org.tasks.data.GoogleTaskListDao import org.tasks.data.Place import org.tasks.date.DateTimeUtils.midnight import org.tasks.date.DateTimeUtils.newDateTime @@ -39,8 +36,8 @@ import kotlin.math.max class WorkManagerImpl constructor( private val context: Context, private val preferences: Preferences, - private val googleTaskListDao: GoogleTaskListDaoBlocking, - private val caldavDao: CaldavDaoBlocking): WorkManager { + private val googleTaskListDao: GoogleTaskListDao, + private val caldavDao: CaldavDao): WorkManager { private val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager private val workManager = androidx.work.WorkManager.getInstance(context) @@ -96,10 +93,12 @@ class WorkManagerImpl constructor( .build()) } - override fun updateBackgroundSync() = updateBackgroundSync(null, null, null) + override fun updateBackgroundSync() = runBlocking { + updateBackgroundSync(null, null, null) + } @SuppressLint("CheckResult") - override fun updateBackgroundSync( + override suspend fun updateBackgroundSync( forceAccountPresent: Boolean?, forceBackgroundEnabled: Boolean?, forceOnlyOnUnmetered: Boolean?) { @@ -107,13 +106,10 @@ class WorkManagerImpl constructor( ?: preferences.getBoolean(R.string.p_background_sync, true) val onlyOnWifi = forceOnlyOnUnmetered ?: preferences.getBoolean(R.string.p_background_sync_unmetered_only, false) - (if (forceAccountPresent == null) Single.zip( - Single.fromCallable { googleTaskListDao.accountCount() }, - Single.fromCallable { caldavDao.accountCount() }, - BiFunction { googleCount: Int, caldavCount: Int -> googleCount > 0 || caldavCount > 0 }) else Single.just(forceAccountPresent)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { accountsPresent: Boolean -> scheduleBackgroundSync(backgroundEnabled && accountsPresent, onlyOnWifi) } + val accountsPresent = forceAccountPresent == true + || googleTaskListDao.accountCount() > 0 + || caldavDao.accountCount() > 0 + scheduleBackgroundSync(backgroundEnabled && accountsPresent, onlyOnWifi) } private fun scheduleBackgroundSync(enabled: Boolean, onlyOnUnmetered: Boolean) { diff --git a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt index badf84c13..19b347246 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Advanced.kt @@ -47,7 +47,7 @@ class Advanced : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_advanced - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.p_use_paged_queries) .setOnPreferenceChangeListener { _: Preference?, _: Any? -> localBroadcastManager.broadcastRefresh() diff --git a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt index cb29a4f0e..a42bb5ea9 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Backups.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Backups.kt @@ -38,7 +38,7 @@ class Backups : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_backups - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { initializeBackupDirectory() findPreference(R.string.backup_BAc_import) diff --git a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt index 39b67f636..f4a1b4723 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DashClock.kt @@ -22,7 +22,7 @@ class DashClock : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_dashclock - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.p_dashclock_filter) .setOnPreferenceClickListener { val intent = Intent(context, FilterSelectionActivity::class.java) diff --git a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt index d29a406ee..76fdae43f 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/DateAndTime.kt @@ -31,7 +31,7 @@ class DateAndTime : InjectingPreferenceFragment(), Preference.OnPreferenceChange override fun getPreferenceXml() = R.xml.preferences_date_and_time - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { val startOfWeekPreference: ListPreference = getStartOfWeekPreference() startOfWeekPreference.entries = getWeekdayEntries() startOfWeekPreference.onPreferenceChangeListener = this diff --git a/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt b/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt index 6a19e31fa..4adf1a902 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/HelpAndFeedback.kt @@ -23,7 +23,7 @@ class HelpAndFeedback : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.help_and_feedback - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { val whatsNew = findPreference(R.string.whats_new) whatsNew.summary = getString(R.string.version_string, BuildConfig.VERSION_NAME) whatsNew.setOnPreferenceClickListener { diff --git a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt index 8bd527fce..ea84b2e19 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/LookAndFeel.kt @@ -71,7 +71,7 @@ class LookAndFeel : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_look_and_feel - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { val themePref = findPreference(R.string.p_theme) val themeNames = resources.getStringArray(R.array.base_theme_names) themePref.summary = themeNames[themeBase.index] diff --git a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt index c2beaf920..9ea856734 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/MainSettingsFragment.kt @@ -15,7 +15,7 @@ class MainSettingsFragment : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { requires(BuildConfig.DEBUG, R.string.debug) requires(appWidgetManager.widgetIds.isNotEmpty(), R.string.widget_settings) diff --git a/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt b/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt index 038c9431c..0c0f576fd 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/NavigationDrawer.kt @@ -10,5 +10,5 @@ class NavigationDrawer : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_navigation_drawer - override fun setupPreferences(savedInstanceState: Bundle?) {} + override suspend fun setupPreferences(savedInstanceState: Bundle?) {} } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt index 6dbe28cf3..a100884a5 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Notifications.kt @@ -46,7 +46,7 @@ class Notifications : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_notifications - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { rescheduleNotificationsOnChange( false, R.string.p_rmd_time, diff --git a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt index 5b453fcf1..44862399a 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/ScrollableWidget.kt @@ -53,7 +53,7 @@ class ScrollableWidget : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_widget - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { appWidgetId = requireArguments().getInt(EXTRA_WIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID) widgetPreferences = WidgetPreferences(context, preferences, appWidgetId) diff --git a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt index e2833a48f..3c87ac019 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Synchronization.kt @@ -3,6 +3,7 @@ package org.tasks.preferences.fragments import android.app.Activity import android.content.Intent import android.os.Bundle +import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.SwitchPreferenceCompat @@ -10,14 +11,15 @@ import com.todoroo.andlib.utility.DateUtilities import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity import com.todoroo.astrid.service.TaskDeleter import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.launch import org.tasks.R import org.tasks.Strings.isNullOrEmpty import org.tasks.caldav.CaldavAccountSettingsActivity import org.tasks.data.CaldavAccount import org.tasks.data.CaldavAccount.Companion.TYPE_LOCAL -import org.tasks.data.CaldavDaoBlocking +import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskAccount -import org.tasks.data.GoogleTaskListDaoBlocking +import org.tasks.data.GoogleTaskListDao import org.tasks.etesync.EteSyncAccountSettingsActivity import org.tasks.injection.InjectingPreferenceFragment import org.tasks.jobs.WorkManager @@ -35,21 +37,25 @@ class Synchronization : InjectingPreferenceFragment() { @Inject lateinit var workManager: WorkManager @Inject lateinit var preferences: Preferences @Inject lateinit var toaster: Toaster - @Inject lateinit var caldavDao: CaldavDaoBlocking - @Inject lateinit var googleTaskListDao: GoogleTaskListDaoBlocking + @Inject lateinit var caldavDao: CaldavDao + @Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var taskDeleter: TaskDeleter override fun getPreferenceXml() = R.xml.preferences_synchronization - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { findPreference(R.string.p_background_sync_unmetered_only) .setOnPreferenceChangeListener { _: Preference?, o: Any? -> - workManager.updateBackgroundSync(null, null, o as Boolean?) + lifecycleScope.launch { + workManager.updateBackgroundSync(null, null, o as Boolean?) + } true } findPreference(R.string.p_background_sync) .setOnPreferenceChangeListener { _: Preference?, o: Any? -> - workManager.updateBackgroundSync(null, o as Boolean?, null) + lifecycleScope.launch { + workManager.updateBackgroundSync(null, o as Boolean?, null) + } true } @@ -100,7 +106,7 @@ class Synchronization : InjectingPreferenceFragment() { } } - private fun addGoogleTasksAccounts(category: PreferenceCategory): Boolean { + private suspend fun addGoogleTasksAccounts(category: PreferenceCategory): Boolean { val accounts: List = googleTaskListDao.getAccounts() for (googleTaskAccount in accounts) { val account = googleTaskAccount.account @@ -139,7 +145,7 @@ class Synchronization : InjectingPreferenceFragment() { return accounts.isNotEmpty() } - private fun addCaldavAccounts(category: PreferenceCategory): Boolean { + private suspend fun addCaldavAccounts(category: PreferenceCategory): Boolean { val accounts: List = caldavDao.getAccounts().filter { it.accountType != TYPE_LOCAL } @@ -186,14 +192,15 @@ class Synchronization : InjectingPreferenceFragment() { } private fun refresh() { - val synchronizationPreferences = findPreference(R.string.accounts) as PreferenceCategory - synchronizationPreferences.removeAll() - - val hasGoogleAccounts: Boolean = addGoogleTasksAccounts(synchronizationPreferences) - val hasCaldavAccounts = addCaldavAccounts(synchronizationPreferences) - findPreference(R.string.gtasks_GPr_header).isVisible = hasGoogleAccounts - val syncEnabled = hasGoogleAccounts || hasCaldavAccounts - findPreference(R.string.accounts).isVisible = syncEnabled - findPreference(R.string.sync_SPr_interval_title).isVisible = syncEnabled + lifecycleScope.launch { + val synchronizationPreferences = findPreference(R.string.accounts) as PreferenceCategory + synchronizationPreferences.removeAll() + val hasGoogleAccounts: Boolean = addGoogleTasksAccounts(synchronizationPreferences) + val hasCaldavAccounts = addCaldavAccounts(synchronizationPreferences) + findPreference(R.string.gtasks_GPr_header).isVisible = hasGoogleAccounts + val syncEnabled = hasGoogleAccounts || hasCaldavAccounts + findPreference(R.string.accounts).isVisible = syncEnabled + findPreference(R.string.sync_SPr_interval_title).isVisible = syncEnabled + } } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt index b532c5bf2..abb790d1a 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskDefaults.kt @@ -34,7 +34,7 @@ class TaskDefaults : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_task_defaults - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { defaultCalendarPref = findPreference(R.string.gcal_p_default) defaultCalendarPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { newCalendarPicker(this, REQUEST_CALENDAR_SELECTION, getDefaultCalendarName()) diff --git a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt index f8b02c9f7..8dd77fef2 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/TaskerListNotification.kt @@ -39,7 +39,7 @@ class TaskerListNotification : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_tasker - override fun setupPreferences(savedInstanceState: Bundle?) { + override suspend fun setupPreferences(savedInstanceState: Bundle?) { filter = if (savedInstanceState == null) { defaultFilterProvider.getFilterFromPreferenceBlocking(arguments?.getString(EXTRA_FILTER)) } else { diff --git a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt index 1d156d684..30f505f1d 100644 --- a/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt +++ b/app/src/main/java/org/tasks/preferences/fragments/Widgets.kt @@ -2,8 +2,10 @@ package org.tasks.preferences.fragments import android.content.Intent import android.os.Bundle +import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.launch import org.tasks.R import org.tasks.injection.InjectingPreferenceFragment import org.tasks.preferences.DefaultFilterProvider @@ -22,27 +24,28 @@ class Widgets : InjectingPreferenceFragment() { override fun getPreferenceXml() = R.xml.preferences_widgets - override fun setupPreferences(savedInstanceState: Bundle?) { - } + override suspend fun setupPreferences(savedInstanceState: Bundle?) {} override fun onResume() { super.onResume() - preferenceScreen.removeAll() - appWidgetManager.widgetIds.forEach { - val widgetPrefs = WidgetPreferences(context, preferences, it) - val pref = Preference(context) - val filter = defaultFilterProvider.getFilterFromPreferenceBlocking(widgetPrefs.filterId) - pref.title = filter?.listingTitle - pref.summary = getString(R.string.widget_id, it) - val intent = Intent(context, WidgetConfigActivity::class.java) - intent.putExtra(android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID, it) - intent.action = "widget_settings" - pref.setOnPreferenceClickListener { - startActivity(intent) - false + lifecycleScope.launch { + preferenceScreen.removeAll() + appWidgetManager.widgetIds.forEach { + val widgetPrefs = WidgetPreferences(context, preferences, it) + val pref = Preference(context) + val filter = defaultFilterProvider.getFilterFromPreference(widgetPrefs.filterId) + pref.title = filter.listingTitle + pref.summary = getString(R.string.widget_id, it) + val intent = Intent(context, WidgetConfigActivity::class.java) + intent.putExtra(android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID, it) + intent.action = "widget_settings" + pref.setOnPreferenceClickListener { + startActivity(intent) + false + } + preferenceScreen.addPreference(pref) } - preferenceScreen.addPreference(pref) } } } \ No newline at end of file