Label uncaptioned attachments

This commit is contained in:
Justin Mazzocchi 2021-03-05 12:36:49 -08:00
parent eadbe0ee2a
commit 4934a6e45c
No known key found for this signature in database
GPG key ID: E223E6937AAFB01C
5 changed files with 19 additions and 16 deletions

View file

@ -97,6 +97,7 @@
"compose.attachment.cancel-upload.accessibility-label" = "Cancel uploading attachment"; "compose.attachment.cancel-upload.accessibility-label" = "Cancel uploading attachment";
"compose.attachment.edit" = "Edit attachment"; "compose.attachment.edit" = "Edit attachment";
"compose.attachment.remove" = "Remove attachment"; "compose.attachment.remove" = "Remove attachment";
"compose.attachment.uncaptioned" = "Uncaptioned";
"compose.attachment.uploading" = "Uploading"; "compose.attachment.uploading" = "Uploading";
"compose.attachments-button.accessibility-label" = "Add attachment"; "compose.attachments-button.accessibility-label" = "Add attachment";
"compose.attachments-will-be-discarded" = "Attachments will be discarded when changing accounts"; "compose.attachments-will-be-discarded" = "Attachments will be discarded when changing accounts";

View file

@ -141,6 +141,7 @@
D0B32F50250B373600311912 /* RegistrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B32F4F250B373600311912 /* RegistrationView.swift */; }; D0B32F50250B373600311912 /* RegistrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B32F4F250B373600311912 /* RegistrationView.swift */; };
D0B5FE9B251583DB00478838 /* ProfileCollection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B5FE9A251583DB00478838 /* ProfileCollection+Extensions.swift */; }; D0B5FE9B251583DB00478838 /* ProfileCollection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B5FE9A251583DB00478838 /* ProfileCollection+Extensions.swift */; };
D0B8510C25259E56004E0744 /* LoadMoreTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B8510B25259E56004E0744 /* LoadMoreTableViewCell.swift */; }; D0B8510C25259E56004E0744 /* LoadMoreTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B8510B25259E56004E0744 /* LoadMoreTableViewCell.swift */; };
D0BE633125F2C409001139FA /* CapsuleLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0477F4525C72E50005C5368 /* CapsuleLabel.swift */; };
D0BE97A325CF44310057E161 /* CGRect+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE97A225CF44310057E161 /* CGRect+Extensions.swift */; }; D0BE97A325CF44310057E161 /* CGRect+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE97A225CF44310057E161 /* CGRect+Extensions.swift */; };
D0BE97D725D0863E0057E161 /* ImagePastableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE97D625D0863E0057E161 /* ImagePastableTextView.swift */; }; D0BE97D725D0863E0057E161 /* ImagePastableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE97D625D0863E0057E161 /* ImagePastableTextView.swift */; };
D0BE97E025D086F80057E161 /* ImagePastableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE97D625D0863E0057E161 /* ImagePastableTextView.swift */; }; D0BE97E025D086F80057E161 /* ImagePastableTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BE97D625D0863E0057E161 /* ImagePastableTextView.swift */; };
@ -1267,6 +1268,7 @@
D059373425AAEA7000754FDF /* CompositionPollView.swift in Sources */, D059373425AAEA7000754FDF /* CompositionPollView.swift in Sources */,
D021A67B25C3E32A008A0C0D /* PlayerView.swift in Sources */, D021A67B25C3E32A008A0C0D /* PlayerView.swift in Sources */,
D052DBDD25EAF01800FFB628 /* URL+Extensions.swift in Sources */, D052DBDD25EAF01800FFB628 /* URL+Extensions.swift in Sources */,
D0BE633125F2C409001139FA /* CapsuleLabel.swift in Sources */,
D005A20125EF574F008B2E63 /* NavigationHandling.swift in Sources */, D005A20125EF574F008B2E63 /* NavigationHandling.swift in Sources */,
D021A69025C3E4B8008A0C0D /* EmojiContentConfiguration.swift in Sources */, D021A69025C3E4B8008A0C0D /* EmojiContentConfiguration.swift in Sources */,
D08E52D2257C811200FA2C5F /* ShareExtensionError+Extensions.swift in Sources */, D08E52D2257C811200FA2C5F /* ShareExtensionError+Extensions.swift in Sources */,

View file

