Add a filtering-button that is only visible if there's a policy (IOS-241)
This commit is contained in:
parent
cf39ad6d68
commit
3118861984
|
@ -137,6 +137,7 @@
|
|||
D8099078294BC8A30050219F /* PrivacyTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8099077294BC8A30050219F /* PrivacyTableViewController.swift */; };
|
||||
D809907A294BC9390050219F /* PrivacyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8099079294BC9390050219F /* PrivacyTableViewCell.swift */; };
|
||||
D809907C294D25510050219F /* PrivacyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D809907B294D25510050219F /* PrivacyViewModel.swift */; };
|
||||
D80EC2632C2978EE009724A5 /* NotificationPolicyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80EC2622C2978EE009724A5 /* NotificationPolicyViewController.swift */; };
|
||||
D80F627C2B5C32C500877059 /* NotificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80F627A2B5C32C500877059 /* NotificationView.swift */; };
|
||||
D81439862AD415DE0071A88F /* AboutInstance.swift in Sources */ = {isa = PBXBuildFile; fileRef = D81439852AD415DE0071A88F /* AboutInstance.swift */; };
|
||||
D81439882AD450A40071A88F /* AboutInstanceTableViewDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D81439872AD450A40071A88F /* AboutInstanceTableViewDataSource.swift */; };
|
||||
|
@ -761,6 +762,7 @@
|
|||
D8099077294BC8A30050219F /* PrivacyTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyTableViewController.swift; sourceTree = "<group>"; };
|
||||
D8099079294BC9390050219F /* PrivacyTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyTableViewCell.swift; sourceTree = "<group>"; };
|
||||
D809907B294D25510050219F /* PrivacyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacyViewModel.swift; sourceTree = "<group>"; };
|
||||
D80EC2622C2978EE009724A5 /* NotificationPolicyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationPolicyViewController.swift; sourceTree = "<group>"; };
|
||||
D80F627A2B5C32C500877059 /* NotificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationView.swift; sourceTree = "<group>"; };
|
||||
D81439852AD415DE0071A88F /* AboutInstance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutInstance.swift; sourceTree = "<group>"; };
|
||||
D81439872AD450A40071A88F /* AboutInstanceTableViewDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutInstanceTableViewDataSource.swift; sourceTree = "<group>"; };
|
||||
|
@ -1758,6 +1760,14 @@
|
|||
path = Privacy;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D80EC2602C2978CB009724A5 /* Notification Filtering */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D80EC2622C2978EE009724A5 /* NotificationPolicyViewController.swift */,
|
||||
);
|
||||
path = "Notification Filtering";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D80F627E2B5C32E400877059 /* NotificationView */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -2667,6 +2677,7 @@
|
|||
DB9D6BFD25E4F57B0051B173 /* Notification */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
D80EC2602C2978CB009724A5 /* Notification Filtering */,
|
||||
DB63F765279A5E5600455B82 /* NotificationTimeline */,
|
||||
2D35237F26256F470031AF25 /* Cell */,
|
||||
D80F627E2B5C32E400877059 /* NotificationView */,
|
||||
|
@ -3808,6 +3819,7 @@
|
|||
DB9F58EC26EF435000E7BBE9 /* AccountViewController.swift in Sources */,
|
||||
D8318A802A4466D300C0FB73 /* SettingsCoordinator.swift in Sources */,
|
||||
DB3E6FF12806D96900B035AE /* DiscoveryNewsViewModel+Diffable.swift in Sources */,
|
||||
D80EC2632C2978EE009724A5 /* NotificationPolicyViewController.swift in Sources */,
|
||||
DB3E6FF82807C45300B035AE /* DiscoveryForYouViewModel.swift in Sources */,
|
||||
DB0F9D56283EB46200379AF8 /* ProfileHeaderView+Configuration.swift in Sources */,
|
||||
DB6746F0278F463B008A6B94 /* AutoGenerateProtocolDelegate.swift in Sources */,
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// Copyright © 2024 Mastodon gGmbH. All rights reserved.
|
||||
|
||||
import UIKit
|
||||
|
||||
class NotificationPolicyViewController: UIViewController {
|
||||
init() {
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
|
||||
view.backgroundColor = .systemGreen
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
|
||||
}
|
|
@ -86,13 +86,10 @@ extension NotificationViewController {
|
|||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
// aspectViewWillAppear(animated)
|
||||
|
||||
// fetch latest notification when scroll position is within half screen height to prevent list reload
|
||||
// if tableView.contentOffset.y < view.frame.height * 0.5 {
|
||||
// viewModel.loadLatestStateMachine.enter(NotificationViewModel.LoadLatestState.Loading.self)
|
||||
// }
|
||||
|
||||
// https://github.com/mastodon/documentation/pull/1447#issuecomment-2149225659
|
||||
if let viewModel, viewModel.notificationPolicy != nil {
|
||||
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "line.3.horizontal.decrease"), style: .plain, target: self, action: #selector(NotificationViewController.showNotificationPolicySettings(_:)))
|
||||
}
|
||||
|
||||
// needs trigger manually after onboarding dismiss
|
||||
setNeedsStatusBarAppearanceUpdate()
|
||||
|
@ -117,6 +114,20 @@ extension NotificationViewController {
|
|||
|
||||
// aspectViewDidDisappear(animated)
|
||||
}
|
||||
|
||||
//MARK: - Actions
|
||||
|
||||
@objc private func showNotificationPolicySettings(_ sender: Any) {
|
||||
//TODO: Move to SceneCoordinator
|
||||
let notificationPolicyViewController = NotificationPolicyViewController()
|
||||
notificationPolicyViewController.modalPresentationStyle = .formSheet
|
||||
|
||||
if let sheet = notificationPolicyViewController.sheetPresentationController {
|
||||
sheet.detents = [.medium(), .large()]
|
||||
}
|
||||
|
||||
present(UINavigationController(rootViewController: notificationPolicyViewController), animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
extension NotificationViewController {
|
||||
|
|
|
@ -11,6 +11,7 @@ import Pageboy
|
|||
import MastodonAsset
|
||||
import MastodonCore
|
||||
import MastodonLocalization
|
||||
import MastodonSDK
|
||||
|
||||
final class NotificationViewModel {
|
||||
|
||||
|
@ -19,6 +20,7 @@ final class NotificationViewModel {
|
|||
// input
|
||||
let context: AppContext
|
||||
let authContext: AuthContext
|
||||
var notificationPolicy: Mastodon.Entity.NotificationPolicy?
|
||||
let viewDidLoad = PassthroughSubject<Void, Never>()
|
||||
|
||||
// output
|
||||
|
@ -50,7 +52,16 @@ final class NotificationViewModel {
|
|||
init(context: AppContext, authContext: AuthContext) {
|
||||
self.context = context
|
||||
self.authContext = authContext
|
||||
|
||||
// end init
|
||||
Task {
|
||||
do {
|
||||
let policy = try await context.apiService.notificationPolicy(authenticationBox: authContext.mastodonAuthenticationBox)
|
||||
self.notificationPolicy = policy.value
|
||||
} catch {
|
||||
// we won't show the filtering-options.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue