diff --git a/Signal/ConversationView/Components/CVComponentThreadDetails.swift b/Signal/ConversationView/Components/CVComponentThreadDetails.swift index 967848a384..311d99013f 100644 --- a/Signal/ConversationView/Components/CVComponentThreadDetails.swift +++ b/Signal/ConversationView/Components/CVComponentThreadDetails.swift @@ -161,10 +161,20 @@ public class CVComponentThreadDetails: CVComponentBase, CVRootComponent { let groupInfoWrapper = ManualLayoutViewWithLayer(name: "groupWrapper") - // Blurred background for when there's wallpaper, + // Unique background for release notes channel, + // blurred background for when there's wallpaper, // frame with rounded corners otherwise. let cornerRadius: CGFloat = 40 - if conversationStyle.hasWallpaper { + if thread.isReleaseNotesThread { + if Theme.isDarkThemeEnabled { + groupInfoWrapper.backgroundColor = UIColor(rgbHex: 0x2F3240, alpha: 1) + } else { + groupInfoWrapper.backgroundColor = UIColor(rgbHex: 0xF6F7FF, alpha: 1) + } + groupInfoWrapper.layer.cornerRadius = cornerRadius + groupInfoWrapper.layer.borderWidth = 2 + groupInfoWrapper.layer.borderColor = UIColor.Signal.tertiaryFill.cgColor + } else if conversationStyle.hasWallpaper { let wallpaperBlurView = componentView.ensureWallpaperBlurView() configureWallpaperBlurView( wallpaperBlurView: wallpaperBlurView, diff --git a/Signal/ConversationView/ConversationViewController+CVC.swift b/Signal/ConversationView/ConversationViewController+CVC.swift index 199636b3b0..b7901a5329 100644 --- a/Signal/ConversationView/ConversationViewController+CVC.swift +++ b/Signal/ConversationView/ConversationViewController+CVC.swift @@ -721,20 +721,19 @@ extension ConversationViewController: CVLoadCoordinatorDelegate { ) -> ConversationStyle { let hasWallpaper: Bool let shouldDimWallpaperInDarkMode: Bool - let isWallpaperPhoto: Bool switch wallpaperViewBuilder { case .customPhoto(_, let shouldDimInDarkMode): hasWallpaper = true shouldDimWallpaperInDarkMode = shouldDimInDarkMode - isWallpaperPhoto = true case .colorOrGradient(_, let shouldDimInDarkMode): hasWallpaper = true shouldDimWallpaperInDarkMode = shouldDimInDarkMode - isWallpaperPhoto = false + case .releaseNotes: + hasWallpaper = true + shouldDimWallpaperInDarkMode = false case .none: hasWallpaper = false shouldDimWallpaperInDarkMode = false - isWallpaperPhoto = false } return ConversationStyle( type: type, @@ -742,7 +741,6 @@ extension ConversationViewController: CVLoadCoordinatorDelegate { viewWidth: viewWidth, hasWallpaper: hasWallpaper, shouldDimWallpaperInDarkMode: shouldDimWallpaperInDarkMode, - isWallpaperPhoto: isWallpaperPhoto, chatColor: chatColor, ) } diff --git a/Signal/ConversationView/Loading/CVLoader.swift b/Signal/ConversationView/Loading/CVLoader.swift index c5922b3377..7f3b63c43f 100644 --- a/Signal/ConversationView/Loading/CVLoader.swift +++ b/Signal/ConversationView/Loading/CVLoader.swift @@ -519,7 +519,6 @@ public class CVLoader: NSObject { viewWidth: containerView.width, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: chatColor, ) let coreState = CVCoreState( @@ -645,7 +644,6 @@ public class CVLoader: NSObject { viewWidth: mockViewWidth, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: chatColor, ) let coreState = CVCoreState( diff --git a/Signal/Images.xcassets/official_wallpaper_reduced.imageset/Contents.json b/Signal/Images.xcassets/official_wallpaper_reduced.imageset/Contents.json new file mode 100644 index 0000000000..74c2bee15c --- /dev/null +++ b/Signal/Images.xcassets/official_wallpaper_reduced.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "official_wallpaper_reduced.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Signal/Images.xcassets/official_wallpaper_reduced.imageset/official_wallpaper_reduced.pdf b/Signal/Images.xcassets/official_wallpaper_reduced.imageset/official_wallpaper_reduced.pdf new file mode 100644 index 0000000000..7801cd0e3c Binary files /dev/null and b/Signal/Images.xcassets/official_wallpaper_reduced.imageset/official_wallpaper_reduced.pdf differ diff --git a/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift b/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift index e76b17e7f0..25444ab2cc 100644 --- a/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift +++ b/Signal/src/ViewControllers/EditHistoryTableSheetViewController.swift @@ -228,7 +228,6 @@ class EditHistoryTableSheetViewController: OWSTableSheetViewController { viewWidth: viewWidth, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: DependenciesBridge.shared.chatColorSettingStore.resolvedChatColor( for: thread, tx: tx, diff --git a/Signal/src/ViewControllers/MediaGallery/Cells/AudioCell.swift b/Signal/src/ViewControllers/MediaGallery/Cells/AudioCell.swift index 17449f7485..c94130af93 100644 --- a/Signal/src/ViewControllers/MediaGallery/Cells/AudioCell.swift +++ b/Signal/src/ViewControllers/MediaGallery/Cells/AudioCell.swift @@ -137,7 +137,6 @@ class AudioCell: MediaTileListModeCell { viewWidth: contentView.bounds.width, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: ChatColorSettingStore.Constants.defaultColor.colorSetting, ) let coreState = CVCoreState(conversationStyle: conversationStyle, mediaCache: audioItem.mediaCache) diff --git a/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift b/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift index 2173b748bf..b231b0bc91 100644 --- a/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift +++ b/Signal/src/ViewControllers/MediaGallery/Cells/MediaGalleryFileCell.swift @@ -124,7 +124,6 @@ class MediaGalleryFileCell: MediaTileListModeCell { viewWidth: contentView.bounds.width, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: ChatColorSettingStore.Constants.defaultColor.colorSetting, ) let coreState = CVCoreState(conversationStyle: conversationStyle, mediaCache: fileItem.mediaCache) diff --git a/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift b/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift index 3e6bfa2b85..5c4354b25a 100644 --- a/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift +++ b/Signal/src/ViewControllers/MemberLabels/MemberLabelViewController.swift @@ -300,7 +300,6 @@ class MemberLabelViewController: OWSViewController, UITextFieldDelegate { viewWidth: view.width - 44, // stack view padding hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: PaletteChatColor.ultramarine.colorSetting, ) diff --git a/Signal/src/ViewControllers/MessageDetailViewController.swift b/Signal/src/ViewControllers/MessageDetailViewController.swift index 8188cab6d1..41ff4277ac 100644 --- a/Signal/src/ViewControllers/MessageDetailViewController.swift +++ b/Signal/src/ViewControllers/MessageDetailViewController.swift @@ -229,7 +229,6 @@ class MessageDetailViewController: OWSTableViewController2 { viewWidth: view.width - (cellOuterInsets.totalWidth + (Self.cellHInnerMargin * 2)), hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: DependenciesBridge.shared.chatColorSettingStore.resolvedChatColor( for: thread, tx: transaction, diff --git a/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift b/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift index c9e49a84e6..fd195c34ea 100644 --- a/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift +++ b/Signal/src/ViewControllers/PinnedMessages/PinnedMessagesDetailsViewController.swift @@ -221,7 +221,6 @@ class PinnedMessagesDetailsViewController: OWSViewController, DatabaseChangeDele viewWidth: view.safeAreaLayoutGuide.layoutFrame.width, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: DependenciesBridge.shared.chatColorSettingStore.resolvedChatColor( for: threadViewModel.threadRecord, tx: tx, @@ -255,7 +254,6 @@ class PinnedMessagesDetailsViewController: OWSViewController, DatabaseChangeDele viewWidth: view.safeAreaLayoutGuide.layoutFrame.width - Self.goToMessageButtonSize, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: DependenciesBridge.shared.chatColorSettingStore.resolvedChatColor( for: thread, tx: tx, diff --git a/Signal/src/ViewControllers/ThreadSettings/ConversationHeaderBuilder.swift b/Signal/src/ViewControllers/ThreadSettings/ConversationHeaderBuilder.swift index 39b74ddfc9..f39c6db6a7 100644 --- a/Signal/src/ViewControllers/ThreadSettings/ConversationHeaderBuilder.swift +++ b/Signal/src/ViewControllers/ThreadSettings/ConversationHeaderBuilder.swift @@ -887,7 +887,9 @@ extension ConversationSettingsViewController: ConversationHeaderDelegate { func buildMainHeader() -> UIView { let options: ConversationHeaderBuilder.Options - if isTerminatedGroup || thread.isReleaseNotesThread { + if thread.isReleaseNotesThread { + options = [.mute, .search, .noBackground] + } else if isTerminatedGroup { options = [.mute, .search] } else if callRecords.isEmpty { options = [.videoCall, .audioCall, .mute, .search, .renderLocalUserAsNoteToSelf] @@ -920,7 +922,7 @@ extension ConversationSettingsViewController: ConversationHeaderDelegate { } var canTapThreadName: Bool { - !thread.isGroupThread && !thread.isNoteToSelf + !thread.isGroupThread && !thread.isNoteToSelf && !thread.isReleaseNotesThread } func didTapThreadName() { diff --git a/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController.swift b/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController.swift index a3b7f0a3bf..3083539244 100644 --- a/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController.swift +++ b/Signal/src/ViewControllers/ThreadSettings/ConversationSettingsViewController.swift @@ -35,6 +35,8 @@ class ConversationSettingsViewController: OWSTableViewController2, BadgeCollecti let callRecords: [CallRecord] var memberLabelCoordinator: MemberLabelCoordinator? + let backgroundContainer = CVBackgroundContainer() + var thread: TSThread { threadViewModel.threadRecord } @@ -177,6 +179,20 @@ class ConversationSettingsViewController: OWSTableViewController2, BadgeCollecti reloadThreadAndUpdateContent() updateNavigationBar() + + if thread.isReleaseNotesThread { + // Makes tableView clear so the wallpaper can show through. + backgroundStyle = .clear + + if Theme.isDarkThemeEnabled { + overrideCellBackgroundColor = UIColor(rgbHex: 0x424757, alpha: 1) + } + + let backgroundContainer = self.backgroundContainer + view.insertSubview(backgroundContainer, belowSubview: tableView) + backgroundContainer.autoPinEdgesToSuperviewEdges() + backgroundContainer.set(wallpaperView: WallpaperViewBuilder.releaseNotes.build()) + } } func updateNavigationBar() { diff --git a/Signal/src/ViewControllers/Wallpapers/ColorAndWallpaperSettingsViewController.swift b/Signal/src/ViewControllers/Wallpapers/ColorAndWallpaperSettingsViewController.swift index 96cc18f01f..e18331da3f 100644 --- a/Signal/src/ViewControllers/Wallpapers/ColorAndWallpaperSettingsViewController.swift +++ b/Signal/src/ViewControllers/Wallpapers/ColorAndWallpaperSettingsViewController.swift @@ -401,6 +401,8 @@ private class MiniPreviewView: UIView { shouldDimWallpaperInDarkMode = shouldDimInDarkMode case .customPhoto(_, let shouldDimInDarkMode): shouldDimWallpaperInDarkMode = shouldDimInDarkMode + case .releaseNotes: + shouldDimWallpaperInDarkMode = false } } else { stackViewContainer = UIView() diff --git a/Signal/src/views/MockConversationView.swift b/Signal/src/views/MockConversationView.swift index 32409c39bf..1cdc414884 100644 --- a/Signal/src/views/MockConversationView.swift +++ b/Signal/src/views/MockConversationView.swift @@ -152,7 +152,6 @@ class MockConversationView: UIView { viewWidth: viewWidth, hasWallpaper: hasWallpaper, shouldDimWallpaperInDarkMode: shouldDimWallpaperInDarkMode, - isWallpaperPhoto: false, chatColor: chatColor, ) let threadAssociatedData = ThreadAssociatedData.fetchOrDefault(for: thread, transaction: transaction) diff --git a/Signal/test/ViewControllers/ConversationViewTest.swift b/Signal/test/ViewControllers/ConversationViewTest.swift index 0906e93b24..9ee7780bfb 100644 --- a/Signal/test/ViewControllers/ConversationViewTest.swift +++ b/Signal/test/ViewControllers/ConversationViewTest.swift @@ -22,7 +22,6 @@ class ConversationViewTest: SignalBaseTest { viewWidth: 100, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: ChatColorSettingStore.Constants.defaultColor.colorSetting, ) let style2 = ConversationStyle( @@ -31,7 +30,6 @@ class ConversationViewTest: SignalBaseTest { viewWidth: 100, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: ChatColorSettingStore.Constants.defaultColor.colorSetting, ) let style3 = ConversationStyle( @@ -40,7 +38,6 @@ class ConversationViewTest: SignalBaseTest { viewWidth: 101, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: ChatColorSettingStore.Constants.defaultColor.colorSetting, ) @@ -61,7 +58,6 @@ class ConversationViewTest: SignalBaseTest { viewWidth: 100, hasWallpaper: false, shouldDimWallpaperInDarkMode: false, - isWallpaperPhoto: false, chatColor: ChatColorSettingStore.Constants.defaultColor.colorSetting, ) diff --git a/SignalServiceKit/Backups/Archiving/Archivers/Chat/BackupArchiveChatStyleArchiver.swift b/SignalServiceKit/Backups/Archiving/Archivers/Chat/BackupArchiveChatStyleArchiver.swift index b0971fe1f0..4d7f01dee2 100644 --- a/SignalServiceKit/Backups/Archiving/Archivers/Chat/BackupArchiveChatStyleArchiver.swift +++ b/SignalServiceKit/Backups/Archiving/Archivers/Chat/BackupArchiveChatStyleArchiver.swift @@ -241,6 +241,8 @@ public class BackupArchiveChatStyleArchiver: BackupArchiveProtoStreamWriter { case .failure(let error): return .failure(error) } + case .releaseNotes: + protoWallpaper = nil } if let protoWallpaper { @@ -538,6 +540,7 @@ private extension Wallpaper { enum BackupRepresentation { case wallpaperPreset(BackupProto_ChatStyle.WallpaperPreset) case photo + case releaseNotes } func asBackupProto() -> BackupRepresentation { @@ -567,6 +570,7 @@ private extension Wallpaper { case .blueGradient: .wallpaperPreset(.gradientSky) case .bisqueGradient: .wallpaperPreset(.gradientPeach) case .photo: .photo + case .releaseNotes: .releaseNotes } } } diff --git a/SignalServiceKit/UISupport/Models/Wallpaper+Constants.swift b/SignalServiceKit/UISupport/Models/Wallpaper+Constants.swift index 038b29eeca..b10834877f 100644 --- a/SignalServiceKit/UISupport/Models/Wallpaper+Constants.swift +++ b/SignalServiceKit/UISupport/Models/Wallpaper+Constants.swift @@ -23,7 +23,7 @@ extension Wallpaper { } switch self { - case .photo: + case .photo, .releaseNotes: return nil // Solid case .blush: @@ -451,6 +451,7 @@ extension Wallpaper { case .bisqueGradient: return .tangerine // Custom case .photo: return nil + case .releaseNotes: return nil } } } diff --git a/SignalServiceKit/UISupport/Models/Wallpaper.swift b/SignalServiceKit/UISupport/Models/Wallpaper.swift index adcfa18697..3a8f330129 100644 --- a/SignalServiceKit/UISupport/Models/Wallpaper.swift +++ b/SignalServiceKit/UISupport/Models/Wallpaper.swift @@ -34,5 +34,8 @@ public enum Wallpaper: String, CaseIterable { // Custom case photo - public static var defaultWallpapers: [Wallpaper] { allCases.filter { $0 != .photo } } + // Release Notes + case releaseNotes + + public static var defaultWallpapers: [Wallpaper] { allCases.filter { $0 != .photo && $0 != .releaseNotes } } } diff --git a/SignalUI/Appearance/ConversationStyle.swift b/SignalUI/Appearance/ConversationStyle.swift index 036decf48e..5a03b4ee1b 100644 --- a/SignalUI/Appearance/ConversationStyle.swift +++ b/SignalUI/Appearance/ConversationStyle.swift @@ -37,7 +37,6 @@ public struct ConversationStyle { public let hasWallpaper: Bool // Determines blur effect for incoming message bubbles. public let shouldDimWallpaperInDarkMode: Bool - public let isWallpaperPhoto: Bool public let isStandaloneRenderItem: Bool @@ -114,7 +113,6 @@ public struct ConversationStyle { viewWidth: CGFloat, hasWallpaper: Bool, shouldDimWallpaperInDarkMode: Bool, - isWallpaperPhoto: Bool, chatColor: ColorOrGradientSetting, isStandaloneRenderItem: Bool = false, ) { @@ -124,7 +122,6 @@ public struct ConversationStyle { self.primaryTextColor = Theme.primaryTextColor self.hasWallpaper = hasWallpaper self.shouldDimWallpaperInDarkMode = shouldDimWallpaperInDarkMode - self.isWallpaperPhoto = isWallpaperPhoto self.chatColorSetting = chatColor self.chatColorValue = chatColor.asValue @@ -397,7 +394,6 @@ extension ConversationStyle: Equatable { lhs.isDarkThemeEnabled == rhs.isDarkThemeEnabled && lhs.hasWallpaper == rhs.hasWallpaper && lhs.shouldDimWallpaperInDarkMode == rhs.shouldDimWallpaperInDarkMode && - lhs.isWallpaperPhoto == rhs.isWallpaperPhoto && lhs.maxMessageWidth == rhs.maxMessageWidth && lhs.maxMediaMessageWidth == rhs.maxMediaMessageWidth && lhs.textInsets == rhs.textInsets && @@ -419,7 +415,6 @@ extension ConversationStyle: CustomDebugStringConvertible { "dynamicBodyTypePointSize: \(dynamicBodyTypePointSize), " + "isDarkThemeEnabled: \(isDarkThemeEnabled), " + "hasWallpaper: \(hasWallpaper), " + - "isWallpaperPhoto: \(isWallpaperPhoto), " + "maxMessageWidth: \(maxMessageWidth), " + "maxMediaMessageWidth: \(maxMediaMessageWidth), " + "textInsets: \(textInsets), " + diff --git a/SignalUI/ViewControllers/OWSTableViewController2.swift b/SignalUI/ViewControllers/OWSTableViewController2.swift index b63ec0df8d..ba48bb5228 100644 --- a/SignalUI/ViewControllers/OWSTableViewController2.swift +++ b/SignalUI/ViewControllers/OWSTableViewController2.swift @@ -94,6 +94,8 @@ open class OWSTableViewController2: OWSViewController, OWSNavigationChildControl presentingViewController != nil || traitCollection.userInterfaceLevel == .elevated } + public var overrideCellBackgroundColor: UIColor? + private static let cellIdentifier = "cellIdentifier" override public init() { @@ -1026,10 +1028,11 @@ extension OWSTableViewController2: UITableViewDataSource, UITableViewDelegate { } public var cellBackgroundColor: UIColor { - Self.cellBackgroundColor( - isUsingPresentedStyle: isUsingPresentedStyle, - forceDarkMode: forceDarkMode, - ) + overrideCellBackgroundColor ?? + Self.cellBackgroundColor( + isUsingPresentedStyle: isUsingPresentedStyle, + forceDarkMode: forceDarkMode, + ) } public static func cellBackgroundColor( diff --git a/SignalUI/Wallpapers/Wallpaper+SignalUI.swift b/SignalUI/Wallpapers/Wallpaper+SignalUI.swift index 751a86a09f..8e2cc15521 100644 --- a/SignalUI/Wallpapers/Wallpaper+SignalUI.swift +++ b/SignalUI/Wallpapers/Wallpaper+SignalUI.swift @@ -11,19 +11,25 @@ extension Wallpaper { public static func viewBuilder(for thread: TSThread? = nil, tx: DBReadTransaction) -> WallpaperViewBuilder? { AssertIsOnMainThread() - let wallpaperStore = DependenciesBridge.shared.wallpaperStore - guard - let resolvedWallpaper = wallpaperStore.fetchWallpaperForRendering( - for: thread?.uniqueId, - tx: tx, - ) - else { - return nil + + let wallpaper: Wallpaper + if let thread, thread.isReleaseNotesThread { + wallpaper = .releaseNotes + } else { + guard + let resolvedWallpaper = wallpaperStore.fetchWallpaperForRendering( + for: thread?.uniqueId, + tx: tx, + ) + else { + return nil + } + wallpaper = resolvedWallpaper } return viewBuilder( - for: resolvedWallpaper, + for: wallpaper, customPhoto: { WallpaperStore.fetchResolvedValue( for: thread, @@ -51,6 +57,8 @@ extension Wallpaper { return .customPhoto(customPhoto, shouldDimInDarkMode: shouldDimInDarkTheme) } else if let colorOrGradientSetting = wallpaper.asColorOrGradientSetting { return .colorOrGradient(colorOrGradientSetting, shouldDimInDarkMode: shouldDimInDarkTheme) + } else if case .releaseNotes = wallpaper { + return .releaseNotes } else { owsFailDebug("Couldn't create wallpaper view builder.") return nil @@ -63,6 +71,7 @@ extension Wallpaper { public enum WallpaperViewBuilder { case colorOrGradient(ColorOrGradientSetting, shouldDimInDarkMode: Bool) case customPhoto(UIImage, shouldDimInDarkMode: Bool) + case releaseNotes public func build() -> WallpaperView { switch self { @@ -77,6 +86,8 @@ public enum WallpaperViewBuilder { )), shouldDimInDarkTheme: shouldDimInDarkMode, ) + case .releaseNotes: + return WallpaperView(mode: .releaseNotesView, shouldDimInDarkTheme: false) } } } @@ -87,6 +98,7 @@ public class WallpaperView { fileprivate enum Mode { case colorView(UIView) case imageView(UIImage) + case releaseNotesView } public private(set) var contentView: UIView? @@ -133,7 +145,17 @@ public class WallpaperView { dimmingView.backgroundColor = .ows_blackAlpha20 self.dimmingView = dimmingView } - + return imageView + case .releaseNotesView: + let image = UIImage(named: "official_wallpaper_reduced") + let imageView = UIImageView(image: image) + if Theme.isDarkThemeEnabled { + imageView.tintColor = UIColor(rgbHex: 0x272C3C) + imageView.backgroundColor = UIColor(rgbHex: 0x353A49) + } else { + imageView.tintColor = UIColor(rgbHex: 0xE3E4E9) + imageView.backgroundColor = UIColor(rgbHex: 0xE8EAF8).withAlphaComponent(0.4) + } return imageView } }()