Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9fde1984 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Screen capture: Create logger to log user events" into main

parents 7914382b dd91f1c3
Loading
Loading
Loading
Loading
+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
}
+1 −1
Original line number Diff line number Diff line
@@ -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()
+10 −1
Original line number Diff line number Diff line
@@ -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
@@ -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 {
@@ -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
    }
@@ -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
        )
+18 −2
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -402,7 +404,7 @@ class PreCaptureViewModelTest : SysuiTestCase() {
        }

    @Test
    fun closeUi_dismissesWindow() =
    fun closeFromToolbar_dismissesWindow() =
        kosmos.runTest {
            setupViewModel()

@@ -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 {
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -44,6 +45,7 @@ val Kosmos.preCaptureViewModelFactory by Fixture {
                screenCaptureUiInteractor = screenCaptureUiInteractor,
                screenRecordingServiceInteractor = screenRecordingServiceInteractor,
                screenCaptureUiParams = recordScreenCaptureUiParameters,
                uiEventLogger = uiEventLogger,
                screenCaptureRecordParametersViewModelFactory =
                    screenCaptureRecordParametersViewModelFactory,
            )