Onboarding wizard: the Next / Previous buttons have no accessible label
Description
I am a blind user and I set Aegis up for the first time today using TalkBack.
The two navigation buttons at the bottom of the onboarding wizard are announced as simply "Button", with no label, so there is no way to know which one moves forward and which one moves back.
I did get through the setup, but by inference rather than because the app told me anything: I knew the last slide was the last one, and I reasoned that the button which had been taking me forward, in the same position on screen, had to be the one that finishes. That works, but it is a poor experience for something as basic as the first screens of an app.
Where it comes from
In app/src/main/res/layout/activity_intro.xml, both buttons are icon-only MaterialButtons with neither android:text nor android:contentDescription:
<com.google.android.material.button.MaterialButton
android:id="@+id/btnPrevious"
app:icon="@drawable/ic_outline_arrow_left_alt_24"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnNext"
app:icon="@drawable/ic_outline_arrow_right_alt_24"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal" />In IntroBaseActivity.java, the buttons only ever receive a click listener, a visibility, an icon and an enabled state. No label is set at runtime:
_btnPrevious = findViewById(R.id.btnPrevious);
_btnPrevious.setOnClickListener(v -> goToPreviousSlide());
_btnNext = findViewById(R.id.btnNext);
_btnNext.setOnClickListener(v -> goToNextSlide());A second, related problem
On the last slide, the same activity swaps the icon of the Next button to signal that it now finishes the setup:
_btnNext.setIconResource(R.drawable.ic_outline_check_24);A sighted user gets that cue from the arrow turning into a checkmark. A screen reader user gets nothing at all, in either state, so nothing signals that the wizard is about to complete. That is exactly the step I had to deduce from the button's position.
Decorative images
Three layouts contain an ImageView with no contentDescription and no decorative marking, so they are announced as unlabeled images rather than being skipped:
fragment_welcome_slide.xml(imgLogo)fragment_done_slide.xmlactivity_auth.xml
Suggested fix
Add android:contentDescription to btnPrevious and btnNext, and update the description of btnNext wherever its icon is swapped for the checkmark, so that it announces the finishing action.
Mark the three decorative images with android:importantForAccessibility="no" so that screen readers skip them.
Environment
- Aegis 3.4.2
- Android 16, Fairphone 6
- TalkBack 17.0.1
The layout and Java excerpts above are quoted from the current master branch.
Source: beemdevelopment/Aegis