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

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

Merge "Make status bar battery scale with "status_bar_icon_scale_factor"" into main

parents 88130951 71d8fa60
Loading
Loading
Loading
Loading
+73 −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.statusbar.pipeline.battery.ui.viewmodel

import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.res.R
import com.android.systemui.statusbar.core.StatusBarConnectedDisplays
import com.google.common.truth.Truth.assertThat
import org.junit.Test
import org.junit.runner.RunWith

@SmallTest
@RunWith(AndroidJUnit4::class)
class BatteryViewModelTest : SysuiTestCase() {

    @Test
    @DisableFlags(StatusBarConnectedDisplays.FLAG_NAME)
    fun getStatusBarBatteryHeight_flagDisabled_scaleIsOne_returnsDefaultHeight() {
        overrideResource(R.dimen.status_bar_icon_scale_factor, 1.0f)

        val height = BatteryViewModel.getStatusBarBatteryHeight(context)

        assertThat(height.value).isEqualTo(13f)
    }

    @Test
    @DisableFlags(StatusBarConnectedDisplays.FLAG_NAME)
    fun getStatusBarBatteryHeight_flagDisabled_scaleIsTwo_returnsDefaultHeight() {
        overrideResource(R.dimen.status_bar_icon_scale_factor, 2.0f)

        val height = BatteryViewModel.getStatusBarBatteryHeight(context)

        assertThat(height.value).isEqualTo(13f)
    }

    @Test
    @EnableFlags(StatusBarConnectedDisplays.FLAG_NAME)
    fun getStatusBarBatteryHeight_flagEnabled_scaleIsOne_returnsDefaultHeight() {
        overrideResource(R.dimen.status_bar_icon_scale_factor, 1.0f)

        val height = BatteryViewModel.getStatusBarBatteryHeight(context)

        assertThat(height.value).isEqualTo(13f)
    }

    @Test
    @EnableFlags(StatusBarConnectedDisplays.FLAG_NAME)
    fun getStatusBarBatteryHeight_flagEnabled_scaleIsTwo_returnsScaledHeight() {
        overrideResource(R.dimen.status_bar_icon_scale_factor, 2.0f)

        val height = BatteryViewModel.getStatusBarBatteryHeight(context)

        assertThat(height.value).isEqualTo(26f)
    }
}
+9 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import com.android.compose.theme.PlatformTheme
@@ -103,7 +104,10 @@ constructor(level: Int, context: Context, attrs: AttributeSet? = null) :
@Composable
private fun UnifiedBatteryChip(level: Int) {
    val isFull = BatteryInteractor.isBatteryFull(level)
    val height = with(LocalDensity.current) { BatteryViewModel.STATUS_BAR_BATTERY_HEIGHT.toDp() }
    val height =
        with(LocalDensity.current) {
            BatteryViewModel.getStatusBarBatteryHeight(LocalContext.current).toDp()
        }
    BatteryLayout(
        attribution = BatteryGlyph.Bolt, // Always charging
        levelProvider = { level },
@@ -120,7 +124,10 @@ private fun UnifiedBatteryChip(level: Int) {
@Composable
private fun BatteryAndPercentChip(level: Int) {
    val isFull = BatteryInteractor.isBatteryFull(level)
    val height = with(LocalDensity.current) { BatteryViewModel.STATUS_BAR_BATTERY_HEIGHT.toDp() }
    val height =
        with(LocalDensity.current) {
            BatteryViewModel.getStatusBarBatteryHeight(LocalContext.current).toDp()
        }
    Row(verticalAlignment = Alignment.CenterVertically) {
        BatteryLayout(
            attribution = BatteryGlyph.Bolt, // Always charging
+5 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.view.isVisible
@@ -34,7 +35,6 @@ import com.android.systemui.lifecycle.repeatWhenAttached
import com.android.systemui.statusbar.phone.domain.interactor.IsAreaDark
import com.android.systemui.statusbar.pipeline.battery.ui.composable.UnifiedBattery
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel
import com.android.systemui.statusbar.pipeline.battery.ui.viewmodel.BatteryViewModel.Companion.STATUS_BAR_BATTERY_HEIGHT
import kotlinx.coroutines.flow.Flow

/** In cases where the battery needs to be bound to an existing android view */
@@ -62,7 +62,10 @@ object UnifiedBatteryViewBinder {
                            val isDark by
                                isAreaDark.collectAsStateWithLifecycle(IsAreaDark { true })
                            val height =
                                with(LocalDensity.current) { STATUS_BAR_BATTERY_HEIGHT.toDp() }
                                with(LocalDensity.current) {
                                    BatteryViewModel.getStatusBarBatteryHeight(LocalContext.current)
                                        .toDp()
                                }
                            UnifiedBattery(
                                modifier =
                                    Modifier.height(height)
+4 −1
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onLayoutRectChanged
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import com.android.systemui.common.ui.compose.load
@@ -65,7 +66,9 @@ fun BatteryWithChargeStatus(
        rememberViewModel(traceName = "BatteryWithPercent") { viewModelFactory.create() }

    val batteryHeight =
        with(LocalDensity.current) { BatteryViewModel.STATUS_BAR_BATTERY_HEIGHT.toDp() }
        with(LocalDensity.current) {
            BatteryViewModel.getStatusBarBatteryHeight(LocalContext.current).toDp()
        }

    var bounds by remember { mutableStateOf(Rect()) }

+4 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import com.android.systemui.lifecycle.rememberViewModel
@@ -47,7 +48,9 @@ fun BatteryWithEstimate(
        rememberViewModel(traceName = "BatteryWithEstimate") { viewModelFactory.create() }

    val batteryHeight =
        with(LocalDensity.current) { BatteryViewModel.STATUS_BAR_BATTERY_HEIGHT.toDp() }
        with(LocalDensity.current) {
            BatteryViewModel.getStatusBarBatteryHeight(LocalContext.current).toDp()
        }

    Row(
        modifier = modifier,
Loading