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

Commit d92ae20d authored by Ahmed Mehfooz's avatar Ahmed Mehfooz
Browse files

[SB][ComposeIcons] Add support for IsAreaDark

Color system status icons based on isAreaDark.

Fixes: 407622922
Test: Manual
Flag: com.android.systemui.status_bar_system_status_icons_in_compose
Change-Id: I93ab07988ddd4e1301541abe19879b9db979ebad
parent e1c0e11b
Loading
Loading
Loading
Loading
+45 −13
Original line number Diff line number Diff line
@@ -16,11 +16,22 @@

package com.android.systemui.statusbar.systemstatusicons.ui.compose

import android.graphics.Rect
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.onLayoutRectChanged
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.android.systemui.common.ui.compose.Icon
@@ -34,21 +45,42 @@ import com.android.systemui.statusbar.systemstatusicons.ui.viewmodel.SystemStatu
 * That is expected to be done in a container composable like a Row.
 */
@Composable
fun SystemStatusIcons(viewModelFactory: SystemStatusIconsViewModel.Factory, isDark: IsAreaDark) {
fun SystemStatusIcons(
    viewModelFactory: SystemStatusIconsViewModel.Factory,
    isDark: IsAreaDark,
    modifier: Modifier = Modifier,
) {
    val context = LocalContext.current
    var bounds by remember { mutableStateOf(Rect()) }
    val color = if (isDark.isDark(bounds)) Color.White else Color.Black
    CompositionLocalProvider(LocalContentColor provides color) {
        val viewModel =
            rememberViewModel(traceName = "SystemStatusIcons") { viewModelFactory.create(context) }

        Row(
            verticalAlignment = Alignment.CenterVertically,
            horizontalArrangement = Arrangement.spacedBy(6.dp),
            modifier =
                modifier.onLayoutRectChanged { relativeLayoutBounds ->
                    bounds =
                        with(relativeLayoutBounds.boundsInScreen) { Rect(left, top, right, bottom) }
                },
        ) {
            viewModel.iconViewModels.forEach { iconViewModel ->
        // TODO(407622922): Use isDark to color the icon.
                // TODO(414653733): Make sure icons are sized uniformly.
                when (iconViewModel) {
                    is SystemStatusIconViewModel.Default ->
                        iconViewModel.icon?.let {
                    Icon(icon = it, modifier = Modifier.size(20.dp).padding(1.dp), tint = Color.Red)
                            Icon(
                                icon = it,
                                modifier = Modifier.size(20.dp).padding(1.dp),
                                tint = LocalContentColor.current,
                            )
                        }
                    // TODO(427976550): Add a composable for mobile icons.
                    is SystemStatusIconViewModel.MobileIcons -> {}
                }
            }
        }
    }
}