Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/flashlight/ui/mapper/FlashlightTileMapperTest.kt +30 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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, Loading @@ -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, ) ) Loading packages/SystemUI/res/values/strings.xml +0 −2 Original line number Diff line number Diff line Loading @@ -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] --> Loading packages/SystemUI/src/com/android/systemui/qs/tiles/impl/flashlight/ui/mapper/FlashlightTileMapper.kt +10 −6 Original line number Diff line number Diff line Loading @@ -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]. */ Loading Loading @@ -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 = Loading @@ -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 Loading Loading @@ -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}." Loading @@ -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 { Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/flashlight/ui/mapper/FlashlightTileMapperTest.kt +30 −5 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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, Loading @@ -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, ) ) Loading
packages/SystemUI/res/values/strings.xml +0 −2 Original line number Diff line number Diff line Loading @@ -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] --> Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/flashlight/ui/mapper/FlashlightTileMapper.kt +10 −6 Original line number Diff line number Diff line Loading @@ -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]. */ Loading Loading @@ -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 = Loading @@ -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 Loading Loading @@ -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}." Loading @@ -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 { Loading