diff --git a/submodules/Display/Display/ListView.swift b/submodules/Display/Display/ListView.swift index ec2b31db79..5330a53cb7 100644 --- a/submodules/Display/Display/ListView.swift +++ b/submodules/Display/Display/ListView.swift @@ -858,7 +858,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture var bottomItemEdge: CGFloat = 0.0 for i in 0 ..< self.itemNodes.count { - if let index = itemNodes[i].index { + if let index = self.itemNodes[i].index { if index == 0 { topItemFound = true } @@ -873,12 +873,12 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } if topItemFound { - topItemEdge = itemNodes[0].apparentFrame.origin.y + topItemEdge = self.itemNodes[0].apparentFrame.origin.y } var bottomItemNode: ListViewItemNode? for i in (0 ..< self.itemNodes.count).reversed() { - if let index = itemNodes[i].index { + if let index = self.itemNodes[i].index { if index == self.items.count - 1 { bottomItemNode = itemNodes[i] bottomItemFound = true @@ -888,7 +888,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } if bottomItemFound { - bottomItemEdge = itemNodes[itemNodes.count - 1].apparentFrame.maxY + bottomItemEdge = self.itemNodes[self.itemNodes.count - 1].apparentFrame.maxY } if topItemFound && bottomItemFound { @@ -949,7 +949,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } else { offset = effectiveInsets.top + areaHeight - overscroll - bottomItemEdge } - } else if topItemEdge > effectiveInsets.top - overscroll && /*snapTopItem*/ !self.isTracking { + } else if topItemEdge > effectiveInsets.top - overscroll { offset = (effectiveInsets.top - overscroll) - topItemEdge } } @@ -2569,7 +2569,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture itemNode.updateFrame(itemNode.frame.offsetBy(dx: 0.0, dy: offsetFix), within: self.visibleSize) } - let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, isExperimentalSnapToScrollToItem: isExperimentalSnapToScrollToItem, insetDeltaOffsetFix: insetDeltaOffsetFix) + let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil && scrollToItem?.directionHint != .Down, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, isExperimentalSnapToScrollToItem: isExperimentalSnapToScrollToItem, insetDeltaOffsetFix: insetDeltaOffsetFix) if !snappedTopInset.isZero && (previousVisibleSize.height.isZero || previousApparentFrames.isEmpty) { offsetFix += snappedTopInset @@ -2639,7 +2639,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture } else { self.visibleSize = updateSizeAndInsets.size - if !self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, insetDeltaOffsetFix: 0.0).offset.isZero { + if !self.snapToBounds(snapTopItem: scrollToItem != nil && scrollToItem?.directionHint != .Down, stackFromBottom: self.stackFromBottom, insetDeltaOffsetFix: 0.0).offset.isZero { self.updateVisibleContentOffset() } } @@ -2693,18 +2693,18 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture self.scroller.contentOffset = self.lastContentOffset self.ignoreScrollingEvents = wasIgnoringScrollingEvents } else { - let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, scrollToItem: scrollToItem, insetDeltaOffsetFix: 0.0) - + let (snappedTopInset, snapToBoundsOffset) = self.snapToBounds(snapTopItem: scrollToItem != nil && scrollToItem?.directionHint != .Down, stackFromBottom: self.stackFromBottom, updateSizeAndInsets: updateSizeAndInsets, scrollToItem: scrollToItem, insetDeltaOffsetFix: 0.0) + if !snappedTopInset.isZero && previousApparentFrames.isEmpty { for itemNode in self.itemNodes { itemNode.updateFrame(itemNode.frame.offsetBy(dx: 0.0, dy: snappedTopInset), within: self.visibleSize) } } - + if !snapToBoundsOffset.isZero { self.updateVisibleContentOffset() } - + if let snapshotView = snapshotView { snapshotView.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: snapshotView.frame.size) self.view.addSubview(snapshotView) @@ -3808,7 +3808,7 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture if node.frame.maxY > self.visibleSize.height - self.insets.bottom { self.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: ListViewDeleteAndInsertOptions(), scrollToItem: ListViewScrollToItem(index: index, position: ListViewScrollPosition.bottom(-overflow), animated: animated, curve: curve, directionHint: ListViewScrollToItemDirectionHint.Down), updateSizeAndInsets: nil, stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) } else if node.frame.minY < self.insets.top && overflow > 0.0 { - self.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: ListViewDeleteAndInsertOptions(), scrollToItem: ListViewScrollToItem(index: index, position: ListViewScrollPosition.top(-overflow), animated: true, curve: curve, directionHint: ListViewScrollToItemDirectionHint.Up), updateSizeAndInsets: nil, stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) + self.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: ListViewDeleteAndInsertOptions(), scrollToItem: ListViewScrollToItem(index: index, position: ListViewScrollPosition.top(-overflow), animated: animated, curve: curve, directionHint: ListViewScrollToItemDirectionHint.Up), updateSizeAndInsets: nil, stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) } } else { if self.experimentalSnapScrollToItem { diff --git a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift index 1dbaa108f0..f4affd1a02 100644 --- a/submodules/SettingsUI/Sources/Themes/EditThemeController.swift +++ b/submodules/SettingsUI/Sources/Themes/EditThemeController.swift @@ -261,7 +261,7 @@ private func editThemeControllerEntries(presentationData: PresentationData, stat return entries } -public func editThemeController(context: AccountContext, mode: EditThemeControllerMode, navigateToChat: ((PeerId) -> Void)? = nil) -> ViewController { +public func editThemeController(context: AccountContext, mode: EditThemeControllerMode, navigateToChat: ((PeerId) -> Void)? = nil, completion: ((PresentationThemeReference) -> Void)? = nil) -> ViewController { let initialState: EditThemeControllerState let previewThemePromise = Promise() let presentationData = context.sharedContext.currentPresentationData.with { $0 } diff --git a/submodules/SettingsUI/Sources/Themes/ThemeAccentColorControllerNode.swift b/submodules/SettingsUI/Sources/Themes/ThemeAccentColorControllerNode.swift index 8b67338474..f28b2f5103 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeAccentColorControllerNode.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeAccentColorControllerNode.swift @@ -658,7 +658,13 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate secondColor = nil } case .messages: - defaultColor = self.state.defaultMessagesColor ?? (self.state.accentColor ?? defaultDayAccentColor) + if let defaultMessagesColor = self.state.defaultMessagesColor { + defaultColor = defaultMessagesColor + } else if let themeReference = self.mode.themeReference, case let .builtin(theme) = themeReference, theme == .nightAccent { + defaultColor = self.state.accentColor.withMultiplied(hue: 1.019, saturation: 0.731, brightness: 0.59) + } else { + defaultColor = self.state.accentColor + } if let messagesColors = self.state.messagesColors { firstColor = messagesColors.0 secondColor = messagesColors.1 @@ -710,6 +716,10 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate needsLayout = true } + if (previousState.patternWallpaper == nil) != (self.state.patternWallpaper == nil) { + needsLayout = true + } + if needsLayout, let (layout, navigationBarHeight, _) = self.validLayout { self.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: animated ? .animated(duration: animationDuration, curve: animationCurve) : .immediate) } diff --git a/submodules/SettingsUI/Sources/Themes/ThemeSettingsAccentColorItem.swift b/submodules/SettingsUI/Sources/Themes/ThemeSettingsAccentColorItem.swift index f17f4781de..56139c1259 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeSettingsAccentColorItem.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeSettingsAccentColorItem.swift @@ -667,7 +667,7 @@ class ThemeSettingsAccentColorItemNode: ListViewItemNode, ItemListItemNode { var scrollToItem: ListViewScrollToItem? if !self.initialized || transition.crossfade { if let index = item.colors.firstIndex(where: { $0.index == item.currentColor?.index }) { - scrollToItem = ListViewScrollToItem(index: index, position: .bottom(-24.0), animated: false, curve: .Default(duration: 0.0), directionHint: .Down) + scrollToItem = ListViewScrollToItem(index: index, position: .bottom(-56.0), animated: false, curve: .Default(duration: 0.0), directionHint: .Down) self.initialized = true } } diff --git a/submodules/SettingsUI/Sources/Themes/WallpaperGalleryController.swift b/submodules/SettingsUI/Sources/Themes/WallpaperGalleryController.swift index 8246ddd187..77d0d4cc16 100644 --- a/submodules/SettingsUI/Sources/Themes/WallpaperGalleryController.swift +++ b/submodules/SettingsUI/Sources/Themes/WallpaperGalleryController.swift @@ -275,6 +275,8 @@ public class WallpaperGalleryController: ViewController { self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style self.navigationBar?.updatePresentationData(NavigationBarPresentationData(presentationData: self.presentationData)) self.toolbarNode?.updateThemeAndStrings(theme: self.presentationData.theme, strings: self.presentationData.strings) + self.patternPanelNode?.updateTheme(self.presentationData.theme) + self.patternPanelNode?.backgroundColors = self.presentationData.theme.overallDarkAppearance ? (self.presentationData.theme.list.blocksBackgroundColor, nil) : nil } func dismiss(forceAway: Bool) { @@ -702,6 +704,7 @@ public class WallpaperGalleryController: ViewController { strongSelf.updateEntries(pattern: pattern, intensity: intensity, preview: preview) } } + patternPanelNode.backgroundColors = self.presentationData.theme.overallDarkAppearance ? (self.presentationData.theme.list.blocksBackgroundColor, nil) : nil self.patternPanelNode = patternPanelNode currentPatternPanelNode = patternPanelNode self.overlayNode?.insertSubnode(patternPanelNode, belowSubnode: self.toolbarNode!)