Mystery Meat 2.0 – Making hidden mobile interactions accessible

662 views

Published on

Mystery Meat was the unsavory term for hiding menus behind a parent link. Learn about today’s mobile version and how to make it accessible.
Accessible version: http://www.last-child.com/mystery-meat-2-accessible/

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
662
On SlideShare
0
From Embeds
0
Number of Embeds
374
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mystery Meat 2.0 – Making hidden mobile interactions accessible

  1. 1. Mystery Meat 2.0 Ted Drake, Intuit Accessibility Poonam Tathavadkar, TurboTax CSUN 2017 Slides: slideshare.net/7mary4
  2. 2. Android Touch and Hold
  3. 3. Android’s Right Click • Default:
 Touch and hold • With TalkBack:
 Double tap and hold to long press • Add context-specific menu
  4. 4. Mint Transactions
  5. 5. Developers • onLongClick
 Called when a view has been clicked and held. • Define and Show your menu • Not for vital interactions. This is a short cut.
  6. 6. iOS 3D Touch
  7. 7. 3D Touch • Peek: 
 Quick glance at relevant information and actions • Pop: 
 Open full content previewed in the Peek • Quick Actions: 
 Custom task list from app icon
  8. 8. video of experience
  9. 9. Quick Actions
  10. 10. Developers • Use accessibilityHint to suggest what’s contained within the Peek • Don’t make peek the only way to perform an action • Standard components - Accessible by default
  11. 11. Swipe Revealed Actions
  12. 12. It’s Deductible Actions
  13. 13. editActionsForRowAtIndexPath • Defines the actions to display in response to swiping the specified row. • Accessible by default • Define: • Target Action and Response • Visible Text • Background color
  14. 14. func tableView(_ tableView: UITableView, commit edi8ngStyle: UITableViewCellEdi8ngStyle, forRowAt indexPath: IndexPath) { // Don't remove this func8on, even though it's empty. It's required to allow editAc8onsForRowAtIndexPath to be called. } func tableView(_ tableView: UITableView, editAc8onsForRowAt indexPath: IndexPath) -> [UITableViewRowAc8on]? { let moreRowAc8on = UITableViewRowAc8on(style: UITableViewRowAc8onStyle.default, 8tle: "More", handler:{ac8on, indexpath in tableView.setEdi8ng(false, animated: true) let dona8on = self.dona8ons[indexPath.row] let cell = tableView.cellForRow(at: indexPath)! self.shareAc8on(dona8on as! Dona8onEn8ty, cell: cell) }); moreRowAc8on.backgroundColor = UXStyle.standardTableRowAc8onColor() let deleteRowAc8on = UITableViewRowAc8on(style: UITableViewRowAc8onStyle.default /* Destruc8ve */, 8tle: "Delete", handler:{ac8on, indexpath in do { let previousDona8onCount = self.dona8ons.count let dona8on = self.dona8ons[indexPath.row] DataAccessor.sharedInstance.addAuditRecord(ac8on: "Dona8on deleted", details: (dona8on as! Dona8onEn8ty).auditEntryDetails) try self.deleteDona8on(dona8on) self.loadDona8ons() let newDona8onCount = self.dona8ons.count if newDona8onCount == previousDona8onCount - 1 { self.tableView.deleteRows(at: [indexPath], with: .automa8c) } else { self.tableView.reloadData() } } catch let error { ErrorHandler.handleErrorWithAlert(error as NSError, viewController: self) } }); return [deleteRowAc8on, moreRowAc8on]; }
  15. 15. Swipe Based Navigation
  16. 16. Default Experience With VoiceOver
  17. 17. Swipe Navigation • Animated transition between views • Next and Back flow with every screen • Eliminates navigation buttons • No buttons? Accessibility? • Have I reached the end of the screen?
  18. 18. Detect Accessibility ON • UIAccessibility kit provides two methods • UIAccessibilityIsSwitchControlRunning • UIAccessibilityIsVoiceOverRunning • True == Show Navigation Buttons
  19. 19. State Change Notification • User enables VoiceOver while on a screen • Detect the status change • UIAccessibilitySwitchControlStatusDidChange Notification • UIAccessibilityVoiceOverStatusChanged • Refresh screen and insert navigation buttons
  20. 20. TurboTax Helper Function • How can we refactor code to detect any accessibility related settings and address them together? • Helper function to the rescue ! • NSNotificationCenter adds observers to track any settings that may require us to show buttons. • This is an OR logic. Example - if voice over OR switch control status changed, display buttons.
  21. 21. Questions and Answers

×