New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Native Editor - VoiceOver improvements #4737
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice – one note below about localizing a string. I didn't run into that "Loading editor text" VoiceOver because I suppose my test device isn't slow enough.
class WKSourceEditorTextView: UITextView { | ||
override func accessibilityActivate() -> Bool { | ||
|
||
UIAccessibility.post(notification: .announcement, argument: "Loading editor text.") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Patterning usage elsewhere, should we localize this argument string?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 Good catch!
@@ -66,7 +67,7 @@ public struct WKSourceEditorLocalizedStrings { | |||
let replaceTypeSingleAccessibility: String | |||
let replaceTypeAllAccessibility: String | |||
|
|||
public init(keyboardTextFormattingTitle: String, keyboardParagraph: String, keyboardHeading: String, keyboardSubheading1: String, keyboardSubheading2: String, keyboardSubheading3: String, keyboardSubheading4: String, findAndReplaceTitle: String, replaceTypeSingle: String, replaceTypeAll: String, replaceTextfieldPlaceholder: String, replaceTypeContextMenuTitle: String, toolbarOpenTextFormatMenuButtonAccessibility: String, toolbarReferenceButtonAccessibility: String, toolbarLinkButtonAccessibility: String, toolbarTemplateButtonAccessibility: String, toolbarImageButtonAccessibility: String, toolbarFindButtonAccessibility: String, toolbarExpandButtonAccessibility: String, toolbarListUnorderedButtonAccessibility: String, toolbarListOrderedButtonAccessibility: String, toolbarIndentIncreaseButtonAccessibility: String, toolbarIndentDecreaseButtonAccessibility: String, toolbarCursorUpButtonAccessibility: String, toolbarCursorDownButtonAccessibility: String, toolbarCursorPreviousButtonAccessibility: String, toolbarCursorNextButtonAccessibility: String, toolbarBoldButtonAccessibility: String, toolbarItalicsButtonAccessibility: String, keyboardCloseTextFormatMenuButtonAccessibility: String, keyboardBoldButtonAccessibility: String, keyboardItalicsButtonAccessibility: String, keyboardUnderlineButtonAccessibility: String, keyboardStrikethroughButtonAccessibility: String, keyboardReferenceButtonAccessibility: String, keyboardLinkButtonAccessibility: String, keyboardListUnorderedButtonAccessibility: String, keyboardListOrderedButtonAccessibility: String, keyboardIndentIncreaseButtonAccessibility: String, keyboardIndentDecreaseButtonAccessibility: String, keyboardSuperscriptButtonAccessibility: String, keyboardSubscriptButtonAccessibility: String, keyboardTemplateButtonAccessibility: String, keyboardCommentButtonAccessibility: String, findTextFieldAccessibility: String, findClearButtonAccessibility: String, findCurrentMatchInfoFormatAccessibility: String, findCurrentMatchInfoZeroResultsAccessibility: String, findCloseButtonAccessibility: String, findNextButtonAccessibility: String, findPreviousButtonAccessibility: String, replaceTextFieldAccessibility: String, replaceClearButtonAccessibility: String, replaceButtonAccessibilityFormat: String, replaceTypeButtonAccessibilityFormat: String, replaceTypeSingleAccessibility: String, replaceTypeAllAccessibility: String) { | |||
public init(keyboardTextFormattingTitle: String, keyboardParagraph: String, keyboardHeading: String, keyboardSubheading1: String, keyboardSubheading2: String, keyboardSubheading3: String, keyboardSubheading4: String, findAndReplaceTitle: String, replaceTypeSingle: String, replaceTypeAll: String, replaceTextfieldPlaceholder: String, replaceTypeContextMenuTitle: String, toolbarOpenTextFormatMenuButtonAccessibility: String, toolbarReferenceButtonAccessibility: String, toolbarLinkButtonAccessibility: String, toolbarTemplateButtonAccessibility: String, toolbarImageButtonAccessibility: String, toolbarFindButtonAccessibility: String, toolbarExpandButtonAccessibility: String, toolbarListUnorderedButtonAccessibility: String, toolbarListOrderedButtonAccessibility: String, toolbarIndentIncreaseButtonAccessibility: String, toolbarIndentDecreaseButtonAccessibility: String, toolbarCursorUpButtonAccessibility: String, toolbarCursorDownButtonAccessibility: String, toolbarCursorPreviousButtonAccessibility: String, toolbarCursorNextButtonAccessibility: String, toolbarBoldButtonAccessibility: String, toolbarItalicsButtonAccessibility: String, keyboardCloseTextFormatMenuButtonAccessibility: String, keyboardBoldButtonAccessibility: String, keyboardItalicsButtonAccessibility: String, keyboardUnderlineButtonAccessibility: String, keyboardStrikethroughButtonAccessibility: String, keyboardReferenceButtonAccessibility: String, keyboardLinkButtonAccessibility: String, keyboardListUnorderedButtonAccessibility: String, keyboardListOrderedButtonAccessibility: String, keyboardIndentIncreaseButtonAccessibility: String, keyboardIndentDecreaseButtonAccessibility: String, keyboardSuperscriptButtonAccessibility: String, keyboardSubscriptButtonAccessibility: String, keyboardTemplateButtonAccessibility: String, keyboardCommentButtonAccessibility: String, wikitextEditorAccessibility: String, findTextFieldAccessibility: String, findClearButtonAccessibility: String, findCurrentMatchInfoFormatAccessibility: String, findCurrentMatchInfoZeroResultsAccessibility: String, findCloseButtonAccessibility: String, findNextButtonAccessibility: String, findPreviousButtonAccessibility: String, replaceTextFieldAccessibility: String, replaceClearButtonAccessibility: String, replaceButtonAccessibilityFormat: String, replaceTypeButtonAccessibilityFormat: String, replaceTypeSingleAccessibility: String, replaceTypeAllAccessibility: String) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's an interesting situation we've backed ourselves into transiting localizations into Components through these structs and this pattern because of, in practice, how verbose and exploded our call sites become. 🤠 To be clear, I'm ok with this pattern because even though it's verbose, it's at least 100% clear about the components data needs over something like an arbitrary Dictionary
. But it may be worth brainstorming a little during an eng. sync as a group to see if we can think of any cleaner alternatives (for the sake of the client call sites) in the future.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed
Phabricator:
https://phabricator.wikimedia.org/T347870#9500666
Notes
This PR attempts to smooth over some of the editor VoiceOver handling.
Test Steps