Skip to content

Commit eb37805

Browse files
fix(a11y): Ensure images always have a contentDescription, or null in case it is decorative
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
1 parent 7fc2ae0 commit eb37805

9 files changed

Lines changed: 79 additions & 8 deletions

File tree

app/src/main/java/com/nextcloud/client/assistant/AssistantScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ private fun InputBar(sessionId: Long?, selectedTaskType: TaskTypeData?, viewMode
315315
) {
316316
Icon(
317317
painter = painterResource(id = R.drawable.ic_send),
318-
contentDescription = "Send message",
318+
contentDescription = stringResource(R.string.assistant_screen_send_message),
319319
tint = MaterialTheme.colorScheme.primary
320320
)
321321
}

app/src/main/java/com/nextcloud/client/assistant/conversation/ConversationScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ fun ConversationScreen(viewModel: ConversationViewModel, close: () -> Unit, open
8888
) {
8989
Icon(
9090
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
91-
contentDescription = "go back to assistant page"
91+
contentDescription = stringResource(
92+
R.string.assistant_screen_conversations_go_back_to_assistant
93+
)
9294
)
9395
}
9496
Spacer(modifier = Modifier.width(8.dp))

app/src/main/java/com/nextcloud/client/assistant/extensions/TaskExtensions.kt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package com.nextcloud.client.assistant.extensions
1111

1212
import android.content.Context
13+
import androidx.compose.ui.res.stringResource
1314
import com.nextcloud.utils.date.DateFormatPattern
1415
import com.nextcloud.utils.date.DateFormatter
1516
import com.owncloud.android.R
@@ -46,6 +47,13 @@ fun Task.getStatusIcon(capability: OCCapability): Int =
4647
getStatusIconV1()
4748
}
4849

50+
fun Task.getStatusIconDescription(capability: OCCapability): Int =
51+
if (capability.version.isNewerOrEqual(NextcloudVersion.nextcloud_30)) {
52+
getStatusIconDescriptionV2()
53+
} else {
54+
getStatusIconDescriptionV1()
55+
}
56+
4957
private fun Task.getStatusIconV1(): Int = when (status) {
5058
"0" -> {
5159
R.drawable.ic_unknown
@@ -67,6 +75,27 @@ private fun Task.getStatusIconV1(): Int = when (status) {
6775
}
6876
}
6977

78+
private fun Task.getStatusIconDescriptionV1(): Int = when (status) {
79+
"0" -> {
80+
R.string.assistant_task_status_unknown
81+
}
82+
"1" -> {
83+
R.string.assistant_task_status_scheduled
84+
}
85+
"2" -> {
86+
R.string.assistant_task_status_running
87+
}
88+
"3" -> {
89+
R.string.assistant_task_status_successful
90+
}
91+
"4" -> {
92+
R.string.assistant_task_status_failed
93+
}
94+
else -> {
95+
R.string.assistant_task_status_unknown
96+
}
97+
}
98+
7099
private fun Task.getStatusIconV2(): Int = when (status) {
71100
"STATUS_UNKNOWN" -> {
72101
R.drawable.ic_unknown
@@ -88,6 +117,27 @@ private fun Task.getStatusIconV2(): Int = when (status) {
88117
}
89118
}
90119

120+
private fun Task.getStatusIconDescriptionV2(): Int = when (status) {
121+
"STATUS_UNKNOWN" -> {
122+
R.string.assistant_task_status_unknown
123+
}
124+
"STATUS_SCHEDULED" -> {
125+
R.string.assistant_task_status_scheduled
126+
}
127+
"STATUS_RUNNING" -> {
128+
R.string.assistant_task_status_running
129+
}
130+
"STATUS_SUCCESSFUL" -> {
131+
R.string.assistant_task_status_successful
132+
}
133+
"STATUS_FAILED" -> {
134+
R.string.assistant_task_status_failed
135+
}
136+
else -> {
137+
R.string.assistant_task_status_unknown
138+
}
139+
}
140+
91141
@Suppress("MagicNumber")
92142
fun Task.getModifiedAtRepresentation(context: Context): String? {
93143
if (lastUpdated == null) {

app/src/main/java/com/nextcloud/client/assistant/task/TaskStatusView.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@ import androidx.compose.ui.graphics.ColorFilter
2424
import androidx.compose.ui.platform.LocalContext
2525
import androidx.compose.ui.res.colorResource
2626
import androidx.compose.ui.res.painterResource
27+
import androidx.compose.ui.res.stringResource
2728
import androidx.compose.ui.tooling.preview.Preview
2829
import androidx.compose.ui.unit.dp
2930
import com.nextcloud.client.assistant.extensions.getModifiedAtRepresentation
3031
import com.nextcloud.client.assistant.extensions.getStatusIcon
32+
import com.nextcloud.client.assistant.extensions.getStatusIconDescription
3133
import com.owncloud.android.R
3234
import com.owncloud.android.lib.resources.assistant.v2.model.Task
3335
import com.owncloud.android.lib.resources.assistant.v2.model.TaskInput
@@ -46,13 +48,17 @@ fun TaskStatusView(task: Task, capability: OCCapability) {
4648
verticalAlignment = Alignment.CenterVertically
4749
) {
4850
val iconId = task.getStatusIcon(capability)
51+
val iconDescriptionId = task.getStatusIconDescription(capability)
4952
val description = task.getModifiedAtRepresentation(context)
5053

5154
Image(
5255
painter = painterResource(id = iconId),
5356
modifier = Modifier.size(16.dp),
5457
colorFilter = ColorFilter.tint(color = colorResource(R.color.text_color)),
55-
contentDescription = "status icon"
58+
contentDescription = stringResource(
59+
R.string.assistant_task_status_text,
60+
stringResource(iconDescriptionId)
61+
)
5662
)
5763

5864
description?.let {

app/src/main/java/com/nextcloud/client/assistant/task/TaskView.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import androidx.compose.ui.Alignment
3333
import androidx.compose.ui.Modifier
3434
import androidx.compose.ui.draw.clip
3535
import androidx.compose.ui.res.colorResource
36+
import androidx.compose.ui.res.stringResource
3637
import androidx.compose.ui.text.font.FontWeight
3738
import androidx.compose.ui.text.style.TextAlign
3839
import androidx.compose.ui.tooling.preview.Preview
@@ -112,7 +113,7 @@ fun TaskView(task: Task, capability: OCCapability, showTaskActions: () -> Unit)
112113
) {
113114
Icon(
114115
imageVector = Icons.Filled.MoreVert,
115-
contentDescription = "More button",
116+
contentDescription = stringResource(R.string.overflow_menu),
116117
tint = colorResource(R.color.text_color)
117118
)
118119
}

app/src/main/java/com/nextcloud/client/assistant/taskDetail/TaskDetailBottomSheet.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ fun TaskDetailBottomSheet(task: Task, showTaskActions: () -> Unit, dismiss: () -
7777
IconButton(onClick = showTaskActions) {
7878
Icon(
7979
imageVector = Icons.Filled.MoreVert,
80-
contentDescription = "More button",
80+
contentDescription = stringResource(R.string.overflow_menu),
8181
tint = colorResource(R.color.text_color)
8282
)
8383
}
@@ -99,7 +99,7 @@ fun TaskDetailBottomSheet(task: Task, showTaskActions: () -> Unit, dismiss: () -
9999
) {
100100
Image(
101101
painter = painterResource(R.drawable.ic_assistant),
102-
contentDescription = "assistant icon",
102+
contentDescription = null,
103103
modifier = Modifier.size(12.dp)
104104
)
105105

app/src/main/java/com/nextcloud/client/assistant/taskTypes/TaskTypesRow.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.compose.runtime.Composable
2424
import androidx.compose.ui.Modifier
2525
import androidx.compose.ui.res.colorResource
2626
import androidx.compose.ui.res.painterResource
27+
import androidx.compose.ui.res.stringResource
2728
import androidx.compose.ui.tooling.preview.Preview
2829
import androidx.compose.ui.unit.dp
2930
import com.owncloud.android.R
@@ -55,7 +56,7 @@ fun TaskTypesRow(
5556
) {
5657
Icon(
5758
painter = painterResource(id = R.drawable.ic_history_back_arrow),
58-
contentDescription = "open conversation list button",
59+
contentDescription = stringResource(R.string.assistant_screen_task_bar_open_conversation_list),
5960
tint = colorResource(R.color.text_color)
6061
)
6162
}

app/src/main/java/com/nextcloud/ui/ClientIntegrationScreen.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import androidx.compose.material3.TextButton
2828
import androidx.compose.runtime.Composable
2929
import androidx.compose.ui.Modifier
3030
import androidx.compose.ui.platform.LocalContext
31+
import androidx.compose.ui.res.stringResource
3132
import androidx.compose.ui.tooling.preview.Preview
3233
import com.nextcloud.android.lib.resources.clientintegration.ClientIntegrationUI
3334
import com.nextcloud.android.lib.resources.clientintegration.Element
@@ -38,6 +39,7 @@ import com.nextcloud.android.lib.resources.clientintegration.LayoutRow
3839
import com.nextcloud.android.lib.resources.clientintegration.LayoutText
3940
import com.nextcloud.android.lib.resources.clientintegration.LayoutURL
4041
import com.nextcloud.utils.extensions.getActivity
42+
import com.owncloud.android.R
4143
import com.owncloud.android.lib.resources.status.OCCapability
4244
import com.owncloud.android.utils.DisplayUtils
4345

@@ -51,7 +53,7 @@ fun ClientIntegrationScreen(clientIntegrationUI: ClientIntegrationUI, baseUrl: S
5153
IconButton(onClick = { activity?.finish() }) {
5254
Icon(
5355
imageVector = Icons.Filled.Close,
54-
contentDescription = "Close"
56+
contentDescription = stringResource(R.string.dialog_close)
5557
)
5658
}
5759
}

app/src/main/res/values/strings.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,17 @@
6868
<string name="assistant_screen_task_create_fail_message">An error occurred while creating the task</string>
6969
<string name="assistant_screen_task_delete_success_message">Task successfully deleted</string>
7070
<string name="assistant_screen_task_delete_fail_message">An error occurred while deleting the task</string>
71+
<string name="assistant_screen_task_bar_open_conversation_list">Open conversation list</string>
72+
<string name="assistant_screen_conversations_go_back_to_assistant">Go back to assistant page</string>
73+
<string name="assistant_screen_send_message">Send message</string>
7174
<string name="assistant_task_detail_screen_input_button_title">Input</string>
7275
<string name="assistant_task_detail_screen_output_button_title">Output</string>
76+
<string name="assistant_task_status_text">Task status: %1$s</string>
77+
<string name="assistant_task_status_unknown">unknown</string>
78+
<string name="assistant_task_status_scheduled">scheduled</string>
79+
<string name="assistant_task_status_running">running</string>
80+
<string name="assistant_task_status_successful">successful</string>
81+
<string name="assistant_task_status_failed">failed</string>
7382

7483
<!-- Conversation Screen -->
7584
<string name="conversation_screen_title">Conversations</string>

0 commit comments

Comments
 (0)