Loading packages/SystemUI/src/com/android/systemui/screencapture/ScreenCaptureEvent.kt 0 → 100644 +29 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.screencapture import com.android.internal.logging.UiEvent import com.android.internal.logging.UiEventLogger.UiEventEnum /** Enum of available screen capture events. */ enum class ScreenCaptureEvent(private val mId: Int) : UiEventEnum { @UiEvent(doc = "Closed the large-screen pre-capture UI without any capture") SCREEN_CAPTURE_LARGE_SCREEN_CLOSE_UI_WITHOUT_CAPTURE(2486); override fun getId(): Int = mId } packages/SystemUI/src/com/android/systemui/screencapture/record/largescreen/ui/compose/PreCaptureUI.kt +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ fun PreCaptureUI(viewModel: PreCaptureViewModel) { PreCaptureToolbar( viewModel = viewModel, expanded = true, onCloseClick = { viewModel.closeUi() }, onCloseClick = { viewModel.closeFromToolbar() }, modifier = Modifier.onGloballyPositioned { val boundsInWindow = it.boundsInWindow() Loading packages/SystemUI/src/com/android/systemui/screencapture/record/largescreen/ui/viewmodel/PreCaptureViewModel.kt +10 −1 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.systemui.screencapture.record.largescreen.ui.viewmodel import android.content.Context import android.graphics.Rect import android.view.WindowManager import com.android.internal.logging.UiEventLogger import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.lifecycle.HydratedActivatable import com.android.systemui.res.R import com.android.systemui.screencapture.ScreenCaptureEvent import com.android.systemui.screencapture.common.ScreenCapture import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiParameters import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModel Loading Loading @@ -60,6 +62,7 @@ constructor( private val drawableLoaderViewModelImpl: DrawableLoaderViewModelImpl, private val screenCaptureUiInteractor: ScreenCaptureUiInteractor, private val screenRecordingServiceInteractor: ScreenRecordingServiceInteractor, private val uiEventLogger: UiEventLogger, @ScreenCapture private val screenCaptureUiParams: ScreenCaptureUiParameters, screenCaptureRecordParametersViewModelFactory: ScreenCaptureRecordParametersViewModel.Factory, ) : HydratedActivatable(), DrawableLoaderViewModel by drawableLoaderViewModelImpl { Loading Loading @@ -121,6 +124,12 @@ constructor( ) ) /** Closes the Screen Capture UI from the pre-capture toolbar. */ fun closeFromToolbar() { uiEventLogger.log(ScreenCaptureEvent.SCREEN_CAPTURE_LARGE_SCREEN_CLOSE_UI_WITHOUT_CAPTURE) closeUi() } fun updateCaptureType(selectedType: ScreenCaptureType) { captureTypeSource.value = selectedType } Loading Loading @@ -244,7 +253,7 @@ constructor( } /** Closes the UI by hiding the parent window. */ fun closeUi() { private fun closeUi() { screenCaptureUiInteractor.hide( com.android.systemui.screencapture.common.shared.model.ScreenCaptureType.RECORD ) Loading packages/SystemUI/tests/src/com/android/systemui/screencapture/record/largescreen/ui/viewmodel/PreCaptureViewModelTest.kt +18 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.view.WindowMetrics import android.view.windowManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.uiEventLoggerFake import com.android.internal.util.ScreenshotRequest import com.android.internal.util.mockScreenshotHelper import com.android.systemui.Flags Loading @@ -36,6 +37,7 @@ import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.lifecycle.activateIn import com.android.systemui.res.R import com.android.systemui.screencapture.ScreenCaptureEvent import com.android.systemui.screencapture.common.shared.model.LargeScreenCaptureUiParameters import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiState import com.android.systemui.screencapture.common.shared.model.largeScreenCaptureUiParameters Loading Loading @@ -402,7 +404,7 @@ class PreCaptureViewModelTest : SysuiTestCase() { } @Test fun closeUi_dismissesWindow() = fun closeFromToolbar_dismissesWindow() = kosmos.runTest { setupViewModel() Loading @@ -414,11 +416,25 @@ class PreCaptureViewModelTest : SysuiTestCase() { ) ) viewModel.closeUi() viewModel.closeFromToolbar() assertThat(uiState).isEqualTo(ScreenCaptureUiState.Invisible) } @Test fun closeFromToolbar_logsEvent() = kosmos.runTest { setupViewModel() viewModel.closeFromToolbar() assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1) assertThat(uiEventLoggerFake.eventId(0)) .isEqualTo( ScreenCaptureEvent.SCREEN_CAPTURE_LARGE_SCREEN_CLOSE_UI_WITHOUT_CAPTURE.id ) } @Test fun updateToolbarOpacityForRegionBox_isInteracting_opacityIsZero() = kosmos.runTest { Loading packages/SystemUI/tests/utils/src/com/android/systemui/screencapture/record/largescreen/ui/viewmodel/PreCaptureViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.screencapture.record.largescreen.ui.viewmodel import android.content.applicationContext import android.view.windowManager import com.android.internal.logging.uiEventLogger import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.kosmos.backgroundScope Loading @@ -44,6 +45,7 @@ val Kosmos.preCaptureViewModelFactory by Fixture { screenCaptureUiInteractor = screenCaptureUiInteractor, screenRecordingServiceInteractor = screenRecordingServiceInteractor, screenCaptureUiParams = recordScreenCaptureUiParameters, uiEventLogger = uiEventLogger, screenCaptureRecordParametersViewModelFactory = screenCaptureRecordParametersViewModelFactory, ) Loading Loading
packages/SystemUI/src/com/android/systemui/screencapture/ScreenCaptureEvent.kt 0 → 100644 +29 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.screencapture import com.android.internal.logging.UiEvent import com.android.internal.logging.UiEventLogger.UiEventEnum /** Enum of available screen capture events. */ enum class ScreenCaptureEvent(private val mId: Int) : UiEventEnum { @UiEvent(doc = "Closed the large-screen pre-capture UI without any capture") SCREEN_CAPTURE_LARGE_SCREEN_CLOSE_UI_WITHOUT_CAPTURE(2486); override fun getId(): Int = mId }
packages/SystemUI/src/com/android/systemui/screencapture/record/largescreen/ui/compose/PreCaptureUI.kt +1 −1 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ fun PreCaptureUI(viewModel: PreCaptureViewModel) { PreCaptureToolbar( viewModel = viewModel, expanded = true, onCloseClick = { viewModel.closeUi() }, onCloseClick = { viewModel.closeFromToolbar() }, modifier = Modifier.onGloballyPositioned { val boundsInWindow = it.boundsInWindow() Loading
packages/SystemUI/src/com/android/systemui/screencapture/record/largescreen/ui/viewmodel/PreCaptureViewModel.kt +10 −1 Original line number Diff line number Diff line Loading @@ -19,10 +19,12 @@ package com.android.systemui.screencapture.record.largescreen.ui.viewmodel import android.content.Context import android.graphics.Rect import android.view.WindowManager import com.android.internal.logging.UiEventLogger import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.lifecycle.HydratedActivatable import com.android.systemui.res.R import com.android.systemui.screencapture.ScreenCaptureEvent import com.android.systemui.screencapture.common.ScreenCapture import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiParameters import com.android.systemui.screencapture.common.ui.viewmodel.DrawableLoaderViewModel Loading Loading @@ -60,6 +62,7 @@ constructor( private val drawableLoaderViewModelImpl: DrawableLoaderViewModelImpl, private val screenCaptureUiInteractor: ScreenCaptureUiInteractor, private val screenRecordingServiceInteractor: ScreenRecordingServiceInteractor, private val uiEventLogger: UiEventLogger, @ScreenCapture private val screenCaptureUiParams: ScreenCaptureUiParameters, screenCaptureRecordParametersViewModelFactory: ScreenCaptureRecordParametersViewModel.Factory, ) : HydratedActivatable(), DrawableLoaderViewModel by drawableLoaderViewModelImpl { Loading Loading @@ -121,6 +124,12 @@ constructor( ) ) /** Closes the Screen Capture UI from the pre-capture toolbar. */ fun closeFromToolbar() { uiEventLogger.log(ScreenCaptureEvent.SCREEN_CAPTURE_LARGE_SCREEN_CLOSE_UI_WITHOUT_CAPTURE) closeUi() } fun updateCaptureType(selectedType: ScreenCaptureType) { captureTypeSource.value = selectedType } Loading Loading @@ -244,7 +253,7 @@ constructor( } /** Closes the UI by hiding the parent window. */ fun closeUi() { private fun closeUi() { screenCaptureUiInteractor.hide( com.android.systemui.screencapture.common.shared.model.ScreenCaptureType.RECORD ) Loading
packages/SystemUI/tests/src/com/android/systemui/screencapture/record/largescreen/ui/viewmodel/PreCaptureViewModelTest.kt +18 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.view.WindowMetrics import android.view.windowManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.internal.logging.uiEventLoggerFake import com.android.internal.util.ScreenshotRequest import com.android.internal.util.mockScreenshotHelper import com.android.systemui.Flags Loading @@ -36,6 +37,7 @@ import com.android.systemui.kosmos.runTest import com.android.systemui.kosmos.testScope import com.android.systemui.lifecycle.activateIn import com.android.systemui.res.R import com.android.systemui.screencapture.ScreenCaptureEvent import com.android.systemui.screencapture.common.shared.model.LargeScreenCaptureUiParameters import com.android.systemui.screencapture.common.shared.model.ScreenCaptureUiState import com.android.systemui.screencapture.common.shared.model.largeScreenCaptureUiParameters Loading Loading @@ -402,7 +404,7 @@ class PreCaptureViewModelTest : SysuiTestCase() { } @Test fun closeUi_dismissesWindow() = fun closeFromToolbar_dismissesWindow() = kosmos.runTest { setupViewModel() Loading @@ -414,11 +416,25 @@ class PreCaptureViewModelTest : SysuiTestCase() { ) ) viewModel.closeUi() viewModel.closeFromToolbar() assertThat(uiState).isEqualTo(ScreenCaptureUiState.Invisible) } @Test fun closeFromToolbar_logsEvent() = kosmos.runTest { setupViewModel() viewModel.closeFromToolbar() assertThat(uiEventLoggerFake.numLogs()).isEqualTo(1) assertThat(uiEventLoggerFake.eventId(0)) .isEqualTo( ScreenCaptureEvent.SCREEN_CAPTURE_LARGE_SCREEN_CLOSE_UI_WITHOUT_CAPTURE.id ) } @Test fun updateToolbarOpacityForRegionBox_isInteracting_opacityIsZero() = kosmos.runTest { Loading
packages/SystemUI/tests/utils/src/com/android/systemui/screencapture/record/largescreen/ui/viewmodel/PreCaptureViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.screencapture.record.largescreen.ui.viewmodel import android.content.applicationContext import android.view.windowManager import com.android.internal.logging.uiEventLogger import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.kosmos.backgroundScope Loading @@ -44,6 +45,7 @@ val Kosmos.preCaptureViewModelFactory by Fixture { screenCaptureUiInteractor = screenCaptureUiInteractor, screenRecordingServiceInteractor = screenRecordingServiceInteractor, screenCaptureUiParams = recordScreenCaptureUiParameters, uiEventLogger = uiEventLogger, screenCaptureRecordParametersViewModelFactory = screenCaptureRecordParametersViewModelFactory, ) Loading