Loading packages/SystemUI/multivalentTests/src/com/android/systemui/screencapture/common/data/repository/ScreenCaptureThumbnailRepositoryImplTest.kt +29 −1 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ class ScreenCaptureThumbnailRepositoryImplTest : SysuiTestCase() { } @Test fun loadThumbnail_failsToTakeThumbnail_returnsNull() = fun loadThumbnail_failsToTakeThumbnail_fallsBackToCachedThumbnail() = kosmos.runTest { // Arrange val thumbnailRepository = Loading @@ -75,6 +75,33 @@ class ScreenCaptureThumbnailRepositoryImplTest : SysuiTestCase() { activityManager = activityManagerWrapper.stub { on { takeTaskThumbnail(any()) } doReturn ThumbnailData(thumbnail = null) on { getTaskThumbnail(any(), any()) } doReturn ThumbnailData(thumbnail = fakeThumbnail) }, ) // Act val result = thumbnailRepository.loadThumbnail(123) // Assert verify(activityManagerWrapper).takeTaskThumbnail(eq(123)) verify(activityManagerWrapper).getTaskThumbnail(eq(123), eq(false)) assertThat(result.isSuccess).isTrue() assertThat(result.getOrNull()?.sameAs(fakeThumbnail)).isTrue() } @Test fun loadThumbnail_failsToTakeThumbnailAndNoCache_returnsFailure() = kosmos.runTest { // Arrange val thumbnailRepository = ScreenCaptureThumbnailRepositoryImpl( bgContext = testDispatcher, activityManager = activityManagerWrapper.stub { on { takeTaskThumbnail(any()) } doReturn ThumbnailData(thumbnail = null) on { getTaskThumbnail(any(), any()) } doReturn ThumbnailData(thumbnail = null) }, ) Loading @@ -83,6 +110,7 @@ class ScreenCaptureThumbnailRepositoryImplTest : SysuiTestCase() { // Assert verify(activityManagerWrapper).takeTaskThumbnail(eq(123)) verify(activityManagerWrapper).getTaskThumbnail(eq(123), eq(false)) assertThat(result.isFailure).isTrue() } } packages/SystemUI/src/com/android/systemui/screencapture/common/data/repository/ScreenCaptureThumbnailRepository.kt +10 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,11 @@ interface ScreenCaptureThumbnailRepository { suspend fun loadThumbnail(taskId: Int): Result<Bitmap> } /** Default implementation of [ScreenCaptureThumbnailRepository]. */ /** * Default implementation of [ScreenCaptureThumbnailRepository]. * * Captures new thumbnail on request, falls back to cached thumbnail if capture fails. */ @ScreenCaptureUiScope class ScreenCaptureThumbnailRepositoryImpl @Inject Loading @@ -41,7 +45,11 @@ constructor( override suspend fun loadThumbnail(taskId: Int): Result<Bitmap> = withContext(bgContext) { activityManager.takeTaskThumbnail(taskId).thumbnail?.let { Result.success(it) } getLatestThumbnail(taskId)?.let { Result.success(it) } ?: Result.failure(IllegalStateException("Could not get thumbnail for task $taskId")) } private fun getLatestThumbnail(taskId: Int): Bitmap? = activityManager.takeTaskThumbnail(taskId).thumbnail ?: activityManager.getTaskThumbnail(taskId, false).thumbnail } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/screencapture/common/data/repository/ScreenCaptureThumbnailRepositoryImplTest.kt +29 −1 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ class ScreenCaptureThumbnailRepositoryImplTest : SysuiTestCase() { } @Test fun loadThumbnail_failsToTakeThumbnail_returnsNull() = fun loadThumbnail_failsToTakeThumbnail_fallsBackToCachedThumbnail() = kosmos.runTest { // Arrange val thumbnailRepository = Loading @@ -75,6 +75,33 @@ class ScreenCaptureThumbnailRepositoryImplTest : SysuiTestCase() { activityManager = activityManagerWrapper.stub { on { takeTaskThumbnail(any()) } doReturn ThumbnailData(thumbnail = null) on { getTaskThumbnail(any(), any()) } doReturn ThumbnailData(thumbnail = fakeThumbnail) }, ) // Act val result = thumbnailRepository.loadThumbnail(123) // Assert verify(activityManagerWrapper).takeTaskThumbnail(eq(123)) verify(activityManagerWrapper).getTaskThumbnail(eq(123), eq(false)) assertThat(result.isSuccess).isTrue() assertThat(result.getOrNull()?.sameAs(fakeThumbnail)).isTrue() } @Test fun loadThumbnail_failsToTakeThumbnailAndNoCache_returnsFailure() = kosmos.runTest { // Arrange val thumbnailRepository = ScreenCaptureThumbnailRepositoryImpl( bgContext = testDispatcher, activityManager = activityManagerWrapper.stub { on { takeTaskThumbnail(any()) } doReturn ThumbnailData(thumbnail = null) on { getTaskThumbnail(any(), any()) } doReturn ThumbnailData(thumbnail = null) }, ) Loading @@ -83,6 +110,7 @@ class ScreenCaptureThumbnailRepositoryImplTest : SysuiTestCase() { // Assert verify(activityManagerWrapper).takeTaskThumbnail(eq(123)) verify(activityManagerWrapper).getTaskThumbnail(eq(123), eq(false)) assertThat(result.isFailure).isTrue() } }
packages/SystemUI/src/com/android/systemui/screencapture/common/data/repository/ScreenCaptureThumbnailRepository.kt +10 −2 Original line number Diff line number Diff line Loading @@ -30,7 +30,11 @@ interface ScreenCaptureThumbnailRepository { suspend fun loadThumbnail(taskId: Int): Result<Bitmap> } /** Default implementation of [ScreenCaptureThumbnailRepository]. */ /** * Default implementation of [ScreenCaptureThumbnailRepository]. * * Captures new thumbnail on request, falls back to cached thumbnail if capture fails. */ @ScreenCaptureUiScope class ScreenCaptureThumbnailRepositoryImpl @Inject Loading @@ -41,7 +45,11 @@ constructor( override suspend fun loadThumbnail(taskId: Int): Result<Bitmap> = withContext(bgContext) { activityManager.takeTaskThumbnail(taskId).thumbnail?.let { Result.success(it) } getLatestThumbnail(taskId)?.let { Result.success(it) } ?: Result.failure(IllegalStateException("Could not get thumbnail for task $taskId")) } private fun getLatestThumbnail(taskId: Int): Bitmap? = activityManager.takeTaskThumbnail(taskId).thumbnail ?: activityManager.getTaskThumbnail(taskId, false).thumbnail }