2
2
mirror of https://github.com/mastodon/mastodon-ios synced 2025-04-11 22:58:02 +02:00

Add first draft for Notification-count-view (IOS-241)

This commit is contained in:
Nathan Mattes 2024-07-22 11:40:13 +02:00
parent 67e1e5e3b4
commit 48f58642ac
3 changed files with 61 additions and 0 deletions

View File

@ -169,6 +169,7 @@
D85DF9722C481B1100A01408 /* NotificationRequestTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF96F2C481B1100A01408 /* NotificationRequestTableViewCell.swift */; };
D85DF9742C481B3500A01408 /* DataSourceFacade+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF9732C481B3500A01408 /* DataSourceFacade+Notifications.swift */; };
D85DF9762C4965A900A01408 /* NotificationRequestsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF9752C4965A900A01408 /* NotificationRequestsViewModel.swift */; };
D85DF97A2C4E49A400A01408 /* NotificationRequestCountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D85DF9792C4E49A400A01408 /* NotificationRequestCountView.swift */; };
D87364F92AE28DB500C8F919 /* Kanna in Frameworks */ = {isa = PBXBuildFile; productRef = D87364F82AE28DB500C8F919 /* Kanna */; };
D87BFC8B291D5C6B00FEE264 /* MastodonLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87BFC8A291D5C6B00FEE264 /* MastodonLoginView.swift */; };
D87BFC8D291EB81200FEE264 /* MastodonLoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D87BFC8C291EB81200FEE264 /* MastodonLoginViewModel.swift */; };
@ -815,6 +816,7 @@
D85DF96F2C481B1100A01408 /* NotificationRequestTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationRequestTableViewCell.swift; sourceTree = "<group>"; };
D85DF9732C481B3500A01408 /* DataSourceFacade+Notifications.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Notifications.swift"; sourceTree = "<group>"; };
D85DF9752C4965A900A01408 /* NotificationRequestsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRequestsViewModel.swift; sourceTree = "<group>"; };
D85DF9792C4E49A400A01408 /* NotificationRequestCountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationRequestCountView.swift; sourceTree = "<group>"; };
D87BFC8A291D5C6B00FEE264 /* MastodonLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLoginView.swift; sourceTree = "<group>"; };
D87BFC8C291EB81200FEE264 /* MastodonLoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLoginViewModel.swift; sourceTree = "<group>"; };
D87BFC8E291EC26A00FEE264 /* MastodonLoginServerTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonLoginServerTableViewCell.swift; sourceTree = "<group>"; };
@ -1853,6 +1855,7 @@
D85DF96E2C481B1100A01408 /* NotificationRequestsTableViewController.swift */,
D85DF96F2C481B1100A01408 /* NotificationRequestTableViewCell.swift */,
D85DF9752C4965A900A01408 /* NotificationRequestsViewModel.swift */,
D85DF9792C4E49A400A01408 /* NotificationRequestCountView.swift */,
);
name = Requests;
path = "Notification Filtering/Requests";
@ -3825,6 +3828,7 @@
D852C23C2AC5D02C00309232 /* AboutInstanceViewController.swift in Sources */,
D8F917142A4D74C3008A5370 /* GeneralSettingsDiffableTableViewDataSource.swift in Sources */,
2A5242772C199EC2005B9E22 /* PrivacySafetySettingPreset.swift in Sources */,
D85DF97A2C4E49A400A01408 /* NotificationRequestCountView.swift in Sources */,
DB6180FA26391F2E0018D199 /* MediaPreviewViewModel.swift in Sources */,
2D7631A825C1535600929FB9 /* StatusTableViewCell.swift in Sources */,
DB6B7500272FF73800C70B6E /* UserTableViewCell.swift in Sources */,

View File

@ -0,0 +1,44 @@
// Copyright © 2024 Mastodon gGmbH. All rights reserved.
import UIKit
import MastodonAsset
class NotificationRequestCountView: UIView {
let countLabel: UILabel
init() {
countLabel = UILabel()
countLabel.translatesAutoresizingMaskIntoConstraints = false
countLabel.textColor = .white
countLabel.font = UIFontMetrics(forTextStyle: .footnote).scaledFont(for: .systemFont(ofSize: 13, weight: .regular))
countLabel.textAlignment = .center
super.init(frame: .zero)
addSubview(countLabel)
backgroundColor = Asset.Colors.Brand.blurple.color
layer.borderWidth = 2.0
layer.borderColor = UIColor.white.cgColor
applyCornerRadius(radius: 10)
setupConstraints()
}
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
private func setupConstraints() {
let constraints = [
countLabel.topAnchor.constraint(equalTo: topAnchor, constant: 2),
countLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 5),
trailingAnchor.constraint(equalTo: countLabel.trailingAnchor, constant: 5),
bottomAnchor.constraint(equalTo: countLabel.bottomAnchor, constant: 2),
widthAnchor.constraint(greaterThanOrEqualToConstant: 20),
heightAnchor.constraint(greaterThanOrEqualToConstant: 20)
]
NSLayoutConstraint.activate(constraints)
}
}

View File

@ -36,6 +36,8 @@ class NotificationRequestTableViewCell: UITableViewCell {
let rejectNotificationRequestActivityIndicatorView: UIActivityIndicatorView
let rejectNotificationRequestButton: HighlightDimmableButton
let requestCountView: NotificationRequestCountView
private let buttonStackView: UIStackView
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
@ -118,12 +120,16 @@ class NotificationRequestTableViewCell: UITableViewCell {
contentStackView.axis = .vertical
contentStackView.alignment = .leading
requestCountView = NotificationRequestCountView()
requestCountView.translatesAutoresizingMaskIntoConstraints = false
super.init(style: style, reuseIdentifier: reuseIdentifier)
acceptNotificationRequestButton.addTarget(self, action: #selector(NotificationRequestTableViewCell.acceptNotificationRequest(_:)), for: .touchUpInside)
rejectNotificationRequestButton.addTarget(self, action: #selector(NotificationRequestTableViewCell.rejectNotificationRequest(_:)), for: .touchUpInside)
contentView.addSubview(contentStackView)
contentView.addSubview(requestCountView)
setupConstraints()
}
@ -148,6 +154,9 @@ class NotificationRequestTableViewCell: UITableViewCell {
rejectNotificationRequestActivityIndicatorView.centerXAnchor.constraint(equalTo: rejectNotificationRequestButton.centerXAnchor),
rejectNotificationRequestActivityIndicatorView.centerYAnchor.constraint(equalTo: rejectNotificationRequestButton.centerYAnchor),
requestCountView.trailingAnchor.constraint(equalTo: avatarButton.trailingAnchor, constant: 2),
requestCountView.bottomAnchor.constraint(equalTo: avatarButton.bottomAnchor, constant: 2),
]
NSLayoutConstraint.activate(constraints)
@ -180,6 +189,10 @@ class NotificationRequestTableViewCell: UITableViewCell {
let metaUsername = PlaintextMetaContent(string: "@\(account.acct)")
usernameLabel.configure(content: metaUsername)
requestCountView.countLabel.text = request.notificationsCount
requestCountView.setNeedsLayout()
requestCountView.layoutIfNeeded()
self.notificationRequest = request
}