Various theme editor fixes

This commit is contained in:
Ilya Laktyushin 2021-09-05 14:36:45 +03:00
parent b3ded6f7f7
commit cb2661c6be
6 changed files with 56 additions and 27 deletions

View File

@ -361,7 +361,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
if let settings = previousSettings {
generalThemeReference = .builtin(PresentationBuiltinThemeReference(baseTheme: settings.baseTheme))
}
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: nil, generalThemeReference: generalThemeReference, defaultThemeReference: nil, create: false, completion: { updatedTheme, settings in
let controller = ThemeAccentColorController(context: context, mode: .edit(settings: previousSettings, theme: theme, wallpaper: nil, generalThemeReference: generalThemeReference, defaultThemeReference: nil, create: false, completion: { updatedTheme, settings in
updateState { current in
var state = current
previewThemePromise.set(.single(updatedTheme))

View File

@ -22,13 +22,13 @@ extension TelegramThemeSettings {
enum ThemeAccentColorControllerMode {
case colors(themeReference: PresentationThemeReference, create: Bool)
case background(themeReference: PresentationThemeReference)
case edit(theme: PresentationTheme, wallpaper: TelegramWallpaper?, generalThemeReference: PresentationThemeReference?, defaultThemeReference: PresentationThemeReference?, create: Bool, completion: (PresentationTheme, TelegramThemeSettings?) -> Void)
case edit(settings: TelegramThemeSettings?, theme: PresentationTheme, wallpaper: TelegramWallpaper?, generalThemeReference: PresentationThemeReference?, defaultThemeReference: PresentationThemeReference?, create: Bool, completion: (PresentationTheme, TelegramThemeSettings?) -> Void)
var themeReference: PresentationThemeReference? {
switch self {
case let .colors(themeReference, _), let .background(themeReference):
return themeReference
case let .edit(_, _, _, defaultThemeReference, _, _):
case let .edit(_, _, _, _, defaultThemeReference, _, _):
return defaultThemeReference
}
}
@ -135,7 +135,7 @@ final class ThemeAccentColorController: ViewController {
let theme: PresentationTheme
let initialWallpaper: TelegramWallpaper
if case let .edit(editedTheme, walpaper, _, _, _, _) = self.mode {
if case let .edit(_, editedTheme, walpaper, _, _, _, _) = self.mode {
theme = editedTheme
initialWallpaper = walpaper ?? editedTheme.chat.defaultWallpaper
} else {
@ -184,7 +184,7 @@ final class ThemeAccentColorController: ViewController {
prepareWallpaper = .complete()
}
if case let .edit(theme, _, generalThemeReference, _, _, completion) = strongSelf.mode {
if case let .edit(themeSettings, theme, _, generalThemeReference, _, _, completion) = strongSelf.mode {
let _ = (prepareWallpaper
|> deliverOnMainQueue).start(completed: {
let updatedTheme: PresentationTheme
@ -192,7 +192,10 @@ final class ThemeAccentColorController: ViewController {
var hasSettings = false
var baseTheme: TelegramBaseTheme?
if case let .cloud(theme) = generalThemeReference, let settings = theme.theme.settings {
if let settings = themeSettings {
hasSettings = true
baseTheme = settings.baseTheme
} else if case let .cloud(theme) = generalThemeReference, let settings = theme.theme.settings {
hasSettings = true
baseTheme = settings.baseTheme
} else if case let .builtin(theme) = generalThemeReference {
@ -562,24 +565,34 @@ final class ThemeAccentColorController: ViewController {
}
messageColors = theme.chat.message.outgoing.bubble.withWallpaper.fill.map(\.rgb)
animateMessageColors = theme.chat.animateMessageColors
}
}
} else if case let .edit(theme, wallpaper, _, _, _, _) = strongSelf.mode {
accentColor = theme.rootController.navigationBar.accentTextColor
outgoingAccentColor = nil
let wallpaper = wallpaper ?? theme.chat.defaultWallpaper
extractWallpaperParameters(wallpaper)
if !wallpaper.isColorOrGradient {
} else if case let .edit(settings, theme, wallpaper, _, _, _, _) = strongSelf.mode {
if let settings = settings {
accentColor = UIColor(rgb: settings.accentColor)
outgoingAccentColor = settings.outgoingAccentColor.flatMap { UIColor(rgb: $0) }
let wallpaper = settings.wallpaper ?? theme.chat.defaultWallpaper
extractWallpaperParameters(wallpaper)
initialWallpaper = wallpaper
messageColors = settings.messageColors
animateMessageColors = settings.animateMessageColors
} else {
accentColor = theme.rootController.navigationBar.accentTextColor
outgoingAccentColor = nil
let wallpaper = wallpaper ?? theme.chat.defaultWallpaper
extractWallpaperParameters(wallpaper)
if !wallpaper.isColorOrGradient {
initialWallpaper = wallpaper
}
messageColors = theme.chat.message.outgoing.bubble.withWallpaper.fill.map(\.rgb)
animateMessageColors = theme.chat.animateMessageColors
}
messageColors = theme.chat.message.outgoing.bubble.withWallpaper.fill.map(\.rgb)
animateMessageColors = theme.chat.animateMessageColors
} else {
accentColor = defaultDayAccentColor
outgoingAccentColor = nil

View File

@ -295,7 +295,7 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
self.patternPanelNode = WallpaperPatternPanelNode(context: self.context, theme: self.theme, strings: self.presentationData.strings)
let doneButtonType: WallpaperGalleryToolbarDoneButtonType
if case .edit(_, _, _, _, true, _) = self.mode {
if case .edit(_, _, _, _, _, true, _) = self.mode {
doneButtonType = .proceed
} else {
doneButtonType = .set
@ -497,7 +497,7 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
if !updateOnlyWallpaper {
if let themeReference = mode.themeReference {
updatedTheme = makePresentationTheme(mediaBox: context.sharedContext.accountManager.mediaBox, themeReference: themeReference, accentColor: accentColor.color, outgoingAccentColor: outgoingAccentColor?.color, backgroundColors: backgroundColors.map { $0.rgb }, bubbleColors: messagesColors.map { $0.rgb }, animateBubbleColors: state.animateMessageColors, serviceBackgroundColor: serviceBackgroundColor, preview: true) ?? defaultPresentationTheme
} else if case let .edit(theme, _, _, _, _, _) = mode {
} else if case let .edit(_, theme, _, _, _, _, _) = mode {
updatedTheme = customizePresentationTheme(theme, editing: false, accentColor: accentColor.color, outgoingAccentColor: outgoingAccentColor?.color, backgroundColors: backgroundColors.map { $0.rgb }, bubbleColors: messagesColors.map { $0.rgb }, animateBubbleColors: state.animateMessageColors)
} else {
updatedTheme = theme
@ -749,7 +749,7 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
doneButtonType = .apply
cancelButtonType = .discard
} else {
if case .edit(_, _, _, _, true, _) = self.mode {
if case .edit(_, _, _, _, _, true, _) = self.mode {
doneButtonType = .proceed
} else {
doneButtonType = .set
@ -1189,7 +1189,12 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
} else {
self.view.endEditing(true)
let wallpaper = self.state.previousPatternWallpaper ?? self.patternPanelNode.wallpapers.first
let wallpaper: TelegramWallpaper?
if let currentPatternWallpaper = self.state.patternWallpaper {
wallpaper = currentPatternWallpaper
} else {
wallpaper = self.state.previousPatternWallpaper ?? self.patternPanelNode.wallpapers.first
}
let backgroundColors = self.currentBackgroundColors
var appeared = false

View File

@ -712,7 +712,7 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
let _ = (resolvedWallpaper
|> deliverOnMainQueue).start(next: { wallpaper in
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: wallpaper, generalThemeReference: reference.generalThemeReference, defaultThemeReference: nil, create: true, completion: { result, settings in
let controller = ThemeAccentColorController(context: context, mode: .edit(settings: nil, theme: theme, wallpaper: wallpaper, generalThemeReference: reference.generalThemeReference, defaultThemeReference: nil, create: true, completion: { result, settings in
let controller = editThemeController(context: context, mode: .create(result, settings
), navigateToChat: { peerId in
if let navigationController = getNavigationControllerImpl?() {
@ -947,10 +947,12 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
let _ = (resolvedWallpaper
|> deliverOnMainQueue).start(next: { wallpaper in
var hasSettings = false
var settings: TelegramThemeSettings?
if case let .cloud(cloudTheme) = effectiveThemeReference, cloudTheme.theme.settings != nil {
hasSettings = true
settings = cloudTheme.theme.settings
}
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: wallpaper, generalThemeReference: effectiveThemeReference.generalThemeReference, defaultThemeReference: nil, create: true, completion: { result, settings in
let controller = ThemeAccentColorController(context: context, mode: .edit(settings: settings, theme: theme, wallpaper: wallpaper, generalThemeReference: effectiveThemeReference.generalThemeReference, defaultThemeReference: nil, create: true, completion: { result, settings in
let controller = editThemeController(context: context, mode: .create(hasSettings ? nil : result, hasSettings ? settings : nil), navigateToChat: { peerId in
if let navigationController = getNavigationControllerImpl?() {
context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))

View File

@ -332,7 +332,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
return .fail
}
if strongSelf.telegramFile == nil {
if false, strongSelf.telegramFile == nil {
if let animationNode = strongSelf.animationNode, animationNode.frame.contains(point) {
return .waitForDoubleTap
}

View File

@ -157,11 +157,20 @@ private struct ThemeSettingsThemeItemNodeTransition {
private func ensureThemeVisible(listNode: ListView, emoticon: String?, animated: Bool) -> Bool {
var resultNode: ThemeSettingsThemeItemIconNode?
var previousNode: ThemeSettingsThemeItemIconNode?
var nextNode: ThemeSettingsThemeItemIconNode?
listNode.forEachItemNode { node in
if resultNode == nil, let node = node as? ThemeSettingsThemeItemIconNode {
guard let node = node as? ThemeSettingsThemeItemIconNode else {
return
}
if resultNode == nil {
if node.item?.emoticon == emoticon {
resultNode = node
} else {
previousNode = node
}
} else if nextNode == nil {
nextNode = node
}
}
if let resultNode = resultNode {