Skip to content

Commit 519c354

Browse files
authored
Delete ActionToolbarContainer (#1517)
* Delete ActionToolbarContainer and all usages * Restore some necessary notificationQuote() behavior * Continue clean-up of dead code in StatusView+ViewModel
1 parent 09177d7 commit 519c354

10 files changed

Lines changed: 3 additions & 537 deletions

File tree

Mastodon/Protocol/Provider/DataSourceFacade+Status.swift

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -86,56 +86,6 @@ extension DataSourceFacade {
8686
}
8787
}
8888

89-
// ActionToolBar
90-
extension DataSourceFacade {
91-
@MainActor
92-
static func responseToActionToolbar(
93-
provider: DataSourceProvider & AuthContextProvider,
94-
status: MastodonStatus,
95-
action: ActionToolbarContainer.Action,
96-
sender: UIButton
97-
) async throws {
98-
let _status = status.reblog ?? status
99-
100-
guard let coordinator = provider.sceneCoordinator else { return }
101-
102-
switch action {
103-
case .reply:
104-
FeedbackGenerator.shared.generate(.selectionChanged)
105-
106-
let composeViewModel = ComposeViewModel(
107-
authenticationBox: provider.authenticationBox,
108-
composeContext: .composeStatus(quoting: nil),
109-
destination: .reply(parent: _status)
110-
)
111-
_ = coordinator.present(
112-
scene: .compose(viewModel: composeViewModel),
113-
from: provider,
114-
transition: .modal(animated: true, completion: nil)
115-
)
116-
case .reblog:
117-
try await DataSourceFacade.responseToStatusReblogAction(
118-
provider: provider,
119-
wrappingStatus: status,
120-
contentStatus: _status
121-
)
122-
case .like:
123-
try await DataSourceFacade.responseToStatusFavoriteAction(
124-
provider: provider,
125-
wrappingStatus: status,
126-
contentStatus: _status
127-
)
128-
case .share:
129-
try await DataSourceFacade.responseToStatusShareAction(
130-
provider: provider,
131-
status: _status,
132-
button: sender
133-
)
134-
} // end switch
135-
} // end func
136-
137-
}
138-
13989
// menu
14090
extension DataSourceFacade {
14191

Mastodon/Protocol/Provider/DataSourceProvider+StatusTableViewCellDelegate.swift

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -333,37 +333,6 @@ extension StatusTableViewCellDelegate where Self: DataSourceProvider & AuthConte
333333

334334
}
335335

336-
// MARK: - toolbar
337-
extension StatusTableViewCellDelegate where Self: DataSourceProvider & AuthContextProvider {
338-
func tableViewCell(
339-
_ cell: UITableViewCell,
340-
statusView: StatusView,
341-
actionToolbarContainer: ActionToolbarContainer,
342-
buttonDidPressed button: UIButton,
343-
action: ActionToolbarContainer.Action
344-
) {
345-
Task {
346-
let source = DataSourceItem.Source(tableViewCell: cell, indexPath: nil)
347-
guard let item = await item(from: source) else {
348-
assertionFailure()
349-
return
350-
}
351-
guard case let .status(status) = item else {
352-
assertionFailure("only works for status data provider")
353-
return
354-
}
355-
356-
try await DataSourceFacade.responseToActionToolbar(
357-
provider: self,
358-
status: status,
359-
action: action,
360-
sender: button
361-
)
362-
} // end Task
363-
}
364-
365-
}
366-
367336
// MARK: - menu button
368337
extension StatusTableViewCellDelegate where Self: DataSourceProvider & AuthContextProvider {
369338
func tableViewCell(

Mastodon/Scene/Share/View/TableviewCell/StatusTableViewCellDelegate.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ protocol StatusTableViewCellDelegate: AnyObject, AutoGenerateProtocolDelegate {
3232
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, mediaGridContainerView: MediaGridContainerView, mediaView: MediaView, didSelectMediaViewAt index: Int)
3333
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, pollTableView tableView: UITableView, didSelectRowAt indexPath: IndexPath)
3434
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, pollVoteButtonPressed button: UIButton)
35-
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, actionToolbarContainer: ActionToolbarContainer, buttonDidPressed button: UIButton, action: ActionToolbarContainer.Action)
3635
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, menuButton button: UIButton, didSelectAction action: MastodonMenu.Action)
3736
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, contentConcealExplainViewDidPressed contentConcealExplainView: ContentConcealExplainView)
3837
func tableViewCell(_ cell: UITableViewCell, statusView: StatusView, mediaGridContainerView: MediaGridContainerView, mediaSensitiveButtonDidPressed button: UIButton)
@@ -83,10 +82,6 @@ extension StatusViewDelegate where Self: StatusViewContainerTableViewCell {
8382
delegate?.tableViewCell(self, statusView: statusView, pollVoteButtonPressed: button)
8483
}
8584

