Loading packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalAppWidgetViewModelTest.kt +3 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.systemui.communal.widgets.CommunalAppWidgetHost import com.android.systemui.communal.widgets.GlanceableHubWidgetManager import com.android.systemui.concurrency.fakeExecutor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.backgroundCoroutineContext import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.runTest Loading Loading @@ -57,8 +58,8 @@ class CommunalAppWidgetViewModelTest(flags: FlagsParameterization) : SysuiTestCa private val Kosmos.listenerDelegateFactory by Kosmos.Fixture { AppWidgetHostListenerDelegate.Factory { listener -> AppWidgetHostListenerDelegate(fakeExecutor, listener) AppWidgetHostListenerDelegate.Factory { tag, listener -> AppWidgetHostListenerDelegate(applicationCoroutineScope, tag, listener) } } Loading packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalAppWidgetViewModel.kt +9 −3 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ constructor( } private suspend fun handleSetListener(appWidgetId: Int, listener: AppWidgetHostListener) = withContextTraced("$TAG#setListenerInner", backgroundContext) { withContextTraced("${TAG}_$appWidgetId#setListenerInner", backgroundContext) { if ( multiUserHelper.glanceableHubHsumFlagEnabled && multiUserHelper.isInHeadlessSystemUser() Loading @@ -92,13 +92,19 @@ constructor( // remotely in the foreground user, and therefore the host listener needs to be // registered through the widget manager. with(glanceableHubWidgetManagerLazy.get()) { setAppWidgetHostListener(appWidgetId, listenerDelegateFactory.create(listener)) setAppWidgetHostListener( appWidgetId, listenerDelegateFactory.create("${TAG}_$appWidgetId", listener), ) } } else { // Instead of setting the view as the listener directly, we wrap the view in a // delegate which ensures the callbacks always get called on the main thread. with(appWidgetHostLazy.get()) { setListener(appWidgetId, listenerDelegateFactory.create(listener)) setListener( appWidgetId, listenerDelegateFactory.create("${TAG}_$appWidgetId", listener), ) } } } Loading packages/SystemUI/src/com/android/systemui/communal/widgets/AppWidgetHostListenerDelegate.kt +11 −7 Original line number Diff line number Diff line Loading @@ -19,11 +19,12 @@ package com.android.systemui.communal.widgets import android.appwidget.AppWidgetHost.AppWidgetHostListener import android.appwidget.AppWidgetProviderInfo import android.widget.RemoteViews import com.android.systemui.dagger.qualifiers.Main import com.android.app.tracing.coroutines.launchTraced import com.android.systemui.dagger.qualifiers.Application import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import java.util.concurrent.Executor import kotlinx.coroutines.CoroutineScope /** * Wrapper for an [AppWidgetHostListener] to ensure the callbacks are executed on the main thread. Loading @@ -31,24 +32,27 @@ import java.util.concurrent.Executor class AppWidgetHostListenerDelegate @AssistedInject constructor( @Main private val mainExecutor: Executor, @Application private val mainScope: CoroutineScope, @Assisted private val tag: String, @Assisted private val listener: AppWidgetHostListener, ) : AppWidgetHostListener { @AssistedFactory fun interface Factory { fun create(listener: AppWidgetHostListener): AppWidgetHostListenerDelegate fun create(tag: String, listener: AppWidgetHostListener): AppWidgetHostListenerDelegate } override fun onUpdateProviderInfo(appWidget: AppWidgetProviderInfo?) { mainExecutor.execute { listener.onUpdateProviderInfo(appWidget) } mainScope.launchTraced("$tag#onUpdateProviderInfo") { listener.onUpdateProviderInfo(appWidget) } } override fun updateAppWidget(views: RemoteViews?) { mainExecutor.execute { listener.updateAppWidget(views) } mainScope.launchTraced("$tag#updateAppWidget") { listener.updateAppWidget(views) } } override fun onViewDataChanged(viewId: Int) { mainExecutor.execute { listener.onViewDataChanged(viewId) } mainScope.launchTraced("$tag#onViewDataChanged") { listener.onViewDataChanged(viewId) } } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/communal/ui/viewmodel/CommunalAppWidgetViewModelTest.kt +3 −2 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import com.android.systemui.communal.widgets.CommunalAppWidgetHost import com.android.systemui.communal.widgets.GlanceableHubWidgetManager import com.android.systemui.concurrency.fakeExecutor import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.kosmos.backgroundCoroutineContext import com.android.systemui.kosmos.runCurrent import com.android.systemui.kosmos.runTest Loading Loading @@ -57,8 +58,8 @@ class CommunalAppWidgetViewModelTest(flags: FlagsParameterization) : SysuiTestCa private val Kosmos.listenerDelegateFactory by Kosmos.Fixture { AppWidgetHostListenerDelegate.Factory { listener -> AppWidgetHostListenerDelegate(fakeExecutor, listener) AppWidgetHostListenerDelegate.Factory { tag, listener -> AppWidgetHostListenerDelegate(applicationCoroutineScope, tag, listener) } } Loading
packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalAppWidgetViewModel.kt +9 −3 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ constructor( } private suspend fun handleSetListener(appWidgetId: Int, listener: AppWidgetHostListener) = withContextTraced("$TAG#setListenerInner", backgroundContext) { withContextTraced("${TAG}_$appWidgetId#setListenerInner", backgroundContext) { if ( multiUserHelper.glanceableHubHsumFlagEnabled && multiUserHelper.isInHeadlessSystemUser() Loading @@ -92,13 +92,19 @@ constructor( // remotely in the foreground user, and therefore the host listener needs to be // registered through the widget manager. with(glanceableHubWidgetManagerLazy.get()) { setAppWidgetHostListener(appWidgetId, listenerDelegateFactory.create(listener)) setAppWidgetHostListener( appWidgetId, listenerDelegateFactory.create("${TAG}_$appWidgetId", listener), ) } } else { // Instead of setting the view as the listener directly, we wrap the view in a // delegate which ensures the callbacks always get called on the main thread. with(appWidgetHostLazy.get()) { setListener(appWidgetId, listenerDelegateFactory.create(listener)) setListener( appWidgetId, listenerDelegateFactory.create("${TAG}_$appWidgetId", listener), ) } } } Loading
packages/SystemUI/src/com/android/systemui/communal/widgets/AppWidgetHostListenerDelegate.kt +11 −7 Original line number Diff line number Diff line Loading @@ -19,11 +19,12 @@ package com.android.systemui.communal.widgets import android.appwidget.AppWidgetHost.AppWidgetHostListener import android.appwidget.AppWidgetProviderInfo import android.widget.RemoteViews import com.android.systemui.dagger.qualifiers.Main import com.android.app.tracing.coroutines.launchTraced import com.android.systemui.dagger.qualifiers.Application import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import java.util.concurrent.Executor import kotlinx.coroutines.CoroutineScope /** * Wrapper for an [AppWidgetHostListener] to ensure the callbacks are executed on the main thread. Loading @@ -31,24 +32,27 @@ import java.util.concurrent.Executor class AppWidgetHostListenerDelegate @AssistedInject constructor( @Main private val mainExecutor: Executor, @Application private val mainScope: CoroutineScope, @Assisted private val tag: String, @Assisted private val listener: AppWidgetHostListener, ) : AppWidgetHostListener { @AssistedFactory fun interface Factory { fun create(listener: AppWidgetHostListener): AppWidgetHostListenerDelegate fun create(tag: String, listener: AppWidgetHostListener): AppWidgetHostListenerDelegate } override fun onUpdateProviderInfo(appWidget: AppWidgetProviderInfo?) { mainExecutor.execute { listener.onUpdateProviderInfo(appWidget) } mainScope.launchTraced("$tag#onUpdateProviderInfo") { listener.onUpdateProviderInfo(appWidget) } } override fun updateAppWidget(views: RemoteViews?) { mainExecutor.execute { listener.updateAppWidget(views) } mainScope.launchTraced("$tag#updateAppWidget") { listener.updateAppWidget(views) } } override fun onViewDataChanged(viewId: Int) { mainExecutor.execute { listener.onViewDataChanged(viewId) } mainScope.launchTraced("$tag#onViewDataChanged") { listener.onViewDataChanged(viewId) } } }