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

Commit 77e954ee authored by Jan Láník's avatar Jan Láník Committed by Android (Google) Code Review
Browse files

Merge "a11y labels for status bar chips" into main

parents f2e9f1e5 2e2b226a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -709,6 +709,13 @@
    <!-- Content description of the display brightness slider (not shown on the screen). [CHAR LIMIT=NONE] -->
    <string name="accessibility_brightness">Display brightness</string>

    <!-- Content description for AV chip when camera is in use.-->
    <string name="accessibility_camera_in_use">Camera in use</string>
    <!-- Content description for AV chip when microphone is in use.-->
    <string name="accessibility_microphone_in_use">Microphone in use</string>
    <!-- Content description for AV chip when microphone is in use.-->
    <string name="accessibility_camera_and_microphone_in_use">Camera and microphone in use</string>

    <!-- Content description of the charging indicator on Ambient Display (lower-power version of the lock screen). [CHAR LIMIT=NONE] -->

    <!-- Title of dialog shown when mobile data usage has exceeded limit and has been disabled. [CHAR LIMIT=48] -->
+14 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.statusbar.featurepods.av.ui.viewmodel

import android.content.Context
import androidx.compose.runtime.getValue
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.lifecycle.ExclusiveActivatable
@@ -40,7 +42,7 @@ import kotlinx.coroutines.flow.map
class AvControlsChipViewModel
@AssistedInject
constructor(
    @Application applicationContext: Context,
    @Application val applicationContext: Context,
    avControlsChipInteractor: AvControlsChipInteractor,
) : StatusBarPopupChipViewModel, ExclusiveActivatable() {
    companion object {
@@ -73,10 +75,21 @@ constructor(
                    chipText = null,
                    colors = ColorsModel.AvControlsTheme,
                    hoverBehavior = HoverBehavior.None,
                    contentDescription =
                        contentDescription(sensorActivityModel = sensorActivityModel),
                )
        }
    }

    private fun contentDescription(sensorActivityModel: SensorActivityModel.Active): String? =
        when (sensorActivityModel.sensors) {
            SensorActivityModel.Active.Sensors.CAMERA -> R.string.accessibility_camera_in_use
            SensorActivityModel.Active.Sensors.MICROPHONE ->
                R.string.accessibility_microphone_in_use
            SensorActivityModel.Active.Sensors.CAMERA_AND_MICROPHONE ->
                R.string.accessibility_camera_and_microphone_in_use
        }.let { ContentDescription.Resource(it).loadContentDescription(applicationContext) }

    private fun icons(sensorActivityModel: SensorActivityModel.Active): List<ChipIcon> =
        when (sensorActivityModel.sensors) {
            SensorActivityModel.Active.Sensors.CAMERA -> listOf(CAMERA_DRAWABLE)
+14 −7
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import androidx.compose.ui.graphics.CompositingStrategy
import androidx.compose.ui.layout.layout
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.rememberTextMeasurer
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
@@ -90,7 +92,12 @@ fun StatusBarPopupChip(
    Box(
        contentAlignment = Alignment.Center,
        modifier =
            modifier.minimumInteractiveComponentSize().thenIf(!isPopupShown) {
            modifier
                .minimumInteractiveComponentSize()
                .thenIf(viewModel.contentDescription != null) {
                    Modifier.semantics { contentDescription = viewModel.contentDescription!! }
                }
                .thenIf(!isPopupShown) {
                    Modifier.clickable(
                        onClick = { viewModel.showPopup() },
                        indication = null,
+1 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ sealed class PopupChipModel {
        val showPopup: () -> Unit = {},
        val hidePopup: () -> Unit = {},
        val hoverBehavior: HoverBehavior = HoverBehavior.None,
        val contentDescription: String? = null,
    ) : PopupChipModel() {
        override val logName = "Shown(id=$chipId, toggled=$isPopupShown)"
    }