diff options
5 files changed, 43 insertions, 20 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt index 73ef77540398..88ba0411b414 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/DreamOverlayAnimationsControllerTest.kt @@ -84,7 +84,7 @@ class DreamOverlayAnimationsControllerTest : SysuiTestCase() { verify(mockAnimator, atLeastOnce()).addListener(captor.capture()) captor.allValues.forEach { it.onAnimationEnd(mockAnimator) } - verify(stateController).setExitAnimationsRunning(false) + verify(stateController, times(2)).setExitAnimationsRunning(false) } @Test @@ -154,4 +154,10 @@ class DreamOverlayAnimationsControllerTest : SysuiTestCase() { } ) } + + @Test + fun testCancelAnimations_clearsExitAnimationsRunning() { + controller.cancelAnimations() + verify(stateController).setExitAnimationsRunning(false) + } } diff --git a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt index 3294c816d67c..b45ebd865c55 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/DreamOverlayAnimationsController.kt @@ -256,6 +256,7 @@ constructor( it.cancel() null } + mOverlayStateController.setExitAnimationsRunning(false) } private fun blurAnimator( diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/policy/PolicyRequestProcessor.kt b/packages/SystemUI/src/com/android/systemui/screenshot/policy/PolicyRequestProcessor.kt index 4f27b9e4dbf0..b3d5c9e9691c 100644 --- a/packages/SystemUI/src/com/android/systemui/screenshot/policy/PolicyRequestProcessor.kt +++ b/packages/SystemUI/src/com/android/systemui/screenshot/policy/PolicyRequestProcessor.kt @@ -99,7 +99,7 @@ class PolicyRequestProcessor( original, updates.component, updates.owner, - type.displayId + type.displayId, ) } return updated @@ -120,6 +120,7 @@ class PolicyRequestProcessor( return replaceWithScreenshot( original = original, componentName = topMainRootTask?.topActivity ?: defaultComponent, + taskId = topMainRootTask?.taskId, owner = defaultOwner, displayId = original.displayId ) @@ -144,11 +145,12 @@ class PolicyRequestProcessor( ) } - suspend fun replaceWithScreenshot( + private suspend fun replaceWithScreenshot( original: ScreenshotData, componentName: ComponentName?, owner: UserHandle?, displayId: Int, + taskId: Int? = null, ): ScreenshotData { Log.i(TAG, "Capturing screenshot: $componentName / $owner") val screenshot = captureDisplay(displayId) @@ -157,7 +159,8 @@ class PolicyRequestProcessor( bitmap = screenshot, userHandle = owner, topComponent = componentName, - screenBounds = Rect(0, 0, screenshot?.width ?: 0, screenshot?.height ?: 0) + screenBounds = Rect(0, 0, screenshot?.width ?: 0, screenshot?.height ?: 0), + taskId = taskId ?: -1, ) } diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/policy/PolicyRequestProcessorTest.kt b/packages/SystemUI/tests/src/com/android/systemui/screenshot/policy/PolicyRequestProcessorTest.kt index 4945ace3b88c..c5708287a967 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/policy/PolicyRequestProcessorTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/policy/PolicyRequestProcessorTest.kt @@ -22,6 +22,7 @@ import android.os.UserHandle import android.view.Display.DEFAULT_DISPLAY import android.view.WindowManager.ScreenshotSource.SCREENSHOT_KEY_CHORD import android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN +import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.systemui.screenshot.ImageCapture import com.android.systemui.screenshot.ScreenshotData import com.android.systemui.screenshot.data.model.DisplayContentScenarios.ActivityNames.FILES @@ -37,20 +38,23 @@ import org.junit.Test class PolicyRequestProcessorTest { - val imageCapture = object : ImageCapture { - override fun captureDisplay(displayId: Int, crop: Rect?) = null - override suspend fun captureTask(taskId: Int) = null - } + val imageCapture = + object : ImageCapture { + override fun captureDisplay(displayId: Int, crop: Rect?) = null + + override suspend fun captureTask(taskId: Int) = null + } /** Tests behavior when no policies are applied */ @Test fun testProcess_defaultOwner_whenNoPolicyApplied() { val fullScreenWork = DisplayContentRepository { - singleFullScreen(TaskSpec(taskId = 1001, name = FILES, userId = WORK)) + singleFullScreen(TaskSpec(taskId = TASK_ID, name = FILES, userId = WORK)) } val request = - ScreenshotData(TAKE_SCREENSHOT_FULLSCREEN, + ScreenshotData( + TAKE_SCREENSHOT_FULLSCREEN, SCREENSHOT_KEY_CHORD, null, topComponent = null, @@ -58,24 +62,34 @@ class PolicyRequestProcessorTest { taskId = -1, insets = Insets.NONE, bitmap = null, - displayId = DEFAULT_DISPLAY) + displayId = DEFAULT_DISPLAY + ) /* Create a policy request processor with no capture policies */ val requestProcessor = - PolicyRequestProcessor(Dispatchers.Unconfined, + PolicyRequestProcessor( + Dispatchers.Unconfined, imageCapture, policies = emptyList(), defaultOwner = UserHandle.of(PERSONAL), defaultComponent = ComponentName("default", "Component"), - displayTasks = fullScreenWork) + displayTasks = fullScreenWork + ) val result = runBlocking { requestProcessor.process(request) } - assertWithMessage( - "With no policy, the screenshot should be assigned to the default user" - ).that(result.userHandle).isEqualTo(UserHandle.of(PERSONAL)) + assertWithMessage("With no policy, the screenshot should be assigned to the default user") + .that(result.userHandle) + .isEqualTo(UserHandle.of(PERSONAL)) + + assertWithMessage("The topComponent of the screenshot") + .that(result.topComponent) + .isEqualTo(ComponentName.unflattenFromString(FILES)) + + assertWithMessage("Task ID").that(result.taskId).isEqualTo(TASK_ID) + } - assertWithMessage("The topComponent of the screenshot").that(result.topComponent) - .isEqualTo(ComponentName.unflattenFromString(FILES)) + companion object { + const val TASK_ID = 1001 } }
\ No newline at end of file diff --git a/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt b/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt index 6b20ef1d5519..996daf5a5f68 100644 --- a/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt +++ b/services/permission/java/com/android/server/permission/access/util/AtomicFileExtensions.kt @@ -47,9 +47,8 @@ inline fun AtomicFile.readWithReserveCopy(block: (FileInputStream) -> Unit) { /** Write to actual file and reserve file. */ @Throws(IOException::class) inline fun AtomicFile.writeWithReserveCopy(block: (FileOutputStream) -> Unit) { - val reserveFile = File(baseFile.parentFile, baseFile.name + ".reservecopy") - reserveFile.delete() writeInlined(block) + val reserveFile = File(baseFile.parentFile, baseFile.name + ".reservecopy") try { FileInputStream(baseFile).use { inputStream -> FileOutputStream(reserveFile).use { outputStream -> |