Add contentDescriptions

This commit is contained in:
Andrew 2024-06-06 11:00:51 +09:30
parent 50addd644c
commit c489765a50
8 changed files with 33 additions and 16 deletions

View File

@ -103,15 +103,15 @@ class InviteFriendFragment : Fragment() {
Text(stringResource(R.string.share))
}
TemporaryStateButton { source, temporary ->
TemporaryStateButton { source, isTemporary ->
OutlineButton(
modifier = Modifier.weight(1f)
.contentDescription("Copy button"),
interactionSource = source,
onClick = { requireContext().copyPublicKey() },
) {
AnimatedVisibility(temporary) { Text(stringResource(R.string.copied)) }
AnimatedVisibility(!temporary) { Text(stringResource(R.string.copy)) }
AnimatedVisibility(isTemporary) { Text(stringResource(R.string.copied)) }
AnimatedVisibility(!isTemporary) { Text(stringResource(R.string.copy)) }
}
}
}

View File

@ -103,6 +103,7 @@ import org.thoughtcrime.securesms.ui.SessionShieldIcon
import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider
import org.thoughtcrime.securesms.ui.components.OutlineButton
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.contentDescription
import org.thoughtcrime.securesms.ui.h8
import org.thoughtcrime.securesms.ui.small
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
@ -393,7 +394,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity(),
Spacer(Modifier.width(12.dp))
OutlineButton(
textId = R.string.continue_2,
Modifier
modifier = Modifier
.align(Alignment.CenterVertically)
.contentDescription(R.string.AccessibilityId_reveal_recovery_phrase_button),
onClick = { start<RecoveryPasswordActivity>() }

View File

@ -185,11 +185,11 @@ class LandingActivity : BaseActionBarActivity() {
showOpenUrlDialog {
button(
R.string.activity_landing_terms_of_service,
contentDescriptionRes = R.string.AccessibilityId_terms_of_service_link
contentDescriptionRes = R.string.AccessibilityId_terms_of_service_button
) { open("https://getsession.org/terms-of-service") }
button(
R.string.activity_landing_privacy_policy,
contentDescriptionRes = R.string.AccessibilityId_privacy_policy_link
contentDescriptionRes = R.string.AccessibilityId_privacy_policy_button
) { open("https://getsession.org/privacy-policy") }
}
}
@ -264,4 +264,4 @@ private fun ChatText(
)
.padding(horizontal = 16.dp, vertical = 12.dp)
)
}
}

View File

@ -128,6 +128,7 @@ fun MessageNotificationsScreen(
OutlineButton(
textId = R.string.continue_2,
modifier = Modifier
.contentDescription(R.string.AccessibilityId_continue)
.align(Alignment.CenterHorizontally)
.width(262.dp),
onClick = onContinue

View File

@ -124,7 +124,12 @@ class PickDisplayNameActivity : BaseActionBarActivity() {
)
state.error?.let {
Text(stringResource(it), style = MaterialTheme.typography.baseBold, color = MaterialTheme.colors.error)
Text(
stringResource(it),
modifier = Modifier.contentDescription(R.string.AccessibilityId_error_message),
style = MaterialTheme.typography.baseBold,
color = MaterialTheme.colors.error
)
}
Spacer(modifier = Modifier.weight(2f))
@ -132,6 +137,7 @@ class PickDisplayNameActivity : BaseActionBarActivity() {
OutlineButton(
textId = R.string.continue_2,
modifier = Modifier
.contentDescription(R.string.AccessibilityId_continue)
.align(Alignment.CenterHorizontally)
.width(262.dp),
onClick = onContinue,

View File

@ -24,13 +24,16 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import androidx.core.content.ContentProviderCompat.requireContext
import network.loki.messenger.R
import org.thoughtcrime.securesms.BaseActionBarActivity
import org.thoughtcrime.securesms.preferences.copyPublicKey
import org.thoughtcrime.securesms.showSessionDialog
import org.thoughtcrime.securesms.ui.AppTheme
import org.thoughtcrime.securesms.ui.CellWithPaddingAndMargin
@ -69,7 +72,7 @@ class RecoveryPasswordActivity : BaseActionBarActivity() {
showSessionDialog {
title(R.string.recoveryPasswordHidePermanently)
htmlText(R.string.recoveryPasswordHidePermanentlyDescription1)
destructiveButton(R.string.continue_2) { onHideConfirm() }
destructiveButton(R.string.continue_2, R.string.AccessibilityId_continue) { onHideConfirm() }
cancelButton()
}
}
@ -110,6 +113,7 @@ fun RecoveryPassword(
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier
.contentDescription(R.string.AccessibilityId_recovery_password)
.verticalScroll(rememberScrollState())
.padding(bottom = 16.dp)
) {
@ -141,6 +145,7 @@ fun RecoveryPasswordCell(seed: String, copySeed:() -> Unit = {}) {
Text(
seed,
modifier = Modifier
.contentDescription(R.string.AccessibilityId_hide_recovery_password_button)
.padding(vertical = 24.dp)
.border(
width = 1.dp,
@ -167,14 +172,15 @@ fun RecoveryPasswordCell(seed: String, copySeed:() -> Unit = {}) {
AnimatedVisibility(!showQr) {
Row(horizontalArrangement = Arrangement.spacedBy(32.dp)) {
TemporaryStateButton { source, temporary ->
TemporaryStateButton { source, isTemporary ->
OutlineButton(
modifier = Modifier.weight(1f),
modifier = Modifier.weight(1f)
.contentDescription(R.string.AccessibilityId_copy_button),
interactionSource = source,
onClick = { copySeed() },
onClick = copySeed,
) {
AnimatedVisibility(temporary) { Text(stringResource(R.string.copied)) }
AnimatedVisibility(!temporary) { Text(stringResource(R.string.copy)) }
AnimatedVisibility(isTemporary) { Text(stringResource(R.string.copied)) }
AnimatedVisibility(!isTemporary) { Text(stringResource(R.string.copy)) }
}
}
OutlineButton(textId = R.string.qrView, modifier = Modifier.weight(1f), onClick = { showQr = !showQr })

View File

@ -283,7 +283,7 @@ fun Modifier.contentDescription(text: GetString?): Modifier {
}
@Composable
fun Modifier.contentDescription(id: Int?): Modifier {
fun Modifier.contentDescription(@StringRes id: Int?): Modifier {
val context = LocalContext.current
return id?.let { semantics { contentDescription = context.getString(it) } } ?: this
}

View File

@ -134,6 +134,7 @@
<string name="AccessibilityId_username">Username</string>
<string name="AccessibilityId_privacy">Privacy</string>
<string name="AccessibilityId_recovery_password_menu_item">Recovery password menu item</string>
<string name="AccessibilityId_recovery_password">Recovery password</string>
<string name="AccessibilityId_edit_user_nickname">Edit user nickname</string>
<string name="AccessibilityId_apply">Apply</string>
<string name="AccessibilityId_cancel">Cancel</string>
@ -1111,7 +1112,8 @@
<string name="AccessibilityId_create_account_button">Create account button</string>
<string name="AccessibilityId_restore_account_button">Restore your session button</string>
<string name="AccessibilityId_privacy_policy_link">Privacy policy link</string>
<string name="AccessibilityId_terms_of_service_link">Terms of service link</string>
<string name="AccessibilityId_terms_of_service_button">Terms of service button</string>
<string name="AccessibilityId_privacy_policy_button">Privacy policy button</string>
<string name="AccessibilityId_loading_animation">Loading animation</string>
<string name="AccessibilityId_recovery_phrase_input">Recovery phrase input</string>
<string name="AccessibilityId_error_message">Error message</string>
@ -1136,4 +1138,5 @@
<string name="this_qr_code_does_not_contain_an_account_id">This QR code does not contain an Account ID.</string>
<string name="AccessibilityId_invite_friend_button">Invite friend button</string>
<string name="AccessibilityId_help_desk_link">Help desk link</string>
<string name="AccessibilityId_copy_button">Copy button</string>
</resources>