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

Commit 98f2cbe3 authored by Danny Burakov's avatar Danny Burakov Committed by Android (Google) Code Review
Browse files

Merge changes I1507c88d,I9c58eb75,If7126eac into main

* changes:
  [bc25] Notifications should not reserve space for nav bar in Dual Shade.
  [bc25] Use the DSL's `translate()` overload with DP instead of factory.
  [bc25] Add initial Quick Settings rendering in QuickSettingsShadeScene.
parents 106560ec a48576b6
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -170,6 +170,7 @@ fun SceneScope.NotificationScrollingStack(
    maxScrimTop: () -> Float,
    maxScrimTop: () -> Float,
    shouldPunchHoleBehindScrim: Boolean,
    shouldPunchHoleBehindScrim: Boolean,
    shouldFillMaxSize: Boolean = true,
    shouldFillMaxSize: Boolean = true,
    shouldReserveSpaceForNavBar: Boolean = true,
    shadeMode: ShadeMode,
    shadeMode: ShadeMode,
    modifier: Modifier = Modifier,
    modifier: Modifier = Modifier,
) {
) {
@@ -353,7 +354,7 @@ fun SceneScope.NotificationScrollingStack(
                        .fillMaxWidth()
                        .fillMaxWidth()
                        .notificationStackHeight(
                        .notificationStackHeight(
                            view = stackScrollView,
                            view = stackScrollView,
                            padding = navBarHeight.toInt()
                            padding = if (shouldReserveSpaceForNavBar) navBarHeight.toInt() else 0
                        )
                        )
                        .onSizeChanged { size -> stackHeight.intValue = size.height },
                        .onSizeChanged { size -> stackHeight.intValue = size.height },
            )
            )
+1 −0
Original line number Original line Diff line number Diff line
@@ -94,6 +94,7 @@ constructor(
                    maxScrimTop = { 0f },
                    maxScrimTop = { 0f },
                    shouldPunchHoleBehindScrim = false,
                    shouldPunchHoleBehindScrim = false,
                    shouldFillMaxSize = false,
                    shouldFillMaxSize = false,
                    shouldReserveSpaceForNavBar = false,
                    shadeMode = ShadeMode.Dual,
                    shadeMode = ShadeMode.Dual,
                    modifier = Modifier.fillMaxWidth(),
                    modifier = Modifier.fillMaxWidth(),
                )
                )
+84 −9
Original line number Original line Diff line number Diff line
@@ -16,22 +16,38 @@


package com.android.systemui.qs.ui.composable
package com.android.systemui.qs.ui.composable


