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

Commit 48daeaa0 authored by Bryce Lee's avatar Bryce Lee
Browse files

Center Glanceable Hub in Portrait Mode.

This changelist makes the top padding and screen height dependent on the
orientation.

Test: manually verified hub is centered in portrait mode
Flag: com.android.systemui.communal_hub
Fixes: 323035776
Change-Id: Ifcfa092f4a4cdcbcf7703764c8f29df43466da7d
parent 03e4b97a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ import com.android.systemui.Flags.glanceableHubBackGesture
import com.android.systemui.communal.shared.model.CommunalBackgroundType
import com.android.systemui.communal.shared.model.CommunalScenes
import com.android.systemui.communal.shared.model.CommunalTransitionKeys
import com.android.systemui.communal.ui.compose.Dimensions.SlideOffsetY
import com.android.systemui.communal.ui.compose.Dimensions.Companion.SlideOffsetY
import com.android.systemui.communal.ui.compose.extensions.allowGestures
import com.android.systemui.communal.ui.viewmodel.CommunalViewModel
import com.android.systemui.communal.util.CommunalColors
+50 −26
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.communal.ui.compose

import android.content.Context
import android.content.res.Configuration
import android.graphics.drawable.Icon
import android.os.Bundle
import android.util.SizeF
@@ -113,6 +115,7 @@ import androidx.compose.ui.layout.boundsInWindow
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.testTag
@@ -126,6 +129,7 @@ import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.LayoutDirection
@@ -379,6 +383,10 @@ fun CommunalHub(
    }
}

val hubDimensions: Dimensions
    @Composable
    get() = Dimensions(LocalContext.current, LocalConfiguration.current, LocalDensity.current)

@Composable
private fun DisclaimerBottomSheetContent(onButtonClicked: () -> Unit) {
    val colors = LocalAndroidColorScheme.current
@@ -494,7 +502,7 @@ private fun BoxScope.CommunalHubLazyGrid(
        // for android drag events.
        Box(Modifier.fillMaxSize().dragAndDropTarget(dragAndDropTargetState)) {}
    } else {
        gridModifier = gridModifier.height(Dimensions.GridHeight)
        gridModifier = gridModifier.height(hubDimensions.GridHeight)
    }

    LazyHorizontalGrid(
@@ -572,7 +580,7 @@ private fun EmptyStateCta(
) {
    val colors = LocalAndroidColorScheme.current
    Card(
        modifier = Modifier.height(Dimensions.GridHeight).padding(contentPadding),
        modifier = Modifier.height(hubDimensions.GridHeight).padding(contentPadding),
        colors = CardDefaults.cardColors(containerColor = Color.Transparent),
        border = BorderStroke(3.dp, colors.secondary),
        shape = RoundedCornerShape(size = 80.dp)
@@ -1241,7 +1249,7 @@ private fun gridContentPadding(isEditMode: Boolean, toolbarSize: IntSize?): Padd
        return PaddingValues(
            start = Dimensions.ItemSpacing,
            end = Dimensions.ItemSpacing,
            top = Dimensions.GridTopSpacing,
            top = hubDimensions.GridTopSpacing,
        )
    }
    val context = LocalContext.current
@@ -1250,7 +1258,8 @@ private fun gridContentPadding(isEditMode: Boolean, toolbarSize: IntSize?): Padd
    val screenHeight = with(density) { windowMetrics.bounds.height().toDp() }
    val toolbarHeight = with(density) { Dimensions.ToolbarPaddingTop + toolbarSize.height.toDp() }
    val verticalPadding =
        ((screenHeight - toolbarHeight - Dimensions.GridHeight + Dimensions.GridTopSpacing) / 2)
        ((screenHeight - toolbarHeight - hubDimensions.GridHeight + hubDimensions.GridTopSpacing) /
                2)
            .coerceAtLeast(Dimensions.Spacing)
    return PaddingValues(
        start = Dimensions.ToolbarPaddingHorizontal,
@@ -1306,10 +1315,24 @@ data class ContentPaddingInPx(val start: Float, val top: Float) {
    fun toOffset(): Offset = Offset(start, top)
}

object Dimensions {
    val CardHeightFull = 530.dp
    val GridTopSpacing = 114.dp
class Dimensions(val context: Context, val config: Configuration, val density: Density) {
    val GridTopSpacing: Dp
        get() {
            if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
                return 114.dp
            } else {
                val windowMetrics =
                    WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(context)
                val screenHeight = with(density) { windowMetrics.bounds.height().toDp() }

                return (screenHeight - CardHeightFull) / 2
            }
        }

    val GridHeight = CardHeightFull + GridTopSpacing

    companion object {
        val CardHeightFull = 530.dp
        val ItemSpacing = 50.dp
        val CardHeightHalf = (CardHeightFull - ItemSpacing) / 2
        val CardHeightThird = (CardHeightFull - (2 * ItemSpacing)) / 3
@@ -1330,6 +1353,7 @@ object Dimensions {
        val IconSize = 40.dp
        val SlideOffsetY = 30.dp
    }
}

private object Colors {
    val DisabledColorFilter by lazy { disabledColorMatrix() }