Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Talking with TalkBack (GDG Sydney DevFest 2019)

Artaza
November 16, 2019

Talking with TalkBack (GDG Sydney DevFest 2019)

Accessible apps can mean the world to users with disabilities but how can we ensure people using Talkback experience your app in all its glory and utilize all its features? In this session, I will show how to effectively leverage some of TalkBack's capabilities to deliver a better experience and go through some common UI/UX patterns and their Talkback-friendly approaches.

Artaza

November 16, 2019
Tweet

Other Decks in Programming

Transcript

  1. Talkback overview Screen reader Navigate using linear navigation or explore

    by touch Common gestures Accessibility shortcut
  2. Talkback overview Screen reader Navigate using linear navigation or explore

    by touch Common gestures Accessibility shortcut Display speech output
  3. Label editable content <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Numbers only"_/> Numbers only

    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Age" /> Age
  4. Label editable content <EditText android:id="@+id/age_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Numbers only"_/> Numbers

    only <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:labelFor="@id/age_edit_text" android:text="Age" /> Age
  5. Label editable content <EditText android:id="@+id/age_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Numbers only"_/> <TextView

    android:layout_width="wrap_content" android:layout_height="wrap_content" android:labelFor="@id/age_edit_text" android:text="Age" /> Age Age Numbers only
  6. Label editable content <EditText android:id="@+id/age_edit_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Numbers only"_/> Numbers

    only <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:labelFor="@id/age_edit_text" android:text="Age" /> Age Numbers only Edit box for Age
  7. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  8. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  9. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:focusable="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  10. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  11. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:screenReaderFocusable="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  12. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  13. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:focusable="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  14. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:focusable="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  15. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:focusable="true" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  16. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout android:focusable="true" android:contentDescription=“Talking with Talkback by Artaza Aziz" …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  17. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/> <TextView …/>
  18. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> <TextView …/> <TextView …/> <FrameLayout …> </FrameLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> <FrameLayout …> </FrameLayout …> <TextView …/> <TextView …/> <FrameLayout …> </FrameLayout …>
  19. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> <TextView …/> <TextView …/> <FrameLayout android:focusable="true"…> </FrameLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> <FrameLayout android:focusable="true"…> </FrameLayout …> <TextView …/> <TextView …/> <FrameLayout android:focusable="true"…> </FrameLayout …>
  20. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> <TextView …/> <TextView …/> </FrameLayout …> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…>
  21. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> <TextView …/> <TextView …/> </FrameLayout …> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…>
  22. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> <TextView …/> <TextView …/> </FrameLayout …> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…>
  23. Structure content Talk details Speaker Artaza Aziz Title Talking with

    TalkBack Content level Beginner <ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> </ConstraintLayout …> <TextView …/> <TextView …/> </FrameLayout …> <TextView …/> <TextView …/> </FrameLayout …> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…> <FrameLayout android:focusable="true"…>
  24. Announce dynamically updating content SUBMIT Status: In Progress <TextView android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:text="Status: In Progress" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBMIT" />
  25. Announce dynamically updating content SUBMIT Status: In Progress <TextView android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:accessibilityLiveRegion="polite" android:text="Status: In Progress" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBMIT" />
  26. Announce dynamically updating content SUBMIT Status: In Progress <TextView android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:accessibilityLiveRegion="polite" android:text="Status: In Progress" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBMIT" />
  27. Announce dynamically updating content SUBMIT <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:accessibilityLiveRegion="polite" android:text="Status:

    In Progress" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBMIT" /> Submit Button, Double tap to activate Status: In Progress
  28. Announce dynamically updating content SUBMIT <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:accessibilityLiveRegion="polite" android:text="Status:

    In Progress" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBMIT" /> Status Submitted Status: Submitted
  29. Modify default spoken text SUBMIT Place order, Button. Double tap

    to activate android:contentDescription=“Place order" android:text="Submit"
  30. Modify default spoken text SUBMIT Place order, Button. Double tap

    to place order ViewCompat.replaceAccessibilityAction( button, AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, "place order" ) { v, args -> placeOrder() true }_
  31. Modify default spoken text SUBMIT Place order, Button. Double tap

    to place order ViewCompat.replaceAccessibilityAction( button, AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, "place order" ) { v, args -> placeOrder() true }_
  32. Modify default spoken text SUBMIT Place order, Button. Double tap

    to place order ViewCompat.replaceAccessibilityAction( button, AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, "place order" ) { v, args -> placeOrder() true }_
  33. Other considerations • Try to avoid abbreviations and acronyms •

    Numbers might require to be space separated • Try not to have another set of flow just for TalkBack users • Extend from lowest in hierarchy when extending custom views • Do not create an inconsistent experience