@ -11,7 +11,7 @@ final class AttachmentView: UIView {
let playerView = PlayerView() let playerView = PlayerView()
let imageView = SDAnimatedImageView() let imageView = SDAnimatedImageView()
let removeButton = UIButton(type: .close) let removeButton = UIButton(type: .close)
let editIcon = UIImageView() let uncaptionedLabel = CapsuleLabel()
let selectionButton = UIButton() let selectionButton = UIButton()
var playing: Bool = false { var playing: Bool = false {
@ -159,14 +159,11 @@ private extension AttachmentView {
self.parentViewModel.removeAttachment(viewModel: self.viewModel) self.parentViewModel.removeAttachment(viewModel: self.viewModel)
}]) }])
addSubview(editIcon) addSubview(uncaptionedLabel)
editIcon.translatesAutoresizingMaskIntoConstraints = false uncaptionedLabel.translatesAutoresizingMaskIntoConstraints = false
editIcon.image = UIImage( uncaptionedLabel.text = NSLocalizedString("compose.attachment.uncaptioned", comment: "")
systemName: "pencil", uncaptionedLabel.isHidden = !(parentViewModel.canRemoveAttachments
withConfiguration: UIImage.SymbolConfiguration(scale: .large)) && (viewModel.attachment.description?.isEmpty ?? true))
editIcon.layer.shadowOffset = .zero
editIcon.layer.shadowRadius = .defaultShadowRadius
editIcon.layer.shadowOpacity = .defaultShadowOpacity
switch viewModel.attachment.type { switch viewModel.attachment.type {
case .image, .video, .gifv: case .image, .video, .gifv:
@ -224,8 +221,8 @@ private extension AttachmentView {
selectionButton.bottomAnchor.constraint(equalTo: bottomAnchor), selectionButton.bottomAnchor.constraint(equalTo: bottomAnchor),
removeButton.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor), removeButton.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
removeButton.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor), removeButton.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor),
editIcon.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor), uncaptionedLabel.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
editIcon.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor) uncaptionedLabel.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor)
]) ])
var accessibilityLabel = viewModel.attachment.type.accessibilityName var accessibilityLabel = viewModel.attachment.type.accessibilityName

View file

@ -33,7 +33,6 @@ final class AttachmentsView: UIView {
let attachmentView = AttachmentView(viewModel: attachmentViewModel, parentViewModel: viewModel) let attachmentView = AttachmentView(viewModel: attachmentViewModel, parentViewModel: viewModel)
attachmentView.playing = viewModel.shouldShowAttachments && attachmentViewModel.shouldAutoplay attachmentView.playing = viewModel.shouldShowAttachments && attachmentViewModel.shouldAutoplay
attachmentView.removeButton.isHidden = !viewModel.canRemoveAttachments attachmentView.removeButton.isHidden = !viewModel.canRemoveAttachments
attachmentView.editIcon.isHidden = !viewModel.canRemoveAttachments
attachmentView.isAccessibilityElement = !viewModel.canRemoveAttachments attachmentView.isAccessibilityElement = !viewModel.canRemoveAttachments
if viewModel.attachmentViewModels.count == 2 && index == 1 if viewModel.attachmentViewModels.count == 2 && index == 1

View file

@ -17,25 +17,29 @@ final class CapsuleLabel: UILabel {
override func layoutSubviews() { override func layoutSubviews() {
super.layoutSubviews() super.layoutSubviews()
layer.cornerRadius = inset layer.cornerRadius = bounds.height / 2
invalidateIntrinsicContentSize() invalidateIntrinsicContentSize()
} }
override func drawText(in rect: CGRect) { override func drawText(in rect: CGRect) {
super.drawText(in: rect.inset(by: .init(top: 0, left: inset, bottom: 0, right: inset))) super.drawText(in: rect.inset(by: .init(
top: .compactSpacing,
left: .defaultSpacing,
bottom: .compactSpacing,
right: .defaultSpacing)))
} }
override var intrinsicContentSize: CGSize { override var intrinsicContentSize: CGSize {
var size = super.intrinsicContentSize var size = super.intrinsicContentSize
size.width += inset * 2 size.width += .defaultSpacing * 2
size.height += .compactSpacing * 2
return size return size
} }
} }
private extension CapsuleLabel { private extension CapsuleLabel {
var inset: CGFloat { bounds.height / 2 }
func initialSetup() { func initialSetup() {
backgroundColor = .secondarySystemBackground backgroundColor = .secondarySystemBackground