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

Commit 2e2b226a authored by Jan Lanik's avatar Jan Lanik Committed by Jan Láník
Browse files

a11y labels for status bar chips

Bug: 414566470
Flag: com.android.systemui.expanded_privacy_indicators_on_large_screen
Test: manual verification
Change-Id: I86ef4036038b3733b6ddc524e5b4b5395c763df3
parent 92d8a508
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)"
    }