import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.EnterTransition
import androidx.compose.animation.ExitTransition
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.SceneScope
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.brightness.ui.compose.BrightnessSliderContainer
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.keyguard.ui.composable.LockscreenContent
import com.android.systemui.keyguard.ui.composable.LockscreenContent
import com.android.systemui.qs.panels.ui.compose.EditMode
import com.android.systemui.qs.panels.ui.compose.TileGrid
import com.android.systemui.qs.ui.viewmodel.QuickSettingsShadeSceneViewModel
import com.android.systemui.qs.ui.viewmodel.QuickSettingsShadeSceneViewModel
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.ui.composable.ComposableScene
import com.android.systemui.scene.ui.composable.ComposableScene
import com.android.systemui.shade.ui.composable.OverlayShade
import com.android.systemui.shade.ui.composable.OverlayShade
import com.android.systemui.shade.ui.viewmodel.OverlayShadeViewModel
import dagger.Lazy
import dagger.Lazy
import java.util.Optional
import java.util.Optional
import javax.inject.Inject
import javax.inject.Inject
@@ -41,8 +57,7 @@ import kotlinx.coroutines.flow.StateFlow
class QuickSettingsShadeScene
class QuickSettingsShadeScene
@Inject
@Inject
constructor(
constructor(
    viewModel: QuickSettingsShadeSceneViewModel,
    private val viewModel: QuickSettingsShadeSceneViewModel,
    private val overlayShadeViewModel: OverlayShadeViewModel,
    private val lockscreenContent: Lazy<Optional<LockscreenContent>>,
    private val lockscreenContent: Lazy<Optional<LockscreenContent>>,
) : ComposableScene {
) : ComposableScene {


@@ -56,21 +71,81 @@ constructor(
        modifier: Modifier,
        modifier: Modifier,
    ) {
    ) {
        OverlayShade(
        OverlayShade(
            viewModel = overlayShadeViewModel,
            viewModel = viewModel.overlayShadeViewModel,
            modifier = modifier,
            horizontalArrangement = Arrangement.End,
            horizontalArrangement = Arrangement.End,
            lockscreenContent = lockscreenContent,
            lockscreenContent = lockscreenContent,
            modifier = modifier,
        ) {
            val isEditing by viewModel.editModeViewModel.isEditing.collectAsStateWithLifecycle()

            // The main Quick Settings grid layout.
            AnimatedVisibility(
                visible = !isEditing,
                enter = QuickSettingsShade.Transitions.QuickSettingsLayoutEnter,
                exit = QuickSettingsShade.Transitions.QuickSettingsLayoutExit,
            ) {
                QuickSettingsLayout(
                    viewModel = viewModel,
                )
            }

            // The Quick Settings Editor layout.
            AnimatedVisibility(
                visible = isEditing,
                enter = QuickSettingsShade.Transitions.QuickSettingsEditorEnter,
                exit = QuickSettingsShade.Transitions.QuickSettingsEditorExit,
            ) {
                EditMode(
                    viewModel = viewModel.editModeViewModel,
                    modifier =
                        Modifier.fillMaxWidth().padding(QuickSettingsShade.Dimensions.Padding)
                )
            }
        }
    }
}

@Composable
private fun QuickSettingsLayout(
    viewModel: QuickSettingsShadeSceneViewModel,
    modifier: Modifier = Modifier,
) {
) {
            Text(
    Column(
                text = "Quick settings grid",
        verticalArrangement = Arrangement.spacedBy(QuickSettingsShade.Dimensions.Padding),
                modifier = Modifier.padding(QuickSettingsShade.Dimensions.Padding)
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = modifier.fillMaxWidth().padding(QuickSettingsShade.Dimensions.Padding),
    ) {
        BrightnessSliderContainer(
            viewModel = viewModel.brightnessSliderViewModel,
            modifier =
                Modifier.fillMaxWidth()
                    .height(QuickSettingsShade.Dimensions.BrightnessSliderHeight),
        )
        TileGrid(
            viewModel = viewModel.tileGridViewModel,
            modifier =
                Modifier.fillMaxWidth().heightIn(max = QuickSettingsShade.Dimensions.GridMaxHeight),
        )
        )
        Button(
            onClick = { viewModel.editModeViewModel.startEditing() },
        ) {
            Text("Edit mode")
        }
        }
    }
    }
}
}


object QuickSettingsShade {
object QuickSettingsShade {

    object Dimensions {
    object Dimensions {
        val Padding = 16.dp
        val Padding = 16.dp
        val BrightnessSliderHeight = 64.dp
        val GridMaxHeight = 400.dp
    }

    object Transitions {
        val QuickSettingsLayoutEnter: EnterTransition = fadeIn(tween(500))
        val QuickSettingsLayoutExit: ExitTransition = fadeOut(tween(500))
        val QuickSettingsEditorEnter: EnterTransition = fadeIn(tween(500))
        val QuickSettingsEditorExit: ExitTransition = fadeOut(tween(500))
    }
    }
}
}
+2 −2
Original line number Original line Diff line number Diff line
@@ -104,9 +104,9 @@ val SceneContainerTransitions = transitions {
        )
        )
    }
    }
    overscroll(Scenes.NotificationsShade, Orientation.Vertical) {
    overscroll(Scenes.NotificationsShade, Orientation.Vertical) {
        translate(OverlayShade.Elements.Panel, y = { OverlayShade.Dimensions.OverscrollLimit })
        translate(OverlayShade.Elements.Panel, y = OverlayShade.Dimensions.OverscrollLimit)
    }
    }
    overscroll(Scenes.QuickSettingsShade, Orientation.Vertical) {
    overscroll(Scenes.QuickSettingsShade, Orientation.Vertical) {
        translate(OverlayShade.Elements.Panel, y = { OverlayShade.Dimensions.OverscrollLimit })
        translate(OverlayShade.Elements.Panel, y = OverlayShade.Dimensions.OverscrollLimit)
    }
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -199,7 +199,7 @@ object OverlayShade {
        val PanelCornerRadius = 46.dp
        val PanelCornerRadius = 46.dp
        val PanelWidthMedium = 390.dp
        val PanelWidthMedium = 390.dp
        val PanelWidthLarge = 474.dp
        val PanelWidthLarge = 474.dp
        val OverscrollLimit = 100f
        val OverscrollLimit = 32.dp
    }
    }


    object Shapes {
    object Shapes {
Loading