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

Commit ddd434c6 authored by Anton Potapov's avatar Anton Potapov
Browse files

Add a11y descriptions for the new panel

This CL makes sure Talkback properly announces the new Volume Panel components

Flag: aconfig new_volume_panel TEAMFOOD
Test: manual on phone with Talkback on
Fixes: 328456436
Change-Id: I89c534b12b30a3d49c873b94fb9aabdf1add00c3
parent a318b083
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -910,7 +910,7 @@

        <activity
            android:name=".volume.panel.ui.activity.VolumePanelActivity"
            android:label="@string/sound_settings"
            android:label="@string/accessibility_volume_settings"
            android:excludeFromRecents="true"
            android:exported="false"
            android:launchMode="singleInstance"
+13 −2
Original line number Diff line number Diff line
@@ -32,6 +32,11 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.role
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.android.compose.animation.Expandable
@@ -52,6 +57,7 @@ class ButtonComponent(
    override fun VolumePanelComposeScope.Content(modifier: Modifier) {
        val viewModelByState by viewModelFlow.collectAsState()
        val viewModel = viewModelByState ?: return
        val label = viewModel.label.toString()

        Column(
            modifier = modifier,
@@ -59,7 +65,11 @@ class ButtonComponent(
            horizontalAlignment = Alignment.CenterHorizontally,
        ) {
            Expandable(
                modifier = Modifier.height(64.dp).fillMaxWidth(),
                modifier =
                    Modifier.height(64.dp).fillMaxWidth().semantics {
                        role = Role.Button
                        contentDescription = label
                    },
                color = MaterialTheme.colorScheme.primaryContainer,
                shape = RoundedCornerShape(28.dp),
                contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
@@ -71,7 +81,8 @@ class ButtonComponent(
                }
            }
            Text(
                text = viewModel.label.toString(),
                modifier = Modifier.clearAndSetSemantics {},
                text = label,
                style = MaterialTheme.typography.labelMedium,
                maxLines = 1,
                overflow = TextOverflow.Ellipsis,
+9 −2
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.android.systemui.common.ui.compose.Icon
@@ -50,13 +53,16 @@ class ToggleButtonComponent(
    override fun VolumePanelComposeScope.Content(modifier: Modifier) {
        val viewModelByState by viewModelFlow.collectAsState()
        val viewModel = viewModelByState ?: return
        val label = viewModel.label.toString()

        Column(
            modifier = modifier,
            verticalArrangement = Arrangement.spacedBy(12.dp),
            horizontalAlignment = Alignment.CenterHorizontally,
        ) {
            OutlinedIconToggleButton(
                modifier = Modifier.height(64.dp).fillMaxWidth(),
                modifier =
                    Modifier.height(64.dp).fillMaxWidth().semantics { contentDescription = label },
                checked = viewModel.isChecked,
                onCheckedChange = onCheckedChange,
                shape = RoundedCornerShape(28.dp),
@@ -72,7 +78,8 @@ class ToggleButtonComponent(
                Icon(modifier = Modifier.size(24.dp), icon = viewModel.icon)
            }
            Text(
                text = viewModel.label.toString(),
                modifier = Modifier.clearAndSetSemantics {},
                text = label,
                style = MaterialTheme.typography.labelMedium,
                maxLines = 1,
                overflow = TextOverflow.Ellipsis,
+13 −2
Original line number Diff line number Diff line
@@ -49,10 +49,16 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.LiveRegionMode
import androidx.compose.ui.semantics.liveRegion
import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import com.android.compose.animation.Expandable
import com.android.systemui.common.ui.compose.Icon
import com.android.systemui.common.ui.compose.toColor
import com.android.systemui.res.R
import com.android.systemui.volume.panel.component.mediaoutput.ui.viewmodel.ConnectedDeviceViewModel
import com.android.systemui.volume.panel.component.mediaoutput.ui.viewmodel.DeviceIconViewModel
import com.android.systemui.volume.panel.component.mediaoutput.ui.viewmodel.MediaOutputViewModel
@@ -74,14 +80,19 @@ constructor(
            viewModel.connectedDeviceViewModel.collectAsState()
        val deviceIconViewModel: DeviceIconViewModel? by
            viewModel.deviceIconViewModel.collectAsState()
        val clickLabel = stringResource(R.string.volume_panel_enter_media_output_settings)

        Expandable(
            modifier = Modifier.fillMaxWidth().height(80.dp),
            modifier =
                Modifier.fillMaxWidth().height(80.dp).semantics {
                    liveRegion = LiveRegionMode.Polite
                    this.onClick(label = clickLabel) { false }
                },
            color = MaterialTheme.colorScheme.surface,
            shape = RoundedCornerShape(28.dp),
            onClick = { viewModel.onBarClick(it) },
        ) { _ ->
            Row(verticalAlignment = Alignment.CenterVertically) {
            Row(modifier = Modifier, verticalAlignment = Alignment.CenterVertically) {
                connectedDeviceViewModel?.let { ConnectedDeviceText(it) }

                deviceIconViewModel?.let { ConnectedDeviceIcon(it) }
+11 −5
Original line number Diff line number Diff line
@@ -24,13 +24,16 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.android.compose.PlatformIconButton
import com.android.systemui.animation.DialogTransitionAnimator
import com.android.systemui.animation.Expandable
import com.android.systemui.res.R
@@ -101,16 +104,19 @@ constructor(
                }
            }

            PlatformIconButton(
            IconButton(
                modifier = Modifier.align(Alignment.TopEnd).size(64.dp).padding(20.dp),
                iconResource = R.drawable.ic_close,
                contentDescription = null,
                onClick = { dialog.dismiss() },
                colors =
                    IconButtonDefaults.iconButtonColors(
                        contentColor = MaterialTheme.colorScheme.outline
                    )
            ) {
                Icon(
                    painterResource(R.drawable.ic_close),
                    contentDescription = stringResource(R.string.accessibility_desc_close),
                )
            }
        }
    }
}
Loading