Skip to content

Commit

Permalink
Merge commit '408529918a01c569a5b0c731c69c14e0361ad864'
Browse files Browse the repository at this point in the history
  • Loading branch information
Ali committed Sep 23, 2023
2 parents 38759d6 + 4085299 commit eb432f3
Show file tree
Hide file tree
Showing 9 changed files with 144 additions and 79 deletions.
3 changes: 3 additions & 0 deletions submodules/ChatListUI/Sources/ChatListController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,9 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
self.storyProgressDisposable?.dispose()
self.storiesPostingAvailabilityDisposable?.dispose()
self.sharedOpenStoryProgressDisposable.dispose()
for (_, disposable) in self.preloadStoryResourceDisposables {
disposable.dispose()
}
}

private func updateNavigationMetadata() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,8 @@ final class ChatSendMessageActionSheetControllerNode: ViewControllerTracingNode,
self.scrollNode.view.contentInsetAdjustmentBehavior = .never
}

self.effectView.effect = makeCustomZoomBlurEffect(isLight: self.presentationData.theme.rootController.keyboardColor == .light)

if let snapshotView = self.sourceSendButton.view.snapshotView(afterScreenUpdates: false) {
self.sendButtonNode.view.addSubview(snapshotView)
}
Expand Down Expand Up @@ -446,10 +448,8 @@ final class ChatSendMessageActionSheetControllerNode: ViewControllerTracingNode,
}

self.textInputNode.textView.setContentOffset(self.textInputNode.textView.contentOffset, animated: false)

UIView.animate(withDuration: 0.2, animations: {
self.effectView.effect = makeCustomZoomBlurEffect(isLight: self.presentationData.theme.rootController.keyboardColor == .light)
}, completion: { _ in })

self.effectView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.dimNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.contentContainerNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
self.messageBackgroundNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3)
Expand Down Expand Up @@ -533,24 +533,32 @@ final class ChatSendMessageActionSheetControllerNode: ViewControllerTracingNode,
var completedBubble = false
var completedAlpha = false

var completed = false
let intermediateCompletion: () -> Void = { [weak self] in
if completedEffect && completedButton && completedBubble && completedAlpha {
if completedEffect && completedButton && completedBubble && completedAlpha && !completed {
completed = true
self?.textInputNode.isHidden = false
self?.sourceSendButton.isHidden = false
completion()
}
}

UIView.animate(withDuration: 0.2, animations: {
self.effectView.effect = nil
}, completion: { _ in
self.effectView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { _ in
completedEffect = true
intermediateCompletion()
})

self.dimNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false)
self.contentContainerNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { _ in })

Queue.mainQueue().after(0.45) {
if !completed {
completed = true
self.textInputNode.isHidden = false
self.sourceSendButton.isHidden = false
completion()
}
}

