Fix story privacy layout

This commit is contained in:
Ilya Laktyushin
2023-07-30 16:57:54 +02:00
parent 75129f6ecb
commit 487c01f448
3 changed files with 48 additions and 39 deletions

View File

@@ -3214,7 +3214,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
public var willDismiss: () -> Void = { }
private var closeFriends = Promise<[EnginePeer]>()
private let storiesGrayList: BlockedPeersContext
private let storiesBlockedPeers: BlockedPeersContext
private let hapticFeedback = HapticFeedback()
@@ -3239,7 +3239,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
self.transitionOut = transitionOut
self.completion = completion
self.storiesGrayList = BlockedPeersContext(account: context.account, subject: .stories)
self.storiesBlockedPeers = BlockedPeersContext(account: context.account, subject: .stories)
if let transitionIn, case .camera = transitionIn {
self.isSavingAvailable = true
@@ -3314,7 +3314,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
subject: .stories(editing: false),
initialPeerIds: Set(privacy.privacy.additionallyIncludePeers),
closeFriends: self.closeFriends.get(),
storiesGrayList: self.storiesGrayList
blockedPeersContext: self.storiesBlockedPeers
)
let _ = (stateContext.ready |> filter { $0 } |> take(1) |> deliverOnMainQueue).start(next: { [weak self] _ in
guard let self else {
@@ -3342,7 +3342,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
guard let self else {
return
}
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, grayList: false, completion: { [weak self] privacy in
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, blockedPeers: false, completion: { [weak self] privacy in
guard let self else {
return
}
@@ -3354,11 +3354,11 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
), completion: completion)
})
},
editGrayList: { [weak self] privacy, allowScreenshots, pin in
editBlockedPeers: { [weak self] privacy, allowScreenshots, pin in
guard let self else {
return
}
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, grayList: true, completion: { [weak self] privacy in
self.openEditCategory(privacy: privacy, isForwardingDisabled: !allowScreenshots, pin: pin, blockedPeers: true, completion: { [weak self] privacy in
guard let self else {
return
}
@@ -3378,12 +3378,12 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
})
}
private func openEditCategory(privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, pin: Bool, grayList: Bool, completion: @escaping (EngineStoryPrivacy) -> Void) {
private func openEditCategory(privacy: EngineStoryPrivacy, isForwardingDisabled: Bool, pin: Bool, blockedPeers: Bool, completion: @escaping (EngineStoryPrivacy) -> Void) {
let subject: ShareWithPeersScreen.StateContext.Subject
if grayList {
subject = .chats(grayList: true)
if blockedPeers {
subject = .chats(blocked: true)
} else if privacy.base == .nobody {
subject = .chats(grayList: false)
subject = .chats(blocked: false)
} else {
subject = .contacts(privacy.base)
}
@@ -3391,7 +3391,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
context: self.context,
subject: subject,
initialPeerIds: Set(privacy.additionallyIncludePeers),
storiesGrayList: self.storiesGrayList
blockedPeersContext: self.storiesBlockedPeers
)
let _ = (stateContext.ready |> filter { $0 } |> take(1) |> deliverOnMainQueue).start(next: { [weak self] _ in
guard let self else {
@@ -3407,8 +3407,8 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
guard let self else {
return
}
if grayList {
let _ = self.storiesGrayList.updatePeerIds(result.additionallyIncludePeers).start()
if blockedPeers {
let _ = self.storiesBlockedPeers.updatePeerIds(result.additionallyIncludePeers).start()
completion(privacy)
} else if case .closeFriends = privacy.base {
let _ = self.context.engine.privacy.updateCloseFriends(peerIds: result.additionallyIncludePeers).start()
@@ -3419,7 +3419,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
}
},
editCategory: { _, _, _ in },
editGrayList: { _, _, _ in }
editBlockedPeers: { _, _, _ in }
)
controller.dismissed = {
self.node.mediaEditor?.play()

View File

@@ -39,7 +39,7 @@ final class ShareWithPeersScreenComponent: Component {
let optionItems: [OptionItem]
let completion: (EngineStoryPrivacy, Bool, Bool, [EnginePeer]) -> Void
let editCategory: (EngineStoryPrivacy, Bool, Bool) -> Void
let editGrayList: (EngineStoryPrivacy, Bool, Bool) -> Void
let editBlockedPeers: (EngineStoryPrivacy, Bool, Bool) -> Void
init(
context: AccountContext,
@@ -53,7 +53,7 @@ final class ShareWithPeersScreenComponent: Component {
optionItems: [OptionItem],
completion: @escaping (EngineStoryPrivacy, Bool, Bool, [EnginePeer]) -> Void,
editCategory: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void,
editGrayList: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
editBlockedPeers: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
) {
self.context = context
self.stateContext = stateContext
@@ -66,7 +66,7 @@ final class ShareWithPeersScreenComponent: Component {
self.optionItems = optionItems
self.completion = completion
self.editCategory = editCategory
self.editGrayList = editGrayList
self.editBlockedPeers = editBlockedPeers
}
static func ==(lhs: ShareWithPeersScreenComponent, rhs: ShareWithPeersScreenComponent) -> Bool {
@@ -1024,7 +1024,7 @@ final class ShareWithPeersScreenComponent: Component {
guard let self, let environment = self.environment, let controller = environment.controller() as? ShareWithPeersScreen else {
return
}
component.editGrayList(
component.editBlockedPeers(
EngineStoryPrivacy(base: .nobody, additionallyIncludePeers: []),
self.selectedOptions.contains(.screenshot),
self.selectedOptions.contains(.pin)
@@ -1672,7 +1672,7 @@ final class ShareWithPeersScreenComponent: Component {
))
sections.append(ItemLayout.Section(
id: 2,
insets: UIEdgeInsets(top: 28.0, left: 0.0, bottom: 0.0, right: 0.0),
insets: UIEdgeInsets(top: 28.0, left: 0.0, bottom: 24.0, right: 0.0),
itemHeight: optionItemSize.height,
itemCount: component.optionItems.count
))
@@ -1782,9 +1782,9 @@ final class ShareWithPeersScreenComponent: Component {
let inset: CGFloat
if case let .stories(editing) = component.stateContext.subject {
if editing {
inset = 446.0
inset = 478.0
} else {
inset = 605.0
inset = 630.0
}
} else {
inset = 600.0
@@ -2074,7 +2074,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
public final class StateContext {
public enum Subject: Equatable {
case stories(editing: Bool)
case chats(grayList: Bool)
case chats(blocked: Bool)
case contacts(EngineStoryPrivacy.Base)
case search(query: String, onlyContacts: Bool)
}
@@ -2083,7 +2083,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
public let subject: Subject
public private(set) var initialPeerIds: Set<EnginePeer.Id> = Set()
fileprivate let storiesGrayList: BlockedPeersContext?
fileprivate let blockedPeersContext: BlockedPeersContext?
private var stateDisposable: Disposable?
private let stateSubject = Promise<State>()
@@ -2097,18 +2097,18 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
public init(
context: AccountContext,
subject: Subject = .chats(grayList: false),
subject: Subject = .chats(blocked: false),
initialPeerIds: Set<EnginePeer.Id> = Set(),
closeFriends: Signal<[EnginePeer], NoError> = .single([]),
storiesGrayList: BlockedPeersContext? = nil
blockedPeersContext: BlockedPeersContext? = nil
) {
self.subject = subject
self.initialPeerIds = initialPeerIds
self.storiesGrayList = storiesGrayList
self.blockedPeersContext = blockedPeersContext
let grayListPeers: Signal<[EnginePeer], NoError>
if let storiesGrayList {
grayListPeers = storiesGrayList.state
if let blockedPeersContext {
grayListPeers = blockedPeersContext.state
|> map { state -> [EnginePeer] in
return state.peers.compactMap { $0.peer.flatMap(EnginePeer.init) }
}
@@ -2426,7 +2426,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
stateContext: StateContext,
completion: @escaping (EngineStoryPrivacy, Bool, Bool, [EnginePeer]) -> Void,
editCategory: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void,
editGrayList: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
editBlockedPeers: @escaping (EngineStoryPrivacy, Bool, Bool) -> Void
) {
self.context = context
@@ -2537,7 +2537,7 @@ public class ShareWithPeersScreen: ViewControllerComponentContainer {
optionItems: optionItems,
completion: completion,
editCategory: editCategory,
editGrayList: editGrayList
editBlockedPeers: editBlockedPeers
), navigationBarAppearance: .none, theme: .dark)
self.statusBar.statusBarStyle = .Ignore

View File

@@ -3466,19 +3466,23 @@ public final class StoryItemSetContainerComponent: Component {
guard let self else {
return
}
self.openItemPrivacyCategory(privacy: privacy, completion: { [weak self] privacy in
self.openItemPrivacyCategory(privacy: privacy, blockedPeers: false, completion: { [weak self] privacy in
guard let self else {
return
}
self.openItemPrivacySettings(initialPrivacy: privacy)
})
},
editGrayList: { [weak self] privacy, _, _ in
editBlockedPeers: { [weak self] privacy, _, _ in
guard let self else {
return
}
let _ = self
let _ = privacy
self.openItemPrivacyCategory(privacy: privacy, blockedPeers: true, completion: { [weak self] privacy in
guard let self else {
return
}
self.openItemPrivacySettings(initialPrivacy: privacy)
})
}
)
controller.dismissed = { [weak self] in
@@ -3494,13 +3498,15 @@ public final class StoryItemSetContainerComponent: Component {
})
}
private func openItemPrivacyCategory(privacy: EngineStoryPrivacy, completion: @escaping (EngineStoryPrivacy) -> Void) {
private func openItemPrivacyCategory(privacy: EngineStoryPrivacy, blockedPeers: Bool, completion: @escaping (EngineStoryPrivacy) -> Void) {
guard let context = self.component?.context else {
return
}
let subject: ShareWithPeersScreen.StateContext.Subject
if privacy.base == .nobody {
subject = .chats(grayList: false)
if blockedPeers {
subject = .chats(blocked: true)
} else if privacy.base == .nobody {
subject = .chats(blocked: false)
} else {
subject = .contacts(privacy.base)
}
@@ -3514,7 +3520,10 @@ public final class StoryItemSetContainerComponent: Component {
initialPrivacy: privacy,
stateContext: stateContext,
completion: { [weak self] result, _, _, peers in
if case .closeFriends = privacy.base {
if blockedPeers {
// let _ = self.storiesBlockedPeers.updatePeerIds(result.additionallyIncludePeers).start()
completion(privacy)
} else if case .closeFriends = privacy.base {
let _ = context.engine.privacy.updateCloseFriends(peerIds: result.additionallyIncludePeers).start()
if let component = self?.component {
component.closeFriends.set(.single(peers))
@@ -3525,7 +3534,7 @@ public final class StoryItemSetContainerComponent: Component {
}
},
editCategory: { _, _, _ in },
editGrayList: { _, _, _ in }
editBlockedPeers: { _, _, _ in }
)
controller.dismissed = { [weak self] in
if let self {