Loading packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java +1 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,7 @@ public class TakeScreenshotService extends Service { Log.d(TAG, "handleMessage: Using request processor"); mProcessor.processAsync(request, (r) -> dispatchToController(r, onSaved, callback)); return; } dispatchToController(request, onSaved, callback); Loading packages/SystemUI/tests/src/com/android/systemui/screenshot/TakeScreenshotServiceTest.kt +46 −8 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.internal.util.ScreenshotHelper.ScreenshotRequest import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags.SCREENSHOT_REQUEST_PROCESSOR import com.android.systemui.flags.Flags.SCREENSHOT_WORK_PROFILE_POLICY import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_REQUESTED_KEY_CHORD import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_REQUESTED_OVERVIEW import com.android.systemui.screenshot.TakeScreenshotService.RequestCallback Loading @@ -47,12 +48,15 @@ import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argThat import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import java.util.function.Consumer import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.isNull import org.mockito.Mockito.doAnswer import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.verifyZeroInteractions import org.mockito.Mockito.`when` as whenever Loading Loading @@ -88,7 +92,16 @@ class TakeScreenshotServiceTest : SysuiTestCase() { .thenReturn(false) whenever(userManager.isUserUnlocked).thenReturn(true) // Stub request processor as a synchronous no-op for tests with the flag enabled doAnswer { val request: ScreenshotRequest = it.getArgument(0) as ScreenshotRequest val consumer: Consumer<ScreenshotRequest> = it.getArgument(1) consumer.accept(request) }.`when`(requestProcessor).processAsync(/* request= */ any(), /* callback= */ any()) // Flipped in selected test cases flags.set(SCREENSHOT_REQUEST_PROCESSOR, false) flags.set(SCREENSHOT_WORK_PROFILE_POLICY, false) service.attach( mContext, Loading @@ -105,10 +118,10 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.onBind(null /* unused: Intent */) service.onUnbind(null /* unused: Intent */) verify(controller).removeWindow() verify(controller, times(1)).removeWindow() service.onDestroy() verify(controller).onDestroy() verify(controller, times(1)).onDestroy() } @Test Loading @@ -120,7 +133,32 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(controller).takeScreenshotFullscreen( verify(controller, times(1)).takeScreenshotFullscreen( eq(topComponent), /* onSavedListener = */ any(), /* requestCallback = */ any()) assertEquals("Expected one UiEvent", eventLogger.numLogs(), 1) val logEvent = eventLogger.get(0) assertEquals("Expected SCREENSHOT_REQUESTED UiEvent", logEvent.eventId, SCREENSHOT_REQUESTED_KEY_CHORD.id) assertEquals("Expected supplied package name", topComponent.packageName, eventLogger.get(0).packageName) } @Test fun takeScreenshot_requestProcessorEnabled() { flags.set(SCREENSHOT_REQUEST_PROCESSOR, true) val request = ScreenshotRequest( TAKE_SCREENSHOT_FULLSCREEN, SCREENSHOT_KEY_CHORD, topComponent) service.handleRequest(request, { /* onSaved */ }, callback) verify(controller, times(1)).takeScreenshotFullscreen( eq(topComponent), /* onSavedListener = */ any(), /* requestCallback = */ any()) Loading @@ -143,7 +181,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(controller).takeScreenshotPartial( verify(controller, times(1)).takeScreenshotPartial( /* topComponent = */ isNull(), /* onSavedListener = */ any(), /* requestCallback = */ any()) Loading @@ -167,7 +205,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(controller).handleImageAsScreenshot( verify(controller, times(1)).handleImageAsScreenshot( argThat { b -> b.equalsHardwareBitmap(bitmap) }, eq(bounds), eq(Insets.NONE), eq(TASK_ID), eq(USER_ID), eq(topComponent), Loading @@ -193,8 +231,8 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(notificationsController).notifyScreenshotError(anyInt()) verify(callback).reportError() verify(notificationsController, times(1)).notifyScreenshotError(anyInt()) verify(callback, times(1)).reportError() verifyZeroInteractions(controller) } Loading @@ -217,7 +255,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) // error shown: Toast.makeText(...).show(), untestable verify(callback).reportError() verify(callback, times(1)).reportError() verifyZeroInteractions(controller) } } Loading Loading
packages/SystemUI/src/com/android/systemui/screenshot/TakeScreenshotService.java +1 −0 Original line number Diff line number Diff line Loading @@ -229,6 +229,7 @@ public class TakeScreenshotService extends Service { Log.d(TAG, "handleMessage: Using request processor"); mProcessor.processAsync(request, (r) -> dispatchToController(r, onSaved, callback)); return; } dispatchToController(request, onSaved, callback); Loading
packages/SystemUI/tests/src/com/android/systemui/screenshot/TakeScreenshotServiceTest.kt +46 −8 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.internal.util.ScreenshotHelper.ScreenshotRequest import com.android.systemui.SysuiTestCase import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.Flags.SCREENSHOT_REQUEST_PROCESSOR import com.android.systemui.flags.Flags.SCREENSHOT_WORK_PROFILE_POLICY import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_REQUESTED_KEY_CHORD import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_REQUESTED_OVERVIEW import com.android.systemui.screenshot.TakeScreenshotService.RequestCallback Loading @@ -47,12 +48,15 @@ import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argThat import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import java.util.function.Consumer import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.isNull import org.mockito.Mockito.doAnswer import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.verifyZeroInteractions import org.mockito.Mockito.`when` as whenever Loading Loading @@ -88,7 +92,16 @@ class TakeScreenshotServiceTest : SysuiTestCase() { .thenReturn(false) whenever(userManager.isUserUnlocked).thenReturn(true) // Stub request processor as a synchronous no-op for tests with the flag enabled doAnswer { val request: ScreenshotRequest = it.getArgument(0) as ScreenshotRequest val consumer: Consumer<ScreenshotRequest> = it.getArgument(1) consumer.accept(request) }.`when`(requestProcessor).processAsync(/* request= */ any(), /* callback= */ any()) // Flipped in selected test cases flags.set(SCREENSHOT_REQUEST_PROCESSOR, false) flags.set(SCREENSHOT_WORK_PROFILE_POLICY, false) service.attach( mContext, Loading @@ -105,10 +118,10 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.onBind(null /* unused: Intent */) service.onUnbind(null /* unused: Intent */) verify(controller).removeWindow() verify(controller, times(1)).removeWindow() service.onDestroy() verify(controller).onDestroy() verify(controller, times(1)).onDestroy() } @Test Loading @@ -120,7 +133,32 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(controller).takeScreenshotFullscreen( verify(controller, times(1)).takeScreenshotFullscreen( eq(topComponent), /* onSavedListener = */ any(), /* requestCallback = */ any()) assertEquals("Expected one UiEvent", eventLogger.numLogs(), 1) val logEvent = eventLogger.get(0) assertEquals("Expected SCREENSHOT_REQUESTED UiEvent", logEvent.eventId, SCREENSHOT_REQUESTED_KEY_CHORD.id) assertEquals("Expected supplied package name", topComponent.packageName, eventLogger.get(0).packageName) } @Test fun takeScreenshot_requestProcessorEnabled() { flags.set(SCREENSHOT_REQUEST_PROCESSOR, true) val request = ScreenshotRequest( TAKE_SCREENSHOT_FULLSCREEN, SCREENSHOT_KEY_CHORD, topComponent) service.handleRequest(request, { /* onSaved */ }, callback) verify(controller, times(1)).takeScreenshotFullscreen( eq(topComponent), /* onSavedListener = */ any(), /* requestCallback = */ any()) Loading @@ -143,7 +181,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(controller).takeScreenshotPartial( verify(controller, times(1)).takeScreenshotPartial( /* topComponent = */ isNull(), /* onSavedListener = */ any(), /* requestCallback = */ any()) Loading @@ -167,7 +205,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(controller).handleImageAsScreenshot( verify(controller, times(1)).handleImageAsScreenshot( argThat { b -> b.equalsHardwareBitmap(bitmap) }, eq(bounds), eq(Insets.NONE), eq(TASK_ID), eq(USER_ID), eq(topComponent), Loading @@ -193,8 +231,8 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) verify(notificationsController).notifyScreenshotError(anyInt()) verify(callback).reportError() verify(notificationsController, times(1)).notifyScreenshotError(anyInt()) verify(callback, times(1)).reportError() verifyZeroInteractions(controller) } Loading @@ -217,7 +255,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() { service.handleRequest(request, { /* onSaved */ }, callback) // error shown: Toast.makeText(...).show(), untestable verify(callback).reportError() verify(callback, times(1)).reportError() verifyZeroInteractions(controller) } } Loading