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

Commit 935d59c6 authored by Matías Hernández's avatar Matías Hernández Committed by Android (Google) Code Review
Browse files

Merge "Update the text of the Modes Tile" into main

parents 06b1e76b ca0f149c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.whenever

@EnableFlags(android.app.Flags.FLAG_MODES_UI)
@EnableFlags(android.app.Flags.FLAG_MODES_UI, android.app.Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
@SmallTest
@RunWith(AndroidJUnit4::class)
@RunWithLooper(setAsMainLooper = true)
@@ -194,7 +194,7 @@ class ModesTileTest : SysuiTestCase() {
            underTest.handleUpdateState(tileState, model)

            assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE)
            assertThat(tileState.secondaryLabel).isEqualTo("2 modes are active")
            assertThat(tileState.label).isEqualTo("2 Modes")
        }

    @Test
@@ -212,6 +212,6 @@ class ModesTileTest : SysuiTestCase() {
            underTest.handleUpdateState(tileState, null)

            assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE)
            assertThat(tileState.secondaryLabel).isEqualTo("2 modes are active")
            assertThat(tileState.label).isEqualTo("2 Modes")
        }
}
+67 −3
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles.impl.modes.ui.mapper

import android.app.Flags
import android.graphics.drawable.TestStubDrawable
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -58,7 +59,8 @@ class ModesTileMapperTest : SysuiTestCase() {
        )

    @Test
    fun inactiveState() {
    @DisableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun inactiveState_legacy() {
        val icon = TestStubDrawable("res123").asIcon()
        val model =
            ModesTileModel(
@@ -76,7 +78,8 @@ class ModesTileMapperTest : SysuiTestCase() {
    }

    @Test
    fun activeState_oneMode() {
    @DisableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun activeState_oneMode_legacy() {
        val icon = TestStubDrawable("res123").asIcon()
        val model =
            ModesTileModel(
@@ -94,7 +97,8 @@ class ModesTileMapperTest : SysuiTestCase() {
    }

    @Test
    fun activeState_multipleModes() {
    @DisableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun activeState_multipleModes_legacy() {
        val icon = TestStubDrawable("res123").asIcon()
        val model =
            ModesTileModel(
@@ -111,6 +115,66 @@ class ModesTileMapperTest : SysuiTestCase() {
        assertThat(state.secondaryLabel).isEqualTo("3 modes are active")
    }

    @Test
    @EnableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun inactiveState() {
        val icon = TestStubDrawable("res123").asIcon()
        val model =
            ModesTileModel(
                isActivated = false,
                activeModes = emptyList(),
                icon = icon,
                quickMode = TestModeBuilder.MANUAL_DND,
            )

        val state = underTest.map(config, model)

        assertThat(state.activationState).isEqualTo(QSTileState.ActivationState.INACTIVE)
        assertThat(state.icon).isEqualTo(icon)
        assertThat(state.label).isEqualTo("Modes")
        assertThat(state.secondaryLabel).isEqualTo("")
    }

    @Test
    @EnableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun activeState_oneMode() {
        val icon = TestStubDrawable("res123").asIcon()
        val model =
            ModesTileModel(
                isActivated = true,
                activeModes = listOf("DND"),
                icon = icon,
                quickMode = TestModeBuilder.MANUAL_DND,
            )

        val state = underTest.map(config, model)

        assertThat(state.activationState).isEqualTo(QSTileState.ActivationState.ACTIVE)
        assertThat(state.icon).isEqualTo(icon)
        assertThat(state.label).isEqualTo("DND")
        assertThat(state.secondaryLabel).isEqualTo("On")
    }

    @Test
    @EnableFlags(Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST)
    fun activeState_multipleModes() {
        val icon = TestStubDrawable("res123").asIcon()
        val model =
            ModesTileModel(
                isActivated = true,
                activeModes = listOf("Mode 1", "Mode 2", "Mode 3"),
                icon = icon,
                quickMode = TestModeBuilder.MANUAL_DND,
            )

        val state = underTest.map(config, model)

        assertThat(state.activationState).isEqualTo(QSTileState.ActivationState.ACTIVE)
        assertThat(state.icon).isEqualTo(icon)
        assertThat(state.label).isEqualTo("3 Modes")
        assertThat(state.secondaryLabel).isEqualTo("On")
    }

    @Test
    fun state_modelHasIconResId_includesIconResId() {
        val icon = TestStubDrawable("res123").asIcon(res = 123)
+6 −0
Original line number Diff line number Diff line
@@ -1215,6 +1215,12 @@
        }
    </string>

    <!-- Modes: title for when multiple modes are active.[CHAR LIMIT=20] -->
    <string name="zen_modes_multiple_on_title">%s Modes</string>

    <!-- Modes: subtitle for when multiple modes are active. Plural. [CHAR LIMIT=20] -->
    <string name="zen_modes_multiple_on_status">On</string>

    <!-- Zen mode: Priority only introduction message on first use -->
    <string name="zen_priority_introduction">You won\'t be disturbed by sounds and vibrations, except from alarms, reminders, events, and callers you specify. You\'ll still hear anything you choose to play including music, videos, and games.</string>

+21 −2
Original line number Diff line number Diff line
@@ -41,7 +41,13 @@ constructor(@ShadeDisplayAware private val resources: Resources, val theme: Reso
                } else {
                    QSTileState.ActivationState.INACTIVE
                }
            secondaryLabel = getModesStatus(data, resources)
            if (android.app.Flags.modesUiTileReactivatesLast()) {
                label = getLabel(data, resources)
                secondaryLabel = getSecondaryLabel(data, resources)
            } else {
                // label is fixed, set by QSTileState.build() from uiConfig
                secondaryLabel = legacyGetModesStatus(data, resources)
            }
            contentDescription = "$label. $secondaryLabel"
            supportedActions =
                setOf(
@@ -53,7 +59,20 @@ constructor(@ShadeDisplayAware private val resources: Resources, val theme: Reso
            expandedAccessibilityClass = Button::class
        }

    private fun getModesStatus(data: ModesTileModel, resources: Resources): String {
    private fun getLabel(data: ModesTileModel, resources: Resources): String {
        return if (data.activeModes.size >= 2)
            resources.getString(R.string.zen_modes_multiple_on_title, data.activeModes.size)
        else if (data.activeModes.size == 1) data.activeModes.first()
        else resources.getString(R.string.quick_settings_modes_label)
    }

    private fun getSecondaryLabel(data: ModesTileModel, resources: Resources): String {
        return if (data.activeModes.size >= 2)
            resources.getString(R.string.zen_modes_multiple_on_status)
        else if (data.activeModes.size == 1) resources.getString(R.string.zen_mode_on) else ""
    }

    private fun legacyGetModesStatus(data: ModesTileModel, resources: Resources): String {
        val msgFormat =
            MessageFormat(resources.getString(R.string.zen_mode_active_modes), Locale.getDefault())
        val count = data.activeModes.count()