mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
VoiceOver improvements
This commit is contained in:
parent
ef96be345c
commit
fa0130bf8c
@ -8928,3 +8928,5 @@ Sorry for the inconvenience.";
|
||||
|
||||
"VoiceOver.Chat.NotPlayedByRecipient" = "Not played by recipient";
|
||||
"VoiceOver.Chat.NotPlayedByRecipients" = "Not played by recipients";
|
||||
|
||||
"VoiceOver.Chat.ReplyingToMessage" = "In reply to message: %@";
|
||||
|
@ -87,6 +87,8 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
private let typeIconNode: ASImageNode
|
||||
private let durationNode: ImmediateTextNode
|
||||
|
||||
private let activateAreaNode: AccessibilityAreaNode
|
||||
|
||||
private var interaction: MediaPickerInteraction?
|
||||
private var theme: PresentationTheme?
|
||||
|
||||
@ -115,9 +117,13 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
|
||||
self.durationNode = ImmediateTextNode()
|
||||
|
||||
self.activateAreaNode = AccessibilityAreaNode()
|
||||
self.activateAreaNode.accessibilityTraits = [.image]
|
||||
|
||||
super.init()
|
||||
|
||||
self.addSubnode(self.imageNode)
|
||||
self.addSubnode(self.activateAreaNode)
|
||||
|
||||
self.imageNode.contentUpdated = { [weak self] image in
|
||||
self?.spoilerNode?.setImage(image)
|
||||
@ -285,6 +291,10 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
let editingContext = interaction.editingState
|
||||
let asset = fetchResult.object(at: index)
|
||||
|
||||
if #available(iOS 15.0, *) {
|
||||
self.activateAreaNode.accessibilityLabel = "Photo \(asset.creationDate?.formatted(date: .abbreviated, time: .standard) ?? "")"
|
||||
}
|
||||
|
||||
let editedSignal = Signal<UIImage?, NoError> { subscriber in
|
||||
if let signal = editingContext.thumbnailImageSignal(forIdentifier: asset.localIdentifier) {
|
||||
let disposable = signal.start(next: { next in
|
||||
@ -411,6 +421,7 @@ final class MediaPickerGridItemNode: GridItemNode {
|
||||
self.imageNode.frame = self.bounds
|
||||
self.gradientNode.frame = CGRect(x: 0.0, y: self.bounds.height - 24.0, width: self.bounds.width, height: 24.0)
|
||||
self.typeIconNode.frame = CGRect(x: 0.0, y: self.bounds.height - 20.0, width: 19.0, height: 19.0)
|
||||
self.activateAreaNode.frame = self.bounds
|
||||
|
||||
if self.durationNode.supernode != nil {
|
||||
let durationSize = self.durationNode.updateLayout(self.bounds.size)
|
||||
|
@ -192,6 +192,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
||||
private let backgroundNode: NavigationBackgroundNode
|
||||
private let gridNode: GridNode
|
||||
fileprivate var cameraView: TGAttachmentCameraView?
|
||||
private var cameraActivateAreaNode: AccessibilityAreaNode
|
||||
private var placeholderNode: MediaPickerPlaceholderNode?
|
||||
private var manageNode: MediaPickerManageNode?
|
||||
private var scrollingArea: SparseItemGridScrollingArea
|
||||
@ -233,6 +234,10 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
||||
self.gridNode = GridNode()
|
||||
self.scrollingArea = SparseItemGridScrollingArea()
|
||||
|
||||
self.cameraActivateAreaNode = AccessibilityAreaNode()
|
||||
self.cameraActivateAreaNode.accessibilityLabel = "Camera"
|
||||
self.cameraActivateAreaNode.accessibilityTraits = [.button]
|
||||
|
||||
super.init()
|
||||
|
||||
if case .assets(nil) = controller.subject {
|
||||
@ -416,6 +421,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
||||
cameraView.startPreview()
|
||||
|
||||
self.gridNode.scrollView.addSubview(cameraView)
|
||||
self.gridNode.addSubnode(self.cameraActivateAreaNode)
|
||||
} else {
|
||||
self.containerNode.clipsToBounds = true
|
||||
}
|
||||
@ -1067,6 +1073,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
|
||||
if let cameraView = self.cameraView {
|
||||
if let cameraRect = cameraRect {
|
||||
transition.updateFrame(view: cameraView, frame: cameraRect)
|
||||
self.cameraActivateAreaNode.frame = cameraRect
|
||||
cameraView.isHidden = false
|
||||
} else {
|
||||
cameraView.isHidden = true
|
||||
|
@ -232,6 +232,9 @@ final class ChatMessageAccessibilityData {
|
||||
}
|
||||
} else if let file = media as? TelegramMediaFile {
|
||||
var isSpecialFile = false
|
||||
|
||||
let isVideo = file.isInstantVideo
|
||||
|
||||
for attribute in file.attributes {
|
||||
switch attribute {
|
||||
case let .Sticker(displayText, _, _):
|
||||
@ -259,6 +262,9 @@ final class ChatMessageAccessibilityData {
|
||||
}
|
||||
}
|
||||
case let .Audio(isVoice, duration, title, performer, _):
|
||||
if isVideo {
|
||||
continue
|
||||
}
|
||||
isSpecialFile = true
|
||||
if isSelected == nil {
|
||||
hint = item.presentationData.strings.VoiceOver_Chat_PlayHint
|
||||
@ -598,6 +604,7 @@ final class ChatMessageAccessibilityData {
|
||||
}
|
||||
|
||||
var (label, value) = dataForMessage(item.message, false)
|
||||
var replyValue: String?
|
||||
|
||||
for attribute in item.message.attributes {
|
||||
if let attribute = attribute as? TextEntitiesMessageAttribute {
|
||||
@ -638,8 +645,8 @@ final class ChatMessageAccessibilityData {
|
||||
replyLabel = item.presentationData.strings.VoiceOver_Chat_ReplyToYourMessage
|
||||
}
|
||||
|
||||
// let (replyMessageLabel, replyMessageValue) = dataForMessage(replyMessage, true)
|
||||
// replyLabel += "\(replyLabel): \(replyMessageLabel), \(replyMessageValue)"
|
||||
let (_, replyMessageValue) = dataForMessage(replyMessage, true)
|
||||
replyValue = replyMessageValue
|
||||
|
||||
label = "\(replyLabel) . \(label)"
|
||||
}
|
||||
@ -691,6 +698,10 @@ final class ChatMessageAccessibilityData {
|
||||
customActions.append(ChatMessageAccessibilityCustomAction(name: item.presentationData.strings.VoiceOver_MessageContextOpenMessageMenu, target: nil, selector: #selector(self.noop), action: .options))
|
||||
}
|
||||
|
||||
if let replyValue {
|
||||
value = "\(value). \(item.presentationData.strings.VoiceOver_Chat_ReplyingToMessage(replyValue).string)"
|
||||
}
|
||||
|
||||
self.label = label
|
||||
self.value = value
|
||||
self.hint = hint
|
||||
|
Loading…
x
Reference in New Issue
Block a user