Merge "Fix double call to ScreenshotController" into tm-qpr-dev am: b49f41145e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19775053

Change-Id: I22d88bdd8bb8c5bff9138579c82c711cc4f978bc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mark Renouf
2022-08-31 16:55:14 +00:00
committed by Automerger Merge Worker
2 changed files with 47 additions and 8 deletions

View File

@@ -229,6 +229,7 @@ public class TakeScreenshotService extends Service {
Log.d(TAG, "handleMessage: Using request processor"); Log.d(TAG, "handleMessage: Using request processor");
mProcessor.processAsync(request, mProcessor.processAsync(request,
(r) -> dispatchToController(r, onSaved, callback)); (r) -> dispatchToController(r, onSaved, callback));
return;
} }
dispatchToController(request, onSaved, callback); dispatchToController(request, onSaved, callback);

View File

@@ -40,6 +40,7 @@ import com.android.internal.util.ScreenshotHelper.ScreenshotRequest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.FakeFeatureFlags import com.android.systemui.flags.FakeFeatureFlags
import com.android.systemui.flags.Flags.SCREENSHOT_REQUEST_PROCESSOR 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_KEY_CHORD
import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_REQUESTED_OVERVIEW import com.android.systemui.screenshot.ScreenshotEvent.SCREENSHOT_REQUESTED_OVERVIEW
import com.android.systemui.screenshot.TakeScreenshotService.RequestCallback import com.android.systemui.screenshot.TakeScreenshotService.RequestCallback
@@ -47,12 +48,15 @@ import com.android.systemui.util.mockito.any
import com.android.systemui.util.mockito.argThat import com.android.systemui.util.mockito.argThat
import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.eq
import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.mock
import java.util.function.Consumer
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.isNull import org.mockito.ArgumentMatchers.isNull
import org.mockito.Mockito.doAnswer
import org.mockito.Mockito.times
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyZeroInteractions import org.mockito.Mockito.verifyZeroInteractions
import org.mockito.Mockito.`when` as whenever import org.mockito.Mockito.`when` as whenever
@@ -88,7 +92,16 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
.thenReturn(false) .thenReturn(false)
whenever(userManager.isUserUnlocked).thenReturn(true) 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_REQUEST_PROCESSOR, false)
flags.set(SCREENSHOT_WORK_PROFILE_POLICY, false)
service.attach( service.attach(
mContext, mContext,
@@ -105,10 +118,10 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
service.onBind(null /* unused: Intent */) service.onBind(null /* unused: Intent */)
service.onUnbind(null /* unused: Intent */) service.onUnbind(null /* unused: Intent */)
verify(controller).removeWindow() verify(controller, times(1)).removeWindow()
service.onDestroy() service.onDestroy()
verify(controller).onDestroy() verify(controller, times(1)).onDestroy()
} }
@Test @Test
@@ -120,7 +133,32 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
service.handleRequest(request, { /* onSaved */ }, callback) 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), eq(topComponent),
/* onSavedListener = */ any(), /* onSavedListener = */ any(),
/* requestCallback = */ any()) /* requestCallback = */ any())
@@ -143,7 +181,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
service.handleRequest(request, { /* onSaved */ }, callback) service.handleRequest(request, { /* onSaved */ }, callback)
verify(controller).takeScreenshotPartial( verify(controller, times(1)).takeScreenshotPartial(
/* topComponent = */ isNull(), /* topComponent = */ isNull(),
/* onSavedListener = */ any(), /* onSavedListener = */ any(),
/* requestCallback = */ any()) /* requestCallback = */ any())
@@ -167,7 +205,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
service.handleRequest(request, { /* onSaved */ }, callback) service.handleRequest(request, { /* onSaved */ }, callback)
verify(controller).handleImageAsScreenshot( verify(controller, times(1)).handleImageAsScreenshot(
argThat { b -> b.equalsHardwareBitmap(bitmap) }, argThat { b -> b.equalsHardwareBitmap(bitmap) },
eq(bounds), eq(bounds),
eq(Insets.NONE), eq(TASK_ID), eq(USER_ID), eq(topComponent), eq(Insets.NONE), eq(TASK_ID), eq(USER_ID), eq(topComponent),
@@ -193,8 +231,8 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
service.handleRequest(request, { /* onSaved */ }, callback) service.handleRequest(request, { /* onSaved */ }, callback)
verify(notificationsController).notifyScreenshotError(anyInt()) verify(notificationsController, times(1)).notifyScreenshotError(anyInt())
verify(callback).reportError() verify(callback, times(1)).reportError()
verifyZeroInteractions(controller) verifyZeroInteractions(controller)
} }
@@ -217,7 +255,7 @@ class TakeScreenshotServiceTest : SysuiTestCase() {
service.handleRequest(request, { /* onSaved */ }, callback) service.handleRequest(request, { /* onSaved */ }, callback)
// error shown: Toast.makeText(...).show(), untestable // error shown: Toast.makeText(...).show(), untestable
verify(callback).reportError() verify(callback, times(1)).reportError()
verifyZeroInteractions(controller) verifyZeroInteractions(controller)
} }
} }