Merge branch 'release-1.4.3' into feature-purple-tint
# Conflicts: # Mastodon.xcodeproj/xcuserdata/mainasuk.xcuserdatad/xcschemes/xcschememanagement.plist
This commit is contained in:
commit
368ab71e7a
|
@ -378,6 +378,7 @@
|
||||||
DB697DDD278F521D004EF2F7 /* DataSourceFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDC278F521D004EF2F7 /* DataSourceFacade.swift */; };
|
DB697DDD278F521D004EF2F7 /* DataSourceFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDC278F521D004EF2F7 /* DataSourceFacade.swift */; };
|
||||||
DB697DDF278F524F004EF2F7 /* DataSourceFacade+Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDE278F524F004EF2F7 /* DataSourceFacade+Profile.swift */; };
|
DB697DDF278F524F004EF2F7 /* DataSourceFacade+Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDE278F524F004EF2F7 /* DataSourceFacade+Profile.swift */; };
|
||||||
DB697DE1278F5296004EF2F7 /* DataSourceFacade+Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DE0278F5296004EF2F7 /* DataSourceFacade+Model.swift */; };
|
DB697DE1278F5296004EF2F7 /* DataSourceFacade+Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DE0278F5296004EF2F7 /* DataSourceFacade+Model.swift */; };
|
||||||
|
DB6988DE2848D11C002398EF /* PagerTabStripNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6988DD2848D11C002398EF /* PagerTabStripNavigateable.swift */; };
|
||||||
DB6B35182601FA3400DC1E11 /* MastodonAttachmentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */; };
|
DB6B35182601FA3400DC1E11 /* MastodonAttachmentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */; };
|
||||||
DB6B351E2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */; };
|
DB6B351E2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */; };
|
||||||
DB6B74EF272FB55000C70B6E /* FollowerListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */; };
|
DB6B74EF272FB55000C70B6E /* FollowerListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */; };
|
||||||
|
@ -1139,6 +1140,7 @@
|
||||||
DB697DDC278F521D004EF2F7 /* DataSourceFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSourceFacade.swift; sourceTree = "<group>"; };
|
DB697DDC278F521D004EF2F7 /* DataSourceFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSourceFacade.swift; sourceTree = "<group>"; };
|
||||||
DB697DDE278F524F004EF2F7 /* DataSourceFacade+Profile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Profile.swift"; sourceTree = "<group>"; };
|
DB697DDE278F524F004EF2F7 /* DataSourceFacade+Profile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Profile.swift"; sourceTree = "<group>"; };
|
||||||
DB697DE0278F5296004EF2F7 /* DataSourceFacade+Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Model.swift"; sourceTree = "<group>"; };
|
DB697DE0278F5296004EF2F7 /* DataSourceFacade+Model.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceFacade+Model.swift"; sourceTree = "<group>"; };
|
||||||
|
DB6988DD2848D11C002398EF /* PagerTabStripNavigateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PagerTabStripNavigateable.swift; sourceTree = "<group>"; };
|
||||||
DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAttachmentService.swift; sourceTree = "<group>"; };
|
DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAttachmentService.swift; sourceTree = "<group>"; };
|
||||||
DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentCollectionViewCell.swift; sourceTree = "<group>"; };
|
DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentCollectionViewCell.swift; sourceTree = "<group>"; };
|
||||||
DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowerListViewController.swift; sourceTree = "<group>"; };
|
DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowerListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
@ -1750,6 +1752,7 @@
|
||||||
DBCA0EBB282BB38A0029E2B0 /* PageboyNavigateable.swift */,
|
DBCA0EBB282BB38A0029E2B0 /* PageboyNavigateable.swift */,
|
||||||
DB1D843326579931000346B3 /* TableViewControllerNavigateable.swift */,
|
DB1D843326579931000346B3 /* TableViewControllerNavigateable.swift */,
|
||||||
DB1D842D26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift */,
|
DB1D842D26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift */,
|
||||||
|
DB6988DD2848D11C002398EF /* PagerTabStripNavigateable.swift */,
|
||||||
);
|
);
|
||||||
path = Protocol;
|
path = Protocol;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4250,6 +4253,7 @@
|
||||||
DB63F752279944AA00455B82 /* SearchHistorySectionHeaderCollectionReusableView.swift in Sources */,
|
DB63F752279944AA00455B82 /* SearchHistorySectionHeaderCollectionReusableView.swift in Sources */,
|
||||||
DB3E6FDD2806A40F00B035AE /* DiscoveryHashtagsViewController.swift in Sources */,
|
DB3E6FDD2806A40F00B035AE /* DiscoveryHashtagsViewController.swift in Sources */,
|
||||||
DB938EED2623F79B00E5B6C1 /* ThreadViewModel.swift in Sources */,
|
DB938EED2623F79B00E5B6C1 /* ThreadViewModel.swift in Sources */,
|
||||||
|
DB6988DE2848D11C002398EF /* PagerTabStripNavigateable.swift in Sources */,
|
||||||
DBBC24AC26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift in Sources */,
|
DBBC24AC26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift in Sources */,
|
||||||
DBC7A67C260DFADE00E57475 /* StatusPublishService.swift in Sources */,
|
DBC7A67C260DFADE00E57475 /* StatusPublishService.swift in Sources */,
|
||||||
2DCB73FD2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift in Sources */,
|
2DCB73FD2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift in Sources */,
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
//
|
||||||
|
// PagerTabStripNavigateable.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by MainasuK on 2022-6-2.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import XLPagerTabStrip
|
||||||
|
import MastodonLocalization
|
||||||
|
|
||||||
|
typealias PagerTabStripNavigateable = PagerTabStripNavigateableCore & PagerTabStripNavigateableRelay
|
||||||
|
|
||||||
|
protocol PagerTabStripNavigateableCore: AnyObject {
|
||||||
|
var navigateablePageViewController: PagerTabStripViewController { get }
|
||||||
|
var pagerTabStripNavigateKeyCommands: [UIKeyCommand] { get }
|
||||||
|
|
||||||
|
func pagerTabStripNavigateKeyCommandHandler(_ sender: UIKeyCommand)
|
||||||
|
func navigate(direction: PagerTabStripNavigationDirection)
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc protocol PagerTabStripNavigateableRelay: AnyObject {
|
||||||
|
func pagerTabStripNavigateKeyCommandHandlerRelay(_ sender: UIKeyCommand)
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PagerTabStripNavigationDirection: String, CaseIterable {
|
||||||
|
case previous
|
||||||
|
case next
|
||||||
|
|
||||||
|
var title: String {
|
||||||
|
switch self {
|
||||||
|
case .previous: return L10n.Common.Controls.Keyboard.SegmentedControl.previousSection
|
||||||
|
case .next: return L10n.Common.Controls.Keyboard.SegmentedControl.nextSection
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UIKeyCommand input
|
||||||
|
var input: String {
|
||||||
|
switch self {
|
||||||
|
case .previous: return "["
|
||||||
|
case .next: return "]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var modifierFlags: UIKeyModifierFlags {
|
||||||
|
switch self {
|
||||||
|
case .previous: return [.shift, .command]
|
||||||
|
case .next: return [.shift, .command]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var propertyList: Any {
|
||||||
|
return rawValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension PagerTabStripNavigateableCore where Self: PagerTabStripNavigateableRelay {
|
||||||
|
var pagerTabStripNavigateKeyCommands: [UIKeyCommand] {
|
||||||
|
PagerTabStripNavigationDirection.allCases.map { direction in
|
||||||
|
UIKeyCommand(
|
||||||
|
title: direction.title,
|
||||||
|
image: nil,
|
||||||
|
action: #selector(Self.pagerTabStripNavigateKeyCommandHandlerRelay(_:)),
|
||||||
|
input: direction.input,
|
||||||
|
modifierFlags: direction.modifierFlags,
|
||||||
|
propertyList: direction.propertyList,
|
||||||
|
alternates: [],
|
||||||
|
discoverabilityTitle: nil,
|
||||||
|
attributes: [],
|
||||||
|
state: .off
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func pagerTabStripNavigateKeyCommandHandler(_ sender: UIKeyCommand) {
|
||||||
|
guard let rawValue = sender.propertyList as? String,
|
||||||
|
let direction = PagerTabStripNavigationDirection(rawValue: rawValue) else { return }
|
||||||
|
navigate(direction: direction)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension PagerTabStripNavigateableCore {
|
||||||
|
func navigate(direction: PagerTabStripNavigationDirection) {
|
||||||
|
let index = navigateablePageViewController.currentIndex
|
||||||
|
let targetIndex: Int
|
||||||
|
|
||||||
|
switch direction {
|
||||||
|
case .previous:
|
||||||
|
targetIndex = index - 1
|
||||||
|
case .next:
|
||||||
|
targetIndex = index + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
guard targetIndex >= 0,
|
||||||
|
!navigateablePageViewController.viewControllers.isEmpty,
|
||||||
|
targetIndex < navigateablePageViewController.viewControllers.count,
|
||||||
|
navigateablePageViewController.canMoveTo(index: targetIndex)
|
||||||
|
else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
navigateablePageViewController.moveToViewController(at: targetIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -113,6 +113,12 @@ extension StatusTableViewControllerNavigateableCore where Self: DataSourceProvid
|
||||||
private func previewImage() async {
|
private func previewImage() async {
|
||||||
guard let status = await statusRecord() else { return }
|
guard let status = await statusRecord() else { return }
|
||||||
|
|
||||||
|
// workaround media preview not first responder issue
|
||||||
|
if let presentedViewController = presentedViewController as? MediaPreviewViewController {
|
||||||
|
presentedViewController.dismiss(animated: true, completion: nil)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
guard let provider = self as? (DataSourceProvider & MediaPreviewableViewController) else { return }
|
guard let provider = self as? (DataSourceProvider & MediaPreviewableViewController) else { return }
|
||||||
guard let indexPathForSelectedRow = tableView.indexPathForSelectedRow,
|
guard let indexPathForSelectedRow = tableView.indexPathForSelectedRow,
|
||||||
let cell = tableView.cellForRow(at: indexPathForSelectedRow) as? StatusViewContainerTableViewCell
|
let cell = tableView.cellForRow(at: indexPathForSelectedRow) as? StatusViewContainerTableViewCell
|
||||||
|
|
|
@ -261,7 +261,6 @@ extension ProfileViewController {
|
||||||
bindTitleView()
|
bindTitleView()
|
||||||
bindMoreBarButtonItem()
|
bindMoreBarButtonItem()
|
||||||
bindPager()
|
bindPager()
|
||||||
// updateBarButtonInsets()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
@ -270,32 +269,6 @@ extension ProfileViewController {
|
||||||
setNeedsStatusBarAppearanceUpdate()
|
setNeedsStatusBarAppearanceUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
|
||||||
super.traitCollectionDidChange(previousTraitCollection)
|
|
||||||
|
|
||||||
// updateBarButtonInsets()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
extension ProfileViewController {
|
|
||||||
|
|
||||||
// private func updateBarButtonInsets() {
|
|
||||||
// let margin: CGFloat = {
|
|
||||||
// switch traitCollection.userInterfaceIdiom {
|
|
||||||
// case .phone:
|
|
||||||
// return ProfileViewController.containerViewMarginForCompactHorizontalSizeClass
|
|
||||||
// default:
|
|
||||||
// return traitCollection.horizontalSizeClass == .regular ?
|
|
||||||
// ProfileViewController.containerViewMarginForRegularHorizontalSizeClass :
|
|
||||||
// ProfileViewController.containerViewMarginForCompactHorizontalSizeClass
|
|
||||||
// }
|
|
||||||
// }()
|
|
||||||
//
|
|
||||||
// profileHeaderViewController.buttonBar.layout.contentInset.left = margin
|
|
||||||
// profileHeaderViewController.buttonBar.layout.contentInset.right = margin
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ProfileViewController {
|
extension ProfileViewController {
|
||||||
|
@ -869,28 +842,28 @@ extension ProfileViewController: ScrollViewContainer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//extension ProfileViewController {
|
extension ProfileViewController {
|
||||||
//
|
|
||||||
// override var keyCommands: [UIKeyCommand]? {
|
override var keyCommands: [UIKeyCommand]? {
|
||||||
// if !viewModel.isEditing.value {
|
if !viewModel.isEditing {
|
||||||
// return pageboyNavigateKeyCommands
|
return pagerTabStripNavigateKeyCommands
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// return nil
|
return nil
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//// MARK: - PageboyNavigateable
|
// MARK: - PagerTabStripNavigateable
|
||||||
//extension ProfileViewController: PageboyNavigateable {
|
extension ProfileViewController: PagerTabStripNavigateable {
|
||||||
//
|
|
||||||
// var navigateablePageViewController: PageboyViewController {
|
var navigateablePageViewController: PagerTabStripViewController {
|
||||||
// return profileSegmentedViewController.pagingViewController
|
return profilePagingViewController
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
// @objc func pageboyNavigateKeyCommandHandlerRelay(_ sender: UIKeyCommand) {
|
@objc func pagerTabStripNavigateKeyCommandHandlerRelay(_ sender: UIKeyCommand) {
|
||||||
// pageboyNavigateKeyCommandHandler(sender)
|
pagerTabStripNavigateKeyCommandHandler(sender)
|
||||||
// }
|
}
|
||||||
//
|
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue