Skip to content
Snippets Groups Projects
Unverified Commit d598a6cf authored by axelherbstreith's avatar axelherbstreith Committed by GitHub
Browse files

Contact Journal Day date is not announced (EXPOSUREAPP-4457) (#2006)

* Added TalkBack Support for toolbar in day screen

* Updated day strings to support all languages

* Update date format to support different languages in overview screen

* Linting

* Updated day screen - Title is now read automatically when opening the screen

* Removed unsused type announcement for accessibility

* reverted changes in localization

* linting

* Updated local specific date announcements

* Linting

* Updated creation of accessibility date

* Updated formatting
parent 388cbe80
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.contactdiary.ui.day
import android.os.Bundle
import android.view.View
import android.view.accessibility.AccessibilityEvent
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.navArgs
import com.google.android.material.tabs.TabLayoutMediator
......@@ -63,7 +64,7 @@ class ContactDiaryDayFragment : Fragment(R.layout.contact_diary_day_fragment), A
viewModel.uiState.observe2(this) {
binding.contactDiaryDayHeader.title = it.dayText(requireContext())
binding.contentContainer.contentDescription = it.dayText(requireContext())
binding.contactDiaryDayHeader.contentDescription = it.dayTextContentDescription(requireContext())
}
viewModel.routeToScreen.observe2(this) {
......@@ -84,4 +85,9 @@ class ContactDiaryDayFragment : Fragment(R.layout.contact_diary_day_fragment), A
}
}
}
override fun onResume() {
super.onResume()
binding.contentContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
}
}
......@@ -7,6 +7,7 @@ import com.squareup.inject.assisted.AssistedInject
import de.rki.coronawarnapp.contactdiary.ui.day.tabs.ContactDiaryDayTab
import de.rki.coronawarnapp.contactdiary.util.getLocale
import de.rki.coronawarnapp.contactdiary.util.toFormattedDay
import de.rki.coronawarnapp.contactdiary.util.toFormattedDayForAccessibility
import de.rki.coronawarnapp.ui.SingleLiveEvent
import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
......@@ -24,7 +25,9 @@ class ContactDiaryDayViewModel @AssistedInject constructor(
val routeToScreen: SingleLiveEvent<ContactDiaryDayNavigationEvents> = SingleLiveEvent()
val uiState = displayedDay.map { day ->
UIState(dayText = { day.toFormattedDay(it.getLocale()) })
UIState(
dayText = { day.toFormattedDay(it.getLocale()) },
dayTextContentDescription = { day.toFormattedDayForAccessibility(it.getLocale()) })
}.asLiveData()
fun onCreateButtonClicked(activeTab: ContactDiaryDayTab) {
......@@ -41,7 +44,8 @@ class ContactDiaryDayViewModel @AssistedInject constructor(
}
data class UIState(
val dayText: (Context) -> String
val dayText: (Context) -> String,
val dayTextContentDescription: (Context) -> String
)
@AssistedInject.Factory
......
......@@ -9,6 +9,7 @@ import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.contactdiary.ui.overview.adapter.ContactDiaryOverviewAdapter
import de.rki.coronawarnapp.contactdiary.util.getLocale
import de.rki.coronawarnapp.contactdiary.util.toFormattedDay
import de.rki.coronawarnapp.contactdiary.util.toFormattedDayForAccessibility
import de.rki.coronawarnapp.databinding.ContactDiaryOverviewFragmentBinding
import de.rki.coronawarnapp.util.di.AutoInject
import de.rki.coronawarnapp.util.ui.doNavigate
......@@ -30,6 +31,7 @@ class ContactDiaryOverviewFragment : Fragment(R.layout.contact_diary_overview_fr
super.onViewCreated(view, savedInstanceState)
val adapter = ContactDiaryOverviewAdapter(
{ it.toFormattedDay(requireContext().getLocale()) },
{ it.toFormattedDayForAccessibility(requireContext().getLocale()) },
{ vm.onItemPress(it) }
)
......
......@@ -9,6 +9,7 @@ import org.joda.time.LocalDate
class ContactDiaryOverviewAdapter(
private val dateFormatter: (LocalDate) -> String,
private val dateFormatterForAccessibility: (LocalDate) -> String,
private val onItemSelectionListener: (ListItem) -> Unit
) :
RecyclerView.Adapter<ContactDiaryOverviewAdapter.OverviewElementHolder>() {
......@@ -34,7 +35,7 @@ class ContactDiaryOverviewAdapter(
override fun getItemCount() = elements.size
override fun onBindViewHolder(holder: OverviewElementHolder, position: Int) {
holder.bind(elements[position], dateFormatter, onItemSelectionListener)
holder.bind(elements[position], dateFormatter, dateFormatterForAccessibility, onItemSelectionListener)
}
class OverviewElementHolder(private val viewDataBinding: ContactDiaryOverviewListItemBinding) :
......@@ -48,10 +49,14 @@ class ContactDiaryOverviewAdapter(
fun bind(
item: ListItem,
dateFormatter: (LocalDate) -> String,
dateFormatterForAccessibility: (LocalDate) -> String,
onElementSelectionListener: (ListItem) -> Unit
) {
viewDataBinding.contactDiaryOverviewElementName.text = dateFormatter(item.date)
viewDataBinding.contactDiaryOverviewElementName.contentDescription =
dateFormatterForAccessibility(item.date)
viewDataBinding.contactDiaryOverviewElementBody.setOnClickListener { onElementSelectionListener(item) }
viewDataBinding.contactDiaryOverviewNestedElementGroup.isGone = item.data.isEmpty()
......
......@@ -38,6 +38,14 @@ fun LocalDate.toFormattedDay(locale: Locale): String {
DateTimeFormat.shortDate().withLocale(locale).print(this)
}
fun LocalDate.toFormattedDayForAccessibility(locale: Locale): String {
// Use two different methods to get the final date format (Weekday, Longdate)
// because the custom pattern of toString() does not localize characters like "/" or "."
// For accessibility DateTimeFormat.longDate() is required since shortDate() may read the date in the wrong format
return "${toString("EEEE", locale)}, " +
DateTimeFormat.longDate().withLocale(locale).print(this)
}
fun String.formatContactDiaryNameField(maxLength: Int): String {
val newName = if (isNotBlank()) {
trim()
......
......@@ -6,8 +6,8 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true">
android:focusable="true"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/contact_diary_day_header"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment