Merge pull request #135 from tootsuite/feature/visibility
Feature/visibility
This commit is contained in:
commit
eed01c4ebb
|
@ -8,7 +8,7 @@
|
|||
import Foundation
|
||||
import CoreData
|
||||
|
||||
public protocol Managed: class, NSFetchRequestResult {
|
||||
public protocol Managed: AnyObject, NSFetchRequestResult {
|
||||
static var entityName: String { get }
|
||||
static var defaultSortDescriptors: [NSSortDescriptor] { get }
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import UIKit
|
||||
|
||||
protocol NeedsDependency: class {
|
||||
protocol NeedsDependency: AnyObject {
|
||||
var context: AppContext! { get set }
|
||||
var coordinator: SceneCoordinator! { get set }
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ extension ComposeStatusItem {
|
|||
}
|
||||
}
|
||||
|
||||
protocol ComposePollAttributeDelegate: class {
|
||||
protocol ComposePollAttributeDelegate: AnyObject {
|
||||
func composePollAttribute(_ attribute: ComposeStatusItem.ComposePollOptionAttribute, pollOptionDidChange: String?)
|
||||
}
|
||||
|
||||
|
|
|
@ -197,6 +197,20 @@ extension StatusSection {
|
|||
emojiDict: (status.reblog ?? status).emojiDict
|
||||
)
|
||||
|
||||
// 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 }
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import UIKit
|
||||
|
||||
protocol ContentOffsetAdjustableTimelineViewControllerDelegate: class {
|
||||
protocol ContentOffsetAdjustableTimelineViewControllerDelegate: AnyObject {
|
||||
func navigationBar() -> UINavigationBar?
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,6 @@
|
|||
import Foundation
|
||||
import Combine
|
||||
|
||||
protocol DisposeBagCollectable: class {
|
||||
protocol DisposeBagCollectable: AnyObject {
|
||||
var disposeBag: Set<AnyCancellable> { get set }
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol ComposeStatusAttachmentCollectionViewCellDelegate: class {
|
||||
protocol ComposeStatusAttachmentCollectionViewCellDelegate: AnyObject {
|
||||
func composeStatusAttachmentCollectionViewCell(_ cell: ComposeStatusAttachmentCollectionViewCell, removeButtonDidPressed button: UIButton)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol ComposeStatusPollExpiresOptionCollectionViewCellDelegate: class {
|
||||
protocol ComposeStatusPollExpiresOptionCollectionViewCellDelegate: AnyObject {
|
||||
func composeStatusPollExpiresOptionCollectionViewCell(_ cell: ComposeStatusPollExpiresOptionCollectionViewCell, didSelectExpiresOption expiresOption: ComposeStatusItem.ComposePollExpiresOptionAttribute.ExpiresOption)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import os.log
|
||||
import UIKit
|
||||
|
||||
protocol ComposeStatusPollOptionAppendEntryCollectionViewCellDelegate: class {
|
||||
protocol ComposeStatusPollOptionAppendEntryCollectionViewCellDelegate: AnyObject {
|
||||
func composeStatusPollOptionAppendEntryCollectionViewCellDidPressed(_ cell: ComposeStatusPollOptionAppendEntryCollectionViewCell)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol ComposeStatusPollOptionCollectionViewCellDelegate: class {
|
||||
protocol ComposeStatusPollOptionCollectionViewCellDelegate: AnyObject {
|
||||
func composeStatusPollOptionCollectionViewCell(_ cell: ComposeStatusPollOptionCollectionViewCell, textFieldDidBeginEditing textField: UITextField)
|
||||
func composeStatusPollOptionCollectionViewCell(_ cell: ComposeStatusPollOptionCollectionViewCell, textBeforeDeleteBackward text: String?)
|
||||
func composeStatusPollOptionCollectionViewCell(_ cell: ComposeStatusPollOptionCollectionViewCell, pollOptionTextFieldDidReturn: UITextField)
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import MastodonSDK
|
||||
|
||||
protocol ComposeToolbarViewDelegate: class {
|
||||
protocol ComposeToolbarViewDelegate: AnyObject {
|
||||
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, cameraButtonDidPressed sender: UIButton, mediaSelectionType type: ComposeToolbarView.MediaSelectionType)
|
||||
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, pollButtonDidPressed sender: UIButton)
|
||||
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, emojiButtonDidPressed sender: UIButton)
|
||||
|
@ -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
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import os.log
|
||||
import UIKit
|
||||
|
||||
protocol HomeTimelineNavigationBarTitleViewDelegate: class {
|
||||
protocol HomeTimelineNavigationBarTitleViewDelegate: AnyObject {
|
||||
func homeTimelineNavigationBarTitleView(_ titleView: HomeTimelineNavigationBarTitleView, buttonDidPressed sender: UIButton)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import MastodonSDK
|
||||
|
||||
protocol PickServerCategoriesCellDelegate: class {
|
||||
protocol PickServerCategoriesCellDelegate: AnyObject {
|
||||
func pickServerCategoriesCell(_ cell: PickServerCategoriesCell, collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import MastodonSDK
|
|||
import AlamofireImage
|
||||
import Kanna
|
||||
|
||||
protocol PickServerCellDelegate: class {
|
||||
protocol PickServerCellDelegate: AnyObject {
|
||||
func pickServerCell(_ cell: PickServerCell, expandButtonPressed button: UIButton)
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import UIKit
|
||||
|
||||
protocol PickServerSearchCellDelegate: class {
|
||||
protocol PickServerSearchCellDelegate: AnyObject {
|
||||
func pickServerSearchCell(_ cell: PickServerSearchCell, searchTextDidChange searchText: String?)
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ import AlamofireImage
|
|||
import CropViewController
|
||||
import TwitterTextEditor
|
||||
|
||||
protocol ProfileHeaderViewControllerDelegate: class {
|
||||
protocol ProfileHeaderViewControllerDelegate: AnyObject {
|
||||
func profileHeaderViewController(_ viewController: ProfileHeaderViewController, viewLayoutDidUpdate view: UIView)
|
||||
func profileHeaderViewController(_ viewController: ProfileHeaderViewController, pageSegmentedControlValueChanged segmentedControl: UISegmentedControl, selectedSegmentIndex index: Int)
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import os.log
|
||||
import UIKit
|
||||
|
||||
protocol ProfileStatusDashboardViewDelegate: class {
|
||||
protocol ProfileStatusDashboardViewDelegate: AnyObject {
|
||||
func profileStatusDashboardView(_ dashboardView: ProfileStatusDashboardView, postDashboardMeterViewDidPressed dashboardMeterView: ProfileStatusDashboardMeterView)
|
||||
func profileStatusDashboardView(_ dashboardView: ProfileStatusDashboardView, followingDashboardMeterViewDidPressed dashboardMeterView: ProfileStatusDashboardMeterView)
|
||||
func profileStatusDashboardView(_ dashboardView: ProfileStatusDashboardView, followersDashboardMeterViewDidPressed dashboardMeterView: ProfileStatusDashboardMeterView)
|
||||
|
|
|
@ -10,7 +10,7 @@ import UIKit
|
|||
import Pageboy
|
||||
import Tabman
|
||||
|
||||
protocol ProfilePagingViewControllerDelegate: class {
|
||||
protocol ProfilePagingViewControllerDelegate: AnyObject {
|
||||
func profilePagingViewController(_ viewController: ProfilePagingViewController, didScrollToPostCustomScrollViewContainerController customScrollViewContainerController: ScrollViewContainer, atIndex index: Int)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol SettingsAppearanceTableViewCellDelegate: class {
|
||||
protocol SettingsAppearanceTableViewCellDelegate: AnyObject {
|
||||
func settingsAppearanceCell(_ cell: SettingsAppearanceTableViewCell, didSelectAppearanceMode appearanceMode: SettingsItem.AppearanceMode)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol SettingsToggleCellDelegate: class {
|
||||
protocol SettingsToggleCellDelegate: AnyObject {
|
||||
func settingsToggleCell(_ cell: SettingsToggleTableViewCell, switchValueDidChange switch: UISwitch)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import AVKit
|
||||
import UIKit
|
||||
|
||||
protocol PlayerContainerViewDelegate: class {
|
||||
protocol PlayerContainerViewDelegate: AnyObject {
|
||||
func playerContainerView(_ playerContainerView: PlayerContainerView, contentWarningOverlayViewDidPressed contentWarningOverlayView: ContentWarningOverlayView)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import Foundation
|
||||
import UIKit
|
||||
|
||||
protocol ContentWarningOverlayViewDelegate: class {
|
||||
protocol ContentWarningOverlayViewDelegate: AnyObject {
|
||||
func contentWarningOverlayViewDidPressed(_ contentWarningOverlayView: ContentWarningOverlayView)
|
||||
}
|
||||
|
||||
|
|
|
@ -122,6 +122,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()
|
||||
|
||||
|
@ -317,6 +324,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([
|
||||
|
@ -479,6 +490,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 {
|
||||
|
|
|
@ -9,7 +9,7 @@ import os.log
|
|||
import UIKit
|
||||
import Combine
|
||||
|
||||
protocol ThreadReplyLoaderTableViewCellDelegate: class {
|
||||
protocol ThreadReplyLoaderTableViewCellDelegate: AnyObject {
|
||||
func threadReplyLoaderTableViewCell(_ cell: ThreadReplyLoaderTableViewCell, loadMoreButtonDidPressed button: UIButton)
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ import CoreData
|
|||
import os.log
|
||||
import UIKit
|
||||
|
||||
protocol TimelineMiddleLoaderTableViewCellDelegate: class {
|
||||
protocol TimelineMiddleLoaderTableViewCellDelegate: AnyObject {
|
||||
func configure(cell: TimelineMiddleLoaderTableViewCell, upperTimelineStatusID: String?, timelineIndexobjectID:NSManagedObjectID?)
|
||||
func timelineMiddleLoaderTableViewCell(_ cell: TimelineMiddleLoaderTableViewCell, loadMoreButtonDidPressed button: UIButton)
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import UIKit
|
||||
|
||||
protocol DeleteBackwardResponseTextFieldDelegate: class {
|
||||
protocol DeleteBackwardResponseTextFieldDelegate: AnyObject {
|
||||
func deleteBackwardResponseTextField(_ textField: DeleteBackwardResponseTextField, textBeforeDelete: String?)
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
import os.log
|
||||
import UIKit
|
||||
|
||||
protocol ActionToolbarContainerDelegate: class {
|
||||
protocol ActionToolbarContainerDelegate: AnyObject {
|
||||
func actionToolbarContainer(_ actionToolbarContainer: ActionToolbarContainer, replayButtonDidPressed sender: UIButton)
|
||||
func actionToolbarContainer(_ actionToolbarContainer: ActionToolbarContainer, reblogButtonDidPressed sender: UIButton)
|
||||
func actionToolbarContainer(_ actionToolbarContainer: ActionToolbarContainer, starButtonDidPressed sender: UIButton)
|
||||
|
|
|
@ -12,7 +12,7 @@ import Kingfisher
|
|||
import GameplayKit
|
||||
import MastodonSDK
|
||||
|
||||
protocol MastodonAttachmentServiceDelegate: class {
|
||||
protocol MastodonAttachmentServiceDelegate: AnyObject {
|
||||
func mastodonAttachmentService(_ service: MastodonAttachmentService, uploadStateDidChange state: MastodonAttachmentService.UploadState?)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue