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

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

Merge changes If49279cf,I34572262 into main

* changes:
  Open screen record dialog from QS in the shade window display
  Hide brightness slider on external displays
parents cc0eedd6 476e4c14
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package com.android.systemui.qs.ui.viewmodel
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.testing.TestableLooper
import android.view.Display
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.Flags.FLAG_NOTIFICATION_SHADE_BLUR
import com.android.systemui.Flags.FLAG_SHADE_WINDOW_GOES_AROUND
import com.android.systemui.SysuiTestCase
import com.android.systemui.flags.EnableSceneContainer
import com.android.systemui.kosmos.testScope
@@ -31,6 +33,7 @@ import com.android.systemui.media.controls.data.repository.mediaFilterRepository
import com.android.systemui.media.controls.shared.model.MediaData
import com.android.systemui.qs.composefragment.dagger.usingMediaInComposeFragment
import com.android.systemui.scene.domain.startable.sceneContainerStartable
import com.android.systemui.shade.data.repository.fakeShadeDisplaysRepository
import com.android.systemui.shade.domain.interactor.enableDualShade
import com.android.systemui.testKosmos
import com.android.systemui.window.data.repository.fakeWindowRootViewBlurRepository
@@ -114,4 +117,27 @@ class QuickSettingsContainerViewModelTest : SysuiTestCase() {

            assertThat(underTest.isTransparencyEnabled).isFalse()
        }

    @Test
    fun isBrightnessSliderVisible_defaultDisplay_isVisible() =
        with(kosmos) {
            testScope.runTest {
                fakeShadeDisplaysRepository.setPendingDisplayId(Display.DEFAULT_DISPLAY)

                assertThat(underTest.isBrightnessSliderVisible).isTrue()
            }
        }

    @Test
    @EnableFlags(FLAG_SHADE_WINDOW_GOES_AROUND)
    fun isBrightnessSliderVisible_externalDisplay_isInvisible() =
        with(kosmos) {
            testScope.runTest {
                fakeShadeDisplaysRepository.setPendingDisplayId(
                    Display.DEFAULT_DISPLAY + 1
                ) // Not default.

                assertThat(underTest.isBrightnessSliderVisible).isFalse()
            }
        }
}
+7 −1
Original line number Diff line number Diff line
@@ -884,7 +884,12 @@ constructor(
                                    )
                        ) {
                            QuickSettingsLayout(
                                brightness = BrightnessSlider,
                                brightness =
                                    if (viewModel.isBrightnessSliderVisible) {
                                        { BrightnessSlider() }
                                    } else {
                                        {}
                                    },
                                tiles = TileGrid,
                                media = Media,
                                mediaInRow = viewModel.qsMediaInRow,
@@ -1390,6 +1395,7 @@ fun QuickQuickSettingsLayout(
    }
}

/** [brightness] is nullable as it might not be there (e.g. on connected displays). */
@Composable
@VisibleForTesting
fun QuickSettingsLayout(
+4 −0
Original line number Diff line number Diff line
@@ -260,6 +260,9 @@ constructor(
    val showingMirror: Boolean
        get() = containerViewModel.brightnessSliderViewModel.showMirror

    val isBrightnessSliderVisible: Boolean
        get() = containerViewModel.isBrightnessSliderVisible

    // The initial values in these two are not meaningful. The flow will emit on start the correct
    // values. This is because we need to lazily fetch them after initMediaHosts.
    val qqsMediaVisible by
@@ -537,6 +540,7 @@ constructor(
                println("isQSEnabled", isQsEnabled)
                println("isCustomizing", containerViewModel.editModeViewModel.isEditing.value)
                println("inFirstPage", inFirstPage)
                println("isBrightnessSliderVisible", containerViewModel.isBrightnessSliderVisible)
            }
            printSection("Expansion state") {
                println("qsExpansion", qsExpansion)
+30 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.qs.ui.viewmodel

import android.content.Context
import android.media.AudioManager
import android.view.Display
import androidx.compose.runtime.getValue
import com.android.settingslib.volume.shared.model.AudioStream
import com.android.systemui.Flags
@@ -35,10 +36,13 @@ import com.android.systemui.qs.panels.ui.viewmodel.TileGridViewModel
import com.android.systemui.qs.panels.ui.viewmodel.toolbar.ToolbarViewModel
import com.android.systemui.res.R
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.shade.domain.interactor.ShadeDisplaysInteractor
import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.shade.ui.viewmodel.ShadeHeaderViewModel
import com.android.systemui.volume.panel.component.volume.domain.model.SliderType
import com.android.systemui.volume.panel.component.volume.slider.ui.viewmodel.AudioStreamSliderViewModel
import com.android.systemui.window.domain.interactor.WindowRootViewBlurInteractor
import dagger.Lazy
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
@@ -46,6 +50,7 @@ import javax.inject.Named
import kotlinx.coroutines.awaitCancellation
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch

class QuickSettingsContainerViewModel
@@ -65,6 +70,7 @@ constructor(
    mediaCarouselInteractor: MediaCarouselInteractor,
    val mediaCarouselController: MediaCarouselController,
    @Named(MediaModule.QS_PANEL) val mediaHost: MediaHost,
    shadeDisplaysInteractor: Lazy<ShadeDisplaysInteractor>,
) : ExclusiveActivatable() {

    private val hydrator = Hydrator("QuickSettingsContainerViewModel.hydrator")
@@ -87,6 +93,20 @@ constructor(
                },
        )

    val isBrightnessSliderVisible by
        hydrator.hydratedStateOf(
            traceName = "isBrightnessSliderVisible",
            initialValue = shouldBrightnessSliderBeVisible(Display.DEFAULT_DISPLAY),
            source =
                if (ShadeWindowGoesAround.isEnabled) {
                    shadeDisplaysInteractor.get().pendingDisplayId.map {
                        shouldBrightnessSliderBeVisible(it)
                    }
                } else {
                    flowOf(true)
                },
        )

    val brightnessSliderViewModel =
        brightnessSliderViewModelFactory.create(supportsBrightnessMirroring)

@@ -133,6 +153,16 @@ constructor(
        }
    }

    private companion object {
        fun shouldBrightnessSliderBeVisible(displayId: Int): Boolean {
            return if (ShadeWindowGoesAround.isEnabled) {
                displayId == Display.DEFAULT_DISPLAY
            } else {
                true
            }
        }
    }

    @AssistedFactory
    interface Factory {
        fun create(
+2 −2
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.os.Bundle
import android.os.UserHandle
import android.view.View
import androidx.annotation.StyleRes
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.mediaprojection.MediaProjectionMetricsLogger
import com.android.systemui.mediaprojection.permission.BaseMediaProjectionPermissionContentManager
import com.android.systemui.mediaprojection.permission.BaseMediaProjectionPermissionDialogDelegate
@@ -30,6 +29,7 @@ import com.android.systemui.mediaprojection.permission.ScreenShareMode
import com.android.systemui.plugins.ActivityStarter
import com.android.systemui.res.R
import com.android.systemui.settings.UserContextProvider
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.statusbar.phone.SystemUIDialog
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
@@ -70,7 +70,7 @@ class ScreenRecordPermissionDialogDelegate(
        @Assisted onStartRecordingClicked: Runnable?,
        mediaProjectionMetricsLogger: MediaProjectionMetricsLogger,
        systemUIDialogFactory: SystemUIDialog.Factory,
        @Application context: Context,
        @ShadeDisplayAware context: Context,
        displayManager: DisplayManager,
    ) : this(
        hostUserHandle,
Loading