Fix ANRs in AppWidgetManager

pull/3321/head
Alex Baker 10 months ago
parent e8f5a72a08
commit 8a0014a50d

@ -5,11 +5,17 @@ import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.tasks.R import org.tasks.R
import org.tasks.injection.ApplicationScope
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class AppWidgetManager @Inject constructor( class AppWidgetManager @Inject constructor(
@param:ApplicationContext private val context: Context @param:ApplicationContext private val context: Context,
@ApplicationScope private val scope: CoroutineScope,
) { ) {
private val appWidgetManager: AppWidgetManager? = AppWidgetManager.getInstance(context) private val appWidgetManager: AppWidgetManager? = AppWidgetManager.getInstance(context)
@ -18,7 +24,7 @@ class AppWidgetManager @Inject constructor(
?.getAppWidgetIds(ComponentName(context, TasksWidget::class.java)) ?.getAppWidgetIds(ComponentName(context, TasksWidget::class.java))
?: intArrayOf() ?: intArrayOf()
fun reconfigureWidgets(vararg appWidgetIds: Int) { fun reconfigureWidgets(vararg appWidgetIds: Int) = scope.launch(Dispatchers.IO) {
val intent = Intent(context, TasksWidget::class.java) val intent = Intent(context, TasksWidget::class.java)
intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
intent.putExtra( intent.putExtra(
@ -28,7 +34,8 @@ class AppWidgetManager @Inject constructor(
updateWidgets() updateWidgets()
} }
fun updateWidgets() { fun updateWidgets() = scope.launch(Dispatchers.IO) {
Timber.d("Updating widgets")
appWidgetManager?.notifyAppWidgetViewDataChanged(widgetIds, R.id.list_view) appWidgetManager?.notifyAppWidgetViewDataChanged(widgetIds, R.id.list_view)
} }

Loading…
Cancel
Save