Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mystery Meat 2.0 – Making hidden mobile interactions accessible

880 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
  • Be the first to comment

  • Be the first to like this

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

×