diff options
4 files changed, 22 insertions, 10 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt index ddaa4889d6f3..449ee6f414dd 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt @@ -42,6 +42,7 @@ import com.android.systemui.util.mockito.kotlinArgumentCaptor import com.android.systemui.util.mockito.nullable import com.android.systemui.util.mockito.whenever import com.google.common.truth.Truth.assertThat +import java.util.Optional import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flowOf @@ -63,6 +64,8 @@ import org.mockito.MockitoAnnotations @SmallTest @RunWith(AndroidJUnit4::class) class CommunalWidgetRepositoryImplTest : SysuiTestCase() { + @Mock private lateinit var appWidgetManagerOptional: Optional<AppWidgetManager> + @Mock private lateinit var appWidgetManager: AppWidgetManager @Mock private lateinit var appWidgetHost: AppWidgetHost @@ -113,6 +116,8 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() { whenever(stopwatchProviderInfo.loadLabel(any())).thenReturn("Stopwatch") whenever(userTracker.userHandle).thenReturn(userHandle) whenever(communalWidgetDao.getWidgets()).thenReturn(flowOf(emptyMap())) + whenever(appWidgetManagerOptional.isPresent).thenReturn(true) + whenever(appWidgetManagerOptional.get()).thenReturn(appWidgetManager) } @Test @@ -296,7 +301,7 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() { private fun initCommunalWidgetRepository(): CommunalWidgetRepositoryImpl { return CommunalWidgetRepositoryImpl( - appWidgetManager, + appWidgetManagerOptional, appWidgetHost, testScope.backgroundScope, testDispatcher, diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt index d1bbe5743a24..cab8adfc0bd9 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt @@ -38,6 +38,7 @@ import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.Logger import com.android.systemui.log.dagger.CommunalLog import com.android.systemui.settings.UserTracker +import java.util.Optional import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope @@ -75,7 +76,7 @@ interface CommunalWidgetRepository { class CommunalWidgetRepositoryImpl @Inject constructor( - private val appWidgetManager: AppWidgetManager, + private val appWidgetManager: Optional<AppWidgetManager>, private val appWidgetHost: AppWidgetHost, @Application private val applicationScope: CoroutineScope, @Background private val bgDispatcher: CoroutineDispatcher, @@ -144,7 +145,7 @@ constructor( override val communalWidgets: Flow<List<CommunalWidgetContentModel>> = isHostActive.flatMapLatest { isHostActive -> - if (!isHostActive) { + if (!isHostActive || !appWidgetManager.isPresent) { return@flatMapLatest flowOf(emptyList()) } communalWidgetDao.getWidgets().map { it.map(::mapToContentModel) } @@ -187,7 +188,7 @@ constructor( val (_, widgetId) = entry.value return CommunalWidgetContentModel( appWidgetId = widgetId, - providerInfo = appWidgetManager.getAppWidgetInfo(widgetId), + providerInfo = appWidgetManager.get().getAppWidgetInfo(widgetId), priority = entry.key.rank, ) } diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryModule.kt b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryModule.kt index 5793f1043aca..d0d9e3fabc7b 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryModule.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryModule.kt @@ -31,6 +31,7 @@ import com.android.systemui.res.R import dagger.Binds import dagger.Module import dagger.Provides +import java.util.Optional import javax.inject.Named @Module @@ -41,8 +42,8 @@ interface CommunalWidgetRepositoryModule { @SysUISingleton @Provides - fun provideAppWidgetManager(@Application context: Context): AppWidgetManager { - return AppWidgetManager.getInstance(context) + fun provideAppWidgetManager(@Application context: Context): Optional<AppWidgetManager> { + return Optional.ofNullable(AppWidgetManager.getInstance(context)) } @SysUISingleton @@ -54,7 +55,7 @@ interface CommunalWidgetRepositoryModule { @SysUISingleton @Provides fun provideCommunalWidgetHost( - appWidgetManager: AppWidgetManager, + appWidgetManager: Optional<AppWidgetManager>, appWidgetHost: AppWidgetHost, @CommunalLog logBuffer: LogBuffer, ): CommunalWidgetHost { diff --git a/packages/SystemUI/src/com/android/systemui/communal/shared/CommunalWidgetHost.kt b/packages/SystemUI/src/com/android/systemui/communal/shared/CommunalWidgetHost.kt index 086d729e1a60..155de323d3a6 100644 --- a/packages/SystemUI/src/com/android/systemui/communal/shared/CommunalWidgetHost.kt +++ b/packages/SystemUI/src/com/android/systemui/communal/shared/CommunalWidgetHost.kt @@ -22,6 +22,7 @@ import android.content.ComponentName import com.android.systemui.log.LogBuffer import com.android.systemui.log.core.Logger import com.android.systemui.log.dagger.CommunalLog +import java.util.Optional import javax.inject.Inject /** @@ -31,7 +32,7 @@ import javax.inject.Inject class CommunalWidgetHost @Inject constructor( - private val appWidgetManager: AppWidgetManager, + private val appWidgetManager: Optional<AppWidgetManager>, private val appWidgetHost: AppWidgetHost, @CommunalLog logBuffer: LogBuffer, ) { @@ -56,6 +57,10 @@ constructor( return null } - private fun bindWidget(widgetId: Int, provider: ComponentName): Boolean = - appWidgetManager.bindAppWidgetIdIfAllowed(widgetId, provider) + private fun bindWidget(widgetId: Int, provider: ComponentName): Boolean { + if (appWidgetManager.isPresent) { + return appWidgetManager.get().bindAppWidgetIdIfAllowed(widgetId, provider) + } + return false + } } |