if self.animateInputField {
if cancel {
self.fromMessageTextNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.3, delay: 0.15, removeOnCompletion: false)
Expand All @@ -561,7 +569,7 @@ final class ChatSendMessageActionSheetControllerNode: ViewControllerTracingNode,
})
} else {
self.textInputNode.isHidden = false
self.messageClipNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false, completion: { _ in
self.messageClipNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { _ in
completedAlpha = true
intermediateCompletion()
})
Expand Down
5 changes: 5 additions & 0 deletions submodules/PremiumUI/Sources/PremiumLimitScreen.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1676,6 +1676,7 @@ public class PremiumLimitScreen: ViewControllerComponentContainer {
private let context: AccountContext
private var action: (() -> Bool)?
private let openPeer: (EnginePeer) -> Void
public var disposed: () -> Void = {}

private let hapticFeedback = HapticFeedback()

Expand Down Expand Up @@ -1707,6 +1708,10 @@ public class PremiumLimitScreen: ViewControllerComponentContainer {
fatalError("init(coder:) has not been implemented")
}

deinit {
self.disposed()
}

public override func viewDidLoad() {
super.viewDidLoad()

Expand Down
2 changes: 1 addition & 1 deletion submodules/StatisticsUI/Sources/StatsOverviewItem.swift
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ class StatsOverviewItemNode: ListViewItemNode {
if let stats = item.stats as? ChannelBoostStatus {
topLeftValueLabelLayoutAndApply = makeTopLeftValueLabelLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "\(stats.level)", font: valueFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))

topRightValueLabelLayoutAndApply = makeTopRightValueLabelLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "\(Int(stats.premiumAudience?.value ?? 0))", font: valueFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
topRightValueLabelLayoutAndApply = makeTopRightValueLabelLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "\(Int(stats.premiumAudience?.value ?? 0))", font: valueFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))

bottomLeftValueLabelLayoutAndApply = makeBottomLeftValueLabelLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: "\(stats.boosts)", font: valueFont, textColor: item.presentationData.theme.list.itemPrimaryTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1382,6 +1382,9 @@ public final class StoryItemSetContainerComponent: Component {
if self.sendMessageContext.menuController != nil {
return .pause
}
if self.sendMessageContext.progressPauseContext.hasExternalController {
return .pause
}
if let navigationController = component.controller()?.navigationController as? NavigationController {
let topViewController = navigationController.topViewController
if !(topViewController is StoryContainerScreen) && !(topViewController is MediaEditorScreen) && !(topViewController is ShareWithPeersScreen) && !(topViewController is AttachmentController) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ final class StoryItemSetContainerSendMessage {
weak var statusController: ViewController?
weak var lookupController: UIViewController?
weak var menuController: ViewController?
var progressPauseContext = StoryProgressPauseContext()
var isViewingAttachedStickers = false

var currentTooltipUpdateTimer: Foundation.Timer?
Expand Down Expand Up @@ -2617,78 +2618,96 @@ final class StoryItemSetContainerSendMessage {
guard let component = view.component, let navigationController = component.controller()?.navigationController as? NavigationController else {
return
}
let peerId = component.slice.peer.id
component.context.sharedContext.openResolvedUrl(result, context: component.context, urlContext: .chat(peerId: peerId, updatedPresentationData: nil), navigationController: navigationController, forceExternal: forceExternal, openPeer: { [weak self, weak view] peerId, navigation in
guard let self, let view, let component = view.component, let controller = component.controller() as? StoryContainerScreen else {

self.progressPauseContext.update = { [weak self, weak view] controller in
guard let self, let view else {
return
}

switch navigation {
case let .chat(_, subject, peekData):
if let navigationController = controller.navigationController as? NavigationController {
if case let .channel(channel) = peerId, channel.flags.contains(.isForum) {
controller.dismissWithoutTransitionOut()
component.context.sharedContext.navigateToForumChannel(context: component.context, peerId: peerId.id, navigationController: navigationController)
} else {
component.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: component.context, chatLocation: .peer(peerId), subject: subject, keepStack: .always, peekData: peekData, pushController: { [weak controller, weak navigationController] chatController, animated, completion in
guard let controller, let navigationController else {
return
}
if "".isEmpty {
navigationController.pushViewController(chatController)
} else {
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index)
self.progressPauseContext.externalController = controller
view.updateIsProgressPaused()
}

let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }.withUpdated(theme: defaultDarkColorPresentationTheme)
let updatedPresentationData: (PresentationData, Signal<PresentationData, NoError>) = (presentationData, .single(presentationData))
let peerId = component.slice.peer.id
component.context.sharedContext.openResolvedUrl(
result,
context: component.context,
urlContext: .chat(peerId: peerId, updatedPresentationData: updatedPresentationData),
navigationController: navigationController,
forceExternal: forceExternal,
openPeer: { [weak self, weak view] peerId, navigation in
guard let self, let view, let component = view.component, let controller = component.controller() as? StoryContainerScreen else {
return
}

switch navigation {
case let .chat(_, subject, peekData):
if let navigationController = controller.navigationController as? NavigationController {
if case let .channel(channel) = peerId, channel.flags.contains(.isForum) {
controller.dismissWithoutTransitionOut()
component.context.sharedContext.navigateToForumChannel(context: component.context, peerId: peerId.id, navigationController: navigationController)
} else {
component.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: component.context, chatLocation: .peer(peerId), subject: subject, keepStack: .always, peekData: peekData, pushController: { [weak controller, weak navigationController] chatController, animated, completion in
guard let controller, let navigationController else {
return
}
if "".isEmpty {
navigationController.pushViewController(chatController)
} else {
viewControllers.append(chatController)
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index)
} else {
viewControllers.append(chatController)
}
navigationController.setViewControllers(viewControllers, animated: animated)
}
navigationController.setViewControllers(viewControllers, animated: animated)
}
}))
}
}
case .info:
self.navigationActionDisposable.set((component.context.account.postbox.loadedPeerWithId(peerId.id)
|> take(1)
|> deliverOnMainQueue).start(next: { [weak view] peer in
guard let view, let component = view.component else {
return
}))
}
}
if peer.restrictionText(platform: "ios", contentSettings: component.context.currentContentSettings.with { $0 }) == nil {
if let infoController = component.context.sharedContext.makePeerInfoController(context: component.context, updatedPresentationData: nil, peer: peer, mode: .generic, avatarInitiallyExpanded: false, fromChat: false, requestsContext: nil) {
component.controller()?.push(infoController)
case .info:
self.navigationActionDisposable.set((component.context.account.postbox.loadedPeerWithId(peerId.id)
|> take(1)
|> deliverOnMainQueue).start(next: { [weak view] peer in
guard let view, let component = view.component else {
return
}
if peer.restrictionText(platform: "ios", contentSettings: component.context.currentContentSettings.with { $0 }) == nil {
if let infoController = component.context.sharedContext.makePeerInfoController(context: component.context, updatedPresentationData: nil, peer: peer, mode: .generic, avatarInitiallyExpanded: false, fromChat: false, requestsContext: nil) {
component.controller()?.push(infoController)
}
}
}))
case let .withBotStartPayload(startPayload):
if let navigationController = controller.navigationController as? NavigationController {
component.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: component.context, chatLocation: .peer(peerId), botStart: startPayload, keepStack: .always))
}
}))
case let .withBotStartPayload(startPayload):
if let navigationController = controller.navigationController as? NavigationController {
component.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: component.context, chatLocation: .peer(peerId), botStart: startPayload, keepStack: .always))
}
case let .withAttachBot(attachBotStart):
if let navigationController = controller.navigationController as? NavigationController {
component.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: component.context, chatLocation: .peer(peerId), attachBotStart: attachBotStart))
}
default:
break
}
},
sendFile: nil,
sendSticker: nil,
requestMessageActionUrlAuth: nil,
joinVoiceChat: nil,
present: { [weak view] c, a in
guard let view, let component = view.component, let controller = component.controller() else {
return
}
controller.present(c, in: .window(.root), with: a)
}, dismissInput: { [weak view] in
guard let view else {
return
}
view.endEditing(true)
},
contentContext: nil
case let .withAttachBot(attachBotStart):
if let navigationController = controller.navigationController as? NavigationController {
component.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: component.context, chatLocation: .peer(peerId), attachBotStart: attachBotStart))
}
default:
break
}
},
sendFile: nil,
sendSticker: nil,
requestMessageActionUrlAuth: nil,
joinVoiceChat: nil,
present: { [weak view] c, a in
guard let view, let component = view.component, let controller = component.controller() else {
return
}
controller.present(c, in: .window(.root), with: a)
},
dismissInput: { [weak view] in
guard let view else {
return
}
view.endEditing(true)
},
contentContext: self.progressPauseContext
)
}

Expand Down Expand Up @@ -3397,3 +3416,12 @@ final class StoryItemSetContainerSendMessage {
}
}
}

public class StoryProgressPauseContext {
fileprivate weak var externalController: ViewController?
public fileprivate(set) var update: (ViewController?) -> Void = { _ in }

var hasExternalController: Bool {
return self.externalController != nil
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ final class ChatTextInputAudioRecordingTimeNode: ASDisplayNode {

deinit {
self.stateDisposable.dispose()
self.durationDisposable?.dispose()
}

func updateTheme(theme: PresentationTheme) {
Expand Down
Loading

0 comments on commit eb432f3

Please sign in to comment.