Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions submodules/ChatListUI/Sources/ChatListContainerItemNode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,10 @@ final class ChatListContainerItemNode: ASDisplayNode {

var listInsets = insets
var additionalTopInset: CGFloat = 0.0
let isCompactAvatarRail = size.width <= 160.0
if isCompactAvatarRail {
listInsets.top += 74.0
}

if let chatFolderUpdates = self.chatFolderUpdates {
let topPanel: TopPanelItem
Expand Down
44 changes: 34 additions & 10 deletions submodules/ChatListUI/Sources/ChatListControllerNode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,8 @@ public final class ChatListContainerNode: ASDisplayNode, ASGestureRecognizerDele
return
}

if !self.isInlineMode, itemNode.listNode.isTracking && !self.currentItemNode.startedScrollingAtUpperBound && self.tempTopInset == 0.0 {
let isCompactAvatarRail = self.validLayout?.layout.deviceMetrics.type == .tablet && (self.validLayout?.layout.size.width ?? .greatestFiniteMagnitude) <= 160.0
if !isCompactAvatarRail && !self.isInlineMode, itemNode.listNode.isTracking && !self.currentItemNode.startedScrollingAtUpperBound && self.tempTopInset == 0.0 {
if case let .known(value) = offset {
if value < -1.0 {
if let controller = self.controller, let storySubscriptions = controller.orderedStorySubscriptions, shouldDisplayStoriesInChatListHeader(storySubscriptions: storySubscriptions, isHidden: controller.location == .chatList(groupId: .archive)) {
Expand Down Expand Up @@ -293,7 +294,10 @@ public final class ChatListContainerNode: ASDisplayNode, ASGestureRecognizerDele
}

let tempTopInset: CGFloat
if validLayout.inlineNavigationLocation != nil {
let isCompactAvatarRail = validLayout.layout.deviceMetrics.type == .tablet && validLayout.layout.size.width <= 160.0
if isCompactAvatarRail {
tempTopInset = 0.0
} else if validLayout.inlineNavigationLocation != nil {
tempTopInset = 0.0
} else if self.currentItemNode.startedScrollingAtUpperBound && !self.isInlineMode {
if let controller = self.controller, let storySubscriptions = controller.orderedStorySubscriptions, shouldDisplayStoriesInChatListHeader(storySubscriptions: storySubscriptions, isHidden: controller.location == .chatList(groupId: .archive)) {
Expand Down Expand Up @@ -534,7 +538,12 @@ public final class ChatListContainerNode: ASDisplayNode, ASGestureRecognizerDele
self.applyItemNodeAsCurrent(id: .all, itemNode: itemNode)

let panRecognizer = InteractiveTransitionGestureRecognizer(target: self, action: #selector(self.panGesture(_:)), allowedDirections: { [weak self] _ in
guard let self, self.availableFilters.count > 1 || (self.controller?.isStoryPostingAvailable == true && !(self.context.sharedContext.callManager?.hasActiveCall ?? false)) else {
guard let self else {
return []
}
let isCompactAvatarRail = self.validLayout?.layout.deviceMetrics.type == .tablet && (self.validLayout?.layout.size.width ?? .greatestFiniteMagnitude) <= 160.0
let isStoryPostingAvailable = !isCompactAvatarRail && (self.controller?.isStoryPostingAvailable == true && !(self.context.sharedContext.callManager?.hasActiveCall ?? false))
guard self.availableFilters.count > 1 || isStoryPostingAvailable else {
return []
}
guard case .chatList(.root) = self.location else {
Expand Down Expand Up @@ -639,7 +648,8 @@ public final class ChatListContainerNode: ASDisplayNode, ASGestureRecognizerDele
hasLiveStream = true
}

if case .compact = layout.metrics.widthClass, self.controller?.isStoryPostingAvailable == true && !(self.context.sharedContext.callManager?.hasActiveCall ?? false) {
let isCompactAvatarRail = layout.deviceMetrics.type == .tablet && layout.size.width <= 160.0
if !isCompactAvatarRail, case .compact = layout.metrics.widthClass, self.controller?.isStoryPostingAvailable == true && !(self.context.sharedContext.callManager?.hasActiveCall ?? false) {
if hasLiveStream {
if translation.x >= 30.0 {
self.panRecognizer?.cancel()
Expand Down Expand Up @@ -1009,7 +1019,6 @@ public final class ChatListContainerNode: ASDisplayNode, ASGestureRecognizerDele

public func update(layout: ContainerViewLayout, navigationBarHeight: CGFloat, visualNavigationHeight: CGFloat, originalNavigationHeight: CGFloat, cleanNavigationBarHeight: CGFloat, insets: UIEdgeInsets, isReorderingFilters: Bool, isEditing: Bool, inlineNavigationLocation: ChatListControllerLocation?, inlineNavigationTransitionFraction: CGFloat, storiesInset: CGFloat, transition: ContainedViewLayoutTransition) {
self.validLayout = (layout, navigationBarHeight, visualNavigationHeight, originalNavigationHeight, cleanNavigationBarHeight, insets, isReorderingFilters, isEditing, inlineNavigationLocation, inlineNavigationTransitionFraction, storiesInset)

self._validLayoutReady.set(.single(true))

transition.updateAlpha(node: self, alpha: isReorderingFilters ? 0.5 : 1.0)
Expand All @@ -1024,7 +1033,6 @@ public final class ChatListContainerNode: ASDisplayNode, ASGestureRecognizerDele
self.panRecognizer?.isEnabled = !isEditing

transition.updateFrame(layer: self.leftSeparatorLayer, frame: CGRect(origin: CGPoint(x: -UIScreenPixel, y: 0.0), size: CGSize(width: UIScreenPixel, height: layout.size.height)))

if let selectedIndex = self.availableFilters.firstIndex(where: { $0.id == self.selectedId }) {
var validNodeIds: [ChatListFilterTabEntryId] = []
for i in max(0, selectedIndex - 1) ... min(self.availableFilters.count - 1, selectedIndex + 1) {
Expand Down Expand Up @@ -1229,7 +1237,6 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
}

self.addSubnode(self.debugListView)

filterBecameEmpty = { [weak self] _ in
guard let strongSelf = self else {
return
Expand Down Expand Up @@ -1504,7 +1511,8 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
var navigationHeaderPanels: AnyComponent<Empty>?
if self.controller?.tabContainerData != nil || !panels.isEmpty {
var tabs: AnyComponent<Empty>?
if let tabContainerData = self.controller?.tabContainerData, tabContainerData.0.count > 1 {
let isDesktopLikeCompactSidebar = layout.deviceMetrics.type == .tablet && layout.size.width <= 160.0
if let tabContainerData = self.controller?.tabContainerData, tabContainerData.0.count > 1, !isDesktopLikeCompactSidebar {
let folderFilterIndex: (ChatListFilterTabEntryId, [ChatListFilterTabEntry]) -> Int? = { id, entries in
var index = 0
for entry in entries {
Expand Down Expand Up @@ -1647,8 +1655,12 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
))
}

let isDesktopLikeCompactSidebar = layout.deviceMetrics.type == .tablet && layout.size.width <= 160.0

var effectiveStorySubscriptions: EngineStorySubscriptions?
if let controller = self.controller, case .forum = controller.location {
if isDesktopLikeCompactSidebar {
effectiveStorySubscriptions = EngineStorySubscriptions(accountItem: nil, items: [], hasMoreToken: nil)
} else if let controller = self.controller, case .forum = controller.location {
effectiveStorySubscriptions = nil
} else {
if let controller = self.controller, let storySubscriptions = controller.orderedStorySubscriptions, shouldDisplayStoriesInChatListHeader(storySubscriptions: storySubscriptions, isHidden: controller.location == .chatList(groupId: .archive)) {
Expand All @@ -1658,6 +1670,14 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
}
}

if isDesktopLikeCompactSidebar {
if let navigationBarComponentView = self.navigationBarView.view as? ChatListNavigationBar.View {
navigationBarComponentView.isHidden = true
navigationBarComponentView.isUserInteractionEnabled = false
}
return (0.0, 0.0)
}

let navigationBarSize = self.navigationBarView.update(
transition: transition,
component: AnyComponent(ChatListNavigationBar(
Expand Down Expand Up @@ -1715,6 +1735,8 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
containerSize: layout.size
)
if let navigationBarComponentView = self.navigationBarView.view as? ChatListNavigationBar.View {
navigationBarComponentView.isHidden = false
navigationBarComponentView.isUserInteractionEnabled = true
if deferScrollApplication {
navigationBarComponentView.deferScrollApplication = true
}
Expand Down Expand Up @@ -1950,7 +1972,6 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
mainInsets.top = visualNavigationHeight
}
self.mainContainerNode.update(layout: layout, navigationBarHeight: mainNavigationBarHeight, visualNavigationHeight: visualNavigationHeight, originalNavigationHeight: navigationBarHeight, cleanNavigationBarHeight: cleanMainNavigationBarHeight, insets: mainInsets, isReorderingFilters: self.isReorderingFilters, isEditing: self.isEditing, inlineNavigationLocation: self.inlineStackContainerNode?.location, inlineNavigationTransitionFraction: self.inlineStackContainerTransitionFraction, storiesInset: storiesInset, transition: transition)

if let inlineStackContainerNode = self.inlineStackContainerNode {
var inlineStackContainerNodeTransition = transition
var animateIn = false
Expand Down Expand Up @@ -2006,6 +2027,9 @@ final class ChatListControllerNode: ASDisplayNode, ASGestureRecognizerDelegate {
guard let (containerLayout, _, _, cleanNavigationBarHeight, _) = self.containerLayout, self.searchDisplayController == nil else {
return nil
}
if containerLayout.deviceMetrics.type == .tablet && containerLayout.size.width <= 160.0 {
return nil
}

let effectiveLocation = self.inlineStackContainerNode?.location ?? self.location

Expand Down
Loading