From 3dd5e947159972157ace65612736041ce09a82a8 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 15 Jun 2021 12:03:12 +0400 Subject: [PATCH] Workaround for invalid opaque background color decoding --- .../TelegramCore/Sources/Wallpapers.swift | 2 +- .../Sources/PresentationThemeCodable.swift | 9 ++++++- .../Sources/WallpaperBackgroundNode.swift | 26 +++++++++++++++---- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/submodules/TelegramCore/Sources/Wallpapers.swift b/submodules/TelegramCore/Sources/Wallpapers.swift index eff57ceb87..4557a74894 100644 --- a/submodules/TelegramCore/Sources/Wallpapers.swift +++ b/submodules/TelegramCore/Sources/Wallpapers.swift @@ -7,7 +7,7 @@ import SyncCore public func telegramWallpapers(postbox: Postbox, network: Network, forceUpdate: Bool = false) -> Signal<[TelegramWallpaper], NoError> { let fetch: ([TelegramWallpaper]?, Int32?) -> Signal<[TelegramWallpaper], NoError> = { current, hash in - network.request(Api.functions.account.getWallPapers(hash: 0))//hash ?? 0)) + network.request(Api.functions.account.getWallPapers(hash: hash ?? 0)) |> retryRequest |> mapToSignal { result -> Signal<([TelegramWallpaper], Int32), NoError> in switch result { diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift index 54ce9f2529..805f279696 100644 --- a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift +++ b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift @@ -428,6 +428,13 @@ extension PresentationThemeRootNavigationBar: Codable { let values = try decoder.container(keyedBy: CodingKeys.self) let blurredBackgroundColor = try decodeColor(values, .background) + let opaqueBackgroundColor: UIColor + if blurredBackgroundColor.alpha >= 0.99 { + opaqueBackgroundColor = blurredBackgroundColor + } else { + opaqueBackgroundColor = (try? decodeColor(values, .opaqueBackground)) ?? blurredBackgroundColor + } + self.init( buttonColor: try decodeColor(values, .button), disabledButtonColor: try decodeColor(values, .disabledButton), @@ -436,7 +443,7 @@ extension PresentationThemeRootNavigationBar: Codable { controlColor: try decodeColor(values, .control), accentTextColor: try decodeColor(values, .accentText), blurredBackgroundColor: blurredBackgroundColor, - opaqueBackgroundColor: (try? decodeColor(values, .opaqueBackground)) ?? blurredBackgroundColor.withAlphaComponent(1.0), + opaqueBackgroundColor: opaqueBackgroundColor, separatorColor: try decodeColor(values, .separator), badgeBackgroundColor: try decodeColor(values, .badgeFill), badgeStrokeColor: try decodeColor(values, .badgeStroke), diff --git a/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift b/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift index cc94ccf2c4..7dd8c0270f 100644 --- a/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift +++ b/submodules/WallpaperBackgroundNode/Sources/WallpaperBackgroundNode.swift @@ -591,12 +591,28 @@ public final class WallpaperBackgroundNode: ASDisplayNode { self.patternImageNode.image = cachedValidPatternImage.image } else { let patternArguments = TransformImageArguments(corners: ImageCorners(), imageSize: size, boundingSize: size, intrinsicInsets: UIEdgeInsets(), custom: PatternWallpaperArguments(colors: [patternBackgroundColor], rotation: nil, customPatternColor: patternColor, preview: false), scale: min(2.0, UIScreenScale)) - if let drawingContext = validPatternImage.generate(patternArguments) { - if let image = drawingContext.generateImage() { - self.patternImageNode.image = image + if self.useSharedAnimationPhase || self.patternImageNode.image == nil { + if let drawingContext = validPatternImage.generate(patternArguments) { + if let image = drawingContext.generateImage() { + self.patternImageNode.image = image - if self.useSharedAnimationPhase { - WallpaperBackgroundNode.cachedValidPatternImage = CachedValidPatternImage(generate: validPatternImage.generate, generated: updatedGeneratedImage, image: image) + if self.useSharedAnimationPhase { + WallpaperBackgroundNode.cachedValidPatternImage = CachedValidPatternImage(generate: validPatternImage.generate, generated: updatedGeneratedImage, image: image) + } + } + } + } else { + DispatchQueue.global(qos: .userInteractive).async { [weak self] in + let image = validPatternImage.generate(patternArguments)?.generateImage() + Queue.mainQueue().async { + guard let strongSelf = self else { + return + } + strongSelf.patternImageNode.image = image + + if let image = image, strongSelf.useSharedAnimationPhase { + WallpaperBackgroundNode.cachedValidPatternImage = CachedValidPatternImage(generate: validPatternImage.generate, generated: updatedGeneratedImage, image: image) + } } } }