From b428eb6e0148a00a65f89aa14395e1058202e831 Mon Sep 17 00:00:00 2001 From: sunxiaojian Date: Sat, 8 May 2021 14:35:23 +0800 Subject: [PATCH] feature: add visibility indicator for post --- Mastodon/Diffiable/Section/StatusSection.swift | 14 ++++++++++++++ .../Scene/Compose/View/ComposeToolbarView.swift | 9 +++++++++ .../Scene/Share/View/Content/StatusView.swift | 16 ++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/Mastodon/Diffiable/Section/StatusSection.swift b/Mastodon/Diffiable/Section/StatusSection.swift index 3994229ee..3512eebbc 100644 --- a/Mastodon/Diffiable/Section/StatusSection.swift +++ b/Mastodon/Diffiable/Section/StatusSection.swift @@ -178,6 +178,20 @@ extension StatusSection { // set text cell.statusView.activeTextLabel.configure(content: (status.reblog ?? status).content) + // set visibility + if let visibility = (status.reblog ?? status).visibility { + cell.statusView.updateVisibility(visibility: visibility) + + cell.statusView.revealContentWarningButton.publisher(for: \.isHidden) + .receive(on: DispatchQueue.main) + .sink { [weak cell] isHidden in + cell?.statusView.visibilityImageView.isHidden = !isHidden + } + .store(in: &cell.disposeBag) + } else { + cell.statusView.visibilityImageView.isHidden = true + } + // prepare media attachments let mediaAttachments = Array((status.reblog ?? status).mediaAttachments ?? []).sorted { $0.index.compare($1.index) == .orderedAscending } diff --git a/Mastodon/Scene/Compose/View/ComposeToolbarView.swift b/Mastodon/Scene/Compose/View/ComposeToolbarView.swift index 704d5f90b..6aabc4572 100644 --- a/Mastodon/Scene/Compose/View/ComposeToolbarView.swift +++ b/Mastodon/Scene/Compose/View/ComposeToolbarView.swift @@ -181,6 +181,15 @@ extension ComposeToolbarView { } } + func imageNameForTimeline() -> String { + switch self { + case .public: return "person.3" + case .unlisted: return "eye.slash" + case .private: return "person.crop.circle.badge.plus" + case .direct: return "at" + } + } + var visibility: Mastodon.Entity.Status.Visibility { switch self { case .public: return .public diff --git a/Mastodon/Scene/Share/View/Content/StatusView.swift b/Mastodon/Scene/Share/View/Content/StatusView.swift index 8903933bd..716f51b57 100644 --- a/Mastodon/Scene/Share/View/Content/StatusView.swift +++ b/Mastodon/Scene/Share/View/Content/StatusView.swift @@ -126,6 +126,13 @@ final class StatusView: UIView { return button }() + let visibilityImageView: UIImageView = { + let imageView = UIImageView() + imageView.tintColor = Asset.Colors.Label.secondary.color + imageView.contentMode = .scaleAspectFit + return imageView + }() + let statusContainerStackView = UIStackView() let statusMosaicImageViewContainer = MosaicImageViewContainer() @@ -321,6 +328,10 @@ extension StatusView { authorContainerStackView.addArrangedSubview(revealContentWarningButton) revealContentWarningButton.setContentHuggingPriority(.required - 2, for: .horizontal) + // visibility ImageView + authorContainerStackView.addArrangedSubview(visibilityImageView) + visibilityImageView.setContentHuggingPriority(.required - 2, for: .horizontal) + authorContainerStackView.translatesAutoresizingMaskIntoConstraints = false authorContainerView.addSubview(authorContainerStackView) NSLayoutConstraint.activate([ @@ -483,6 +494,11 @@ extension StatusView { // TODO: a11y } + func updateVisibility(visibility: String) { + guard let visibility = ComposeToolbarView.VisibilitySelectionType(rawValue: visibility) else { return } + visibilityImageView.image = UIImage(systemName: visibility.imageNameForTimeline(), withConfiguration: UIImage.SymbolConfiguration(pointSize: 13, weight: .regular)) + } + } extension StatusView {