86-
func statusView(_ statusView: StatusView, actionToolbarContainer: ActionToolbarContainer, buttonDidPressed button: UIButton, action: ActionToolbarContainer.Action) {
87-
delegate?.tableViewCell(self, statusView: statusView, actionToolbarContainer: actionToolbarContainer, buttonDidPressed: button, action: action)
88-
}
89-
9085
func statusView(_ statusView: StatusView, menuButton button: UIButton, didSelectAction action: MastodonMenu.Action) {
9186
delegate?.tableViewCell(self, statusView: statusView, menuButton: button, didSelectAction: action)
9287
}

Mastodon/Scene/Share/View/TableviewCell/StatusThreadRootTableViewCell.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ extension StatusThreadRootTableViewCell {
107107
statusView.pollTableView,
108108
statusView.pollStatusStackView,
109109
statusView.statusCardControl,
110-
statusView.actionToolbarContainer,
111110
statusView.statusMetricView,
112111
]
113112

MastodonSDK/Sources/MastodonAsset/Assets.xcassets/Colors/Button/action.toolbar.colorset/Contents.json

Lines changed: 0 additions & 38 deletions
This file was deleted.

MastodonSDK/Sources/MastodonAsset/Generated/Assets.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public enum Asset {
5252
public static let lightBlurple = ColorAsset(name: "Colors/Brand/Light Blurple")
5353
}
5454
public enum Button {
55-
public static let actionToolbar = ColorAsset(name: "Colors/Button/action.toolbar")
5655
public static let disabled = ColorAsset(name: "Colors/Button/disabled")
5756
public static let inactive = ColorAsset(name: "Colors/Button/inactive")
5857
public static let tagFollow = ColorAsset(name: "Colors/Button/tagFollow")

MastodonSDK/Sources/MastodonUI/View/Content/StatusView+Configuration.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ extension StatusView {
5555
configureToolbar(status: status)
5656
configureContent(statusEdit: statusEdit, status: status)
5757
configureMedia(status: statusEdit, contentDisplayMode: contentDisplayMode)
58-
actionToolbarAdaptiveMarginContainerView.isHidden = true
5958
authorView.menuButton.isHidden = true
6059
headerAdaptiveMarginContainerView.isHidden = true
6160

MastodonSDK/Sources/MastodonUI/View/Content/StatusView+ViewModel.swift

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ extension StatusView.ViewModel {
182182
bindMedia(statusView: statusView)
183183
bindPoll(statusView: statusView)
184184
bindCard(statusView: statusView)
185-
bindToolbar(statusView: statusView)
186185
bindMetric(statusView: statusView)
187186
bindMenu(statusView: statusView)
188187
bindAccessibility(statusView: statusView)
@@ -487,42 +486,6 @@ extension StatusView.ViewModel {
487486
.store(in: &disposeBag)
488487
}
489488

490-
private func bindToolbar(statusView: StatusView) {
491-
$replyCount
492-
.sink { count in
493-
statusView.actionToolbarContainer.configureReply(
494-
count: count,
495-
isEnabled: true
496-
)
497-
}
498-
.store(in: &disposeBag)
499-
Publishers.CombineLatest3(
500-
$reblogCount,
501-
$isReblog,
502-
$isReblogEnabled
503-
)
504-
.sink { count, isHighlighted, isEnabled in
505-
statusView.actionToolbarContainer.configureReblog(
506-
count: count,
507-
isEnabled: isEnabled,
508-
isHighlighted: isHighlighted
509-
)
510-
}
511-
.store(in: &disposeBag)
512-
Publishers.CombineLatest(
513-
$favoriteCount,
514-
$isFavorite
515-
)
516-
.sink { count, isHighlighted in
517-
statusView.actionToolbarContainer.configureFavorite(
518-
count: count,
519-
isEnabled: true,
520-
isHighlighted: isHighlighted
521-
)
522-
}
523-
.store(in: &disposeBag)
524-
}
525-
526489
private func bindMetric(statusView: StatusView) {
527490
let reblogButtonTitle = $reblogCount.map { count in
528491
L10n.Plural.Count.reblog(count)
@@ -798,49 +761,6 @@ extension StatusView.ViewModel {
798761
return L10n.Plural.Count.media(count)
799762
}
800763

801-
let replyLabel = $replyCount
802-
.map { [L10n.Common.Controls.Actions.reply, L10n.Plural.Count.reply($0)] }
803-
.map { $0.joined(separator: ", ") }
804-
805-
let reblogLabel = Publishers.CombineLatest($isReblog, $reblogCount)
806-
.map { isReblog, reblogCount in
807-
[
808-
isReblog ? L10n.Common.Controls.Status.Actions.unreblog : L10n.Common.Controls.Status.Actions.reblog,
809-
L10n.Plural.Count.reblog(reblogCount)
810-
]
811-
}
812-
.map { $0.joined(separator: ", ") }
813-
814-
let favoriteLabel = Publishers.CombineLatest($isFavorite, $favoriteCount)
815-
.map { isFavorite, favoriteCount in
816-
[
817-
isFavorite ? L10n.Common.Controls.Status.Actions.unfavorite : L10n.Common.Controls.Status.Actions.favorite,
818-
L10n.Plural.Count.favorite(favoriteCount)
819-
]
820-
}
821-
.map { $0.joined(separator: ", ") }
822-
823-
Publishers.CombineLatest4(replyLabel, reblogLabel, $isReblogEnabled, favoriteLabel)
824-
.map { replyLabel, reblogLabel, canReblog, favoriteLabel in
825-
let toolbar = statusView.actionToolbarContainer
826-
let replyAction = UIAccessibilityCustomAction(name: replyLabel) { _ in
827-
statusView.actionToolbarContainer(toolbar, buttonDidPressed: toolbar.replyButton, action: .reply)
828-
return true
829-
}
830-
let reblogAction = UIAccessibilityCustomAction(name: reblogLabel) { _ in
831-
statusView.actionToolbarContainer(toolbar, buttonDidPressed: toolbar.reblogButton, action: .reblog)
832-
return true
833-
}
834-
let favoriteAction = UIAccessibilityCustomAction(name: favoriteLabel) { _ in
835-
statusView.actionToolbarContainer(toolbar, buttonDidPressed: toolbar.favoriteButton, action: .like)
836-
return true
837-
}
838-
// (share, bookmark are excluded since they are already present in the “…” menu action set)
839-
return canReblog ? [replyAction, reblogAction, favoriteAction] : [replyAction, favoriteAction]
840-
}
841-
.assign(to: \.toolbarActions, on: statusView)
842-
.store(in: &disposeBag)
843-
844764
let translatedFromLabel = $translation
845765
.map { translation -> String? in
846766
guard let translation else { return nil }

MastodonSDK/Sources/MastodonUI/View/Content/StatusView.swift

Lines changed: 3 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ public protocol StatusViewDelegate: AnyObject {
2727
func statusView(_ statusView: StatusView, mediaGridContainerView: MediaGridContainerView, mediaView: MediaView, didSelectMediaViewAt index: Int)
2828
func statusView(_ statusView: StatusView, pollTableView tableView: UITableView, didSelectRowAt indexPath: IndexPath)
2929
func statusView(_ statusView: StatusView, pollVoteButtonPressed button: UIButton)
30-
func statusView(_ statusView: StatusView, actionToolbarContainer: ActionToolbarContainer, buttonDidPressed button: UIButton, action: ActionToolbarContainer.Action)
3130
func statusView(_ statusView: StatusView, menuButton button: UIButton, didSelectAction action: MastodonMenu.Action)
3231
func statusView(_ statusView: StatusView, contentConcealExplainViewDidPressed contentConcealView: ContentConcealExplainView)
3332
func statusView(_ statusView: StatusView, mediaGridContainerView: MediaGridContainerView, mediaSensitiveButtonDidPressed button: UIButton)
@@ -514,10 +513,6 @@ public final class StatusView: UIView {
514513
return containerView
515514
}()
516515

517-
// toolbar
518-
let actionToolbarAdaptiveMarginContainerView = AdaptiveMarginContainerView()
519-
public let actionToolbarContainer = ActionToolbarContainer()
520-
521516
// metric
522517
public let statusMetricView = StatusMetricView()
523518

@@ -601,10 +596,7 @@ extension StatusView {
601596
])
602597
pollTableView.delegate = self
603598
pollVoteButton.addTarget(self, action: #selector(StatusView.pollVoteButtonDidPressed(_:)), for: .touchUpInside)
604-
605-
// toolbar
606-
actionToolbarContainer.delegate = self
607-
599+
608600
// statusMetricView
609601
statusMetricView.delegate = self
610602
}
@@ -668,8 +660,8 @@ extension StatusView.Style {
668660
}
669661

670662
private func base(statusView: StatusView) {
671-
// container: V - [ header container | author container | content container | media container | pollTableView | actionToolbarContainer ]
672-
663+
// container: V - [ header container | author container | content container | media container | pollTableView ]
664+
673665
// header container: H - [ icon | label ]
674666
statusView.headerAdaptiveMarginContainerView.contentView = statusView.headerContainerView
675667
statusView.headerAdaptiveMarginContainerView.margin = StatusView.containerLayoutMargin
@@ -761,11 +753,6 @@ extension StatusView.Style {
761753
statusView.pollStatusDotLabel.setContentHuggingPriority(.defaultHigh + 1, for: .horizontal)
762754
statusView.pollCountdownLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)
763755
statusView.pollVoteButton.setContentHuggingPriority(.defaultHigh + 3, for: .horizontal)
764-
765-
// action toolbar
766-
statusView.actionToolbarAdaptiveMarginContainerView.contentView = statusView.actionToolbarContainer
767-
statusView.actionToolbarAdaptiveMarginContainerView.margin = StatusView.containerLayoutMargin
768-
statusView.containerStackView.addArrangedSubview(statusView.actionToolbarAdaptiveMarginContainerView)
769756
}
770757

771758
func inline(statusView: StatusView) {
@@ -783,8 +770,6 @@ extension StatusView.Style {
783770

784771
func report(statusView: StatusView) {
785772
base(statusView: statusView) // override the base style
786-
787-
statusView.actionToolbarAdaptiveMarginContainerView.removeFromSuperview()
788773
}
789774

790775
func notification(statusView: StatusView) {
@@ -800,14 +785,11 @@ extension StatusView.Style {
800785

801786
statusView.contentAdaptiveMarginContainerView.bottomLayoutConstraint?.constant = 16 // fix bottom margin missing issue
802787
statusView.pollAdaptiveMarginContainerView.bottomLayoutConstraint?.constant = 16 // fix bottom margin missing issue
803-
statusView.actionToolbarAdaptiveMarginContainerView.removeFromSuperview()
804788
statusView.statusCardControl.removeFromSuperview()
805789
}
806790

807791
func composeStatusReplica(statusView: StatusView) {
808792
base(statusView: statusView)
809-
810-
statusView.actionToolbarAdaptiveMarginContainerView.removeFromSuperview()
811793
}
812794

813795
func composeStatusAuthor(statusView: StatusView) {
@@ -816,7 +798,6 @@ extension StatusView.Style {
816798
statusView.contentAdaptiveMarginContainerView.removeFromSuperview()
817799
statusView.mediaContainerView.removeFromSuperview()
818800
statusView.pollAdaptiveMarginContainerView.removeFromSuperview()
819-
statusView.actionToolbarAdaptiveMarginContainerView.removeFromSuperview()
820801
}
821802

822803
func editHistory(statusView: StatusView) {
@@ -896,7 +877,6 @@ extension StatusView: AdaptiveContainerView {
896877
authorAdaptiveMarginContainerView.margin = margin
897878
contentAdaptiveMarginContainerView.margin = margin
898879
pollAdaptiveMarginContainerView.margin = margin
899-
actionToolbarAdaptiveMarginContainerView.margin = margin
900880
statusMetricView.margin = margin
901881
}
902882
}
@@ -962,21 +942,6 @@ extension StatusView: UITableViewDelegate {
962942
}
963943
}
964944

965-
// MARK: ActionToolbarContainerDelegate
966-
extension StatusView: ActionToolbarContainerDelegate {
967-
public func actionToolbarContainer(_ actionToolbarContainer: ActionToolbarContainer, buttonDidPressed button: UIButton, action: ActionToolbarContainer.Action) {
968-
delegate?.statusView(self, actionToolbarContainer: actionToolbarContainer, buttonDidPressed: button, action: action)
969-
}
970-
971-
public func actionToolbarContainer(_ actionToolbarContainer: ActionToolbarContainer, showReblogs action: UIAccessibilityCustomAction) {
972-
delegate?.statusView(self, statusMetricView: statusMetricView, reblogButtonDidPressed: statusMetricView.reblogButton)
973-
}
974-
975-
public func actionToolbarContainer(_ actionToolbarContainer: ActionToolbarContainer, showFavorites action: UIAccessibilityCustomAction) {
976-
delegate?.statusView(self, statusMetricView: statusMetricView, favoriteButtonDidPressed: statusMetricView.favoriteButton)
977-
}
978-
}
979-
980945
// MARK: - StatusMetricViewDelegate
981946
extension StatusView: StatusMetricViewDelegate {
982947
func statusMetricView(_ statusMetricView: StatusMetricView, reblogButtonDidPressed button: UIButton) {

0 commit comments

Comments
 (0)