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

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

Merge "Flashlight tile percentage follows locale" into main

parents 362fdb60 ad61ddae
Loading
Loading
Loading
Loading
+30 −5
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.qs.tiles.impl.flashlight.ui.mapper

import android.content.res.Configuration
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.widget.Button
@@ -31,6 +32,7 @@ import com.android.systemui.qs.tiles.impl.flashlight.qsFlashlightTileConfig
import com.android.systemui.res.R
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import java.util.Locale
import junit.framework.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
@@ -251,6 +253,9 @@ class FlashlightTileMapperTest : SysuiTestCase() {
    @Test
    fun availableLevelEnabled_whenDataInCorrectRange() =
        kosmos.runTest {
            context.orCreateTestableResources.overrideConfiguration(
                Configuration(context.resources.configuration).apply { setLocale(Locale.US) }
            )
            val actual =
                underTest.map(
                    qsTileConfig,
@@ -261,11 +266,31 @@ class FlashlightTileMapperTest : SysuiTestCase() {
                .isEqualTo(
                    createFlashlightState(
                        activationState = QSTileState.ActivationState.ACTIVE,
                        secondaryLabel =
                            context.getString(
                                R.string.quick_settings_flashlight_tile_level_percentage,
                                46, // 21/45 = 0.46
                            ),
                        secondaryLabel = "47%",
                        toggleable = true,
                    )
                )
        }

    @EnableFlags(com.android.systemui.Flags.FLAG_FLASHLIGHT_STRENGTH)
    @Test
    fun availableLevelEnabled_whenDataInCorrectRange_withFrenchLocale() =
        kosmos.runTest {
            context.orCreateTestableResources.overrideConfiguration(
                Configuration(context.resources.configuration).apply { setLocale(Locale.FRANCE) }
            )

            val actual =
                underTest.map(
                    qsTileConfig,
                    FlashlightModel.Available.Level(true, DEFAULT_LEVEL, MAX_LEVEL),
                )

            assertThat(actual)
                .isEqualTo(
                    createFlashlightState(
                        activationState = QSTileState.ActivationState.ACTIVE,
                        secondaryLabel = "47 %", // extra NBSP
                        toggleable = true,
                    )
                )
+0 −2
Original line number Diff line number Diff line
@@ -945,8 +945,6 @@
    <string name="quick_settings_close_user_panel">Close</string>
    <!-- QuickSettings: Control panel: Label for connected device. [CHAR LIMIT=NONE] -->
    <string name="quick_settings_connected">Connected</string>
    <!-- QuickSettings: Control panel: Label for connected device, showing remote device battery level. [CHAR LIMIT=NONE] -->
    <string name="quick_settings_connected_battery_level">Connected, battery <xliff:g id="battery_level_as_percentage">%1$s</xliff:g></string>
    <!-- QuickSettings: Control panel: Label for connecting device. [CHAR LIMIT=NONE] -->
    <string name="quick_settings_connecting">Connecting...</string>
    <!-- QuickSettings: Tethering. [CHAR LIMIT=NONE] -->
+10 −6
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.qs.tiles.base.shared.model.QSTileState
import com.android.systemui.qs.tiles.base.ui.model.QSTileDataToStateMapper
import com.android.systemui.res.R
import com.android.systemui.shade.ShadeDisplayAware
import java.text.NumberFormat
import javax.inject.Inject

/** Maps [FlashlightModel] to [QSTileState]. */
@@ -109,7 +110,7 @@ constructor(
    }

    private fun QSTileState.Builder.buildLevelState(data: FlashlightModel.Available.Level) {
        val percentage = getValidPercentage(data)
        val percentage = calculatePercentage(data)
        if (percentage == null) {
            activationState = QSTileState.ActivationState.UNAVAILABLE
            icon =
@@ -128,8 +129,12 @@ constructor(
                    null,
                    R.drawable.qs_flashlight_icon_on,
                )
            secondaryLabel =
                res.getString(R.string.quick_settings_flashlight_tile_level_percentage, percentage)

            val percentInstance =
                res.configuration.locales.get(0)?.let { NumberFormat.getPercentInstance(it) }
                    ?: NumberFormat.getPercentInstance()

            secondaryLabel = percentInstance.format(percentage)
            supportedActions =
                setOf(QSTileState.UserAction.CLICK, QSTileState.UserAction.TOGGLE_CLICK)
            expandedAccessibilityClass = Button::class
@@ -165,7 +170,7 @@ constructor(
        expandedAccessibilityClass = Switch::class
    }

    private fun getValidPercentage(data: FlashlightModel.Available.Level): Int? {
    private fun calculatePercentage(data: FlashlightModel.Available.Level): Float? {
        if (data.level < BASE_LEVEL || data.level > data.max) {
            logger.wtf(
                "FlashlightMapper: invalid Level data. level:${data.level}, max:${data.max}."
@@ -173,8 +178,7 @@ constructor(
            return null
        }

        val percentage = ((data.level / data.max.toFloat()) * 100).toInt()
        return percentage
        return data.level.toFloat() / data.max
    }

    private companion object {