mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-07 09:20:08 +00:00
Theme editing fixes
This commit is contained in:
parent
14e159807a
commit
97fc8311e5
@ -5181,3 +5181,5 @@ Any member of this group will be able to see messages in the channel.";
|
||||
"Theme.Context.ChangeColors" = "Change Colors";
|
||||
|
||||
"EditTheme.ChangeColors" = "Change Colors";
|
||||
|
||||
"Theme.Colors.Proceed" = "Proceed";
|
||||
|
||||
@ -182,7 +182,7 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
case .iPhone4, .iPhone5, .iPhone6:
|
||||
return 216.0
|
||||
case .iPhone6Plus:
|
||||
return 227.0
|
||||
return 226.0
|
||||
case .iPhoneX:
|
||||
return 291.0
|
||||
case .iPhoneXSMax:
|
||||
@ -215,8 +215,10 @@ public enum DeviceMetrics: CaseIterable, Equatable {
|
||||
switch self {
|
||||
case .iPhone4, .iPhone5:
|
||||
return 37.0
|
||||
case .iPhone6, .iPhone6Plus, .iPhoneX, .iPhoneXSMax:
|
||||
case .iPhone6, .iPhoneX, .iPhoneXSMax:
|
||||
return 44.0
|
||||
case .iPhone6Plus:
|
||||
return 45.0
|
||||
case .iPad, .iPadPro10Inch, .iPadPro11Inch, .iPadPro, .iPadPro3rdGen:
|
||||
return 50.0
|
||||
case .unknown:
|
||||
|
||||
@ -315,7 +315,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
let _ = (previewThemePromise.get()
|
||||
|> take(1)
|
||||
|> deliverOnMainQueue).start(next: { theme in
|
||||
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: nil, defaultThemeReference: nil, completion: { updatedTheme in
|
||||
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: nil, defaultThemeReference: nil, create: false, completion: { updatedTheme in
|
||||
updateState { current in
|
||||
var state = current
|
||||
previewThemePromise.set(.single(updatedTheme))
|
||||
@ -341,7 +341,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
guard complete, let fullSizeData = fullSizeData else {
|
||||
return .complete()
|
||||
}
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(file.file.resource.id, data: fullSizeData)
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(file.file.resource.id, data: fullSizeData, synchronous: true)
|
||||
return .single(wallpaper.wallpaper)
|
||||
}
|
||||
} else {
|
||||
@ -454,8 +454,8 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
let themeThumbnailData: Data?
|
||||
if let theme = theme, let themeString = encodePresentationTheme(theme), let data = themeString.data(using: .utf8) {
|
||||
let resource = LocalFileMediaResource(fileId: arc4random64())
|
||||
context.account.postbox.mediaBox.storeResourceData(resource.id, data: data)
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data)
|
||||
context.account.postbox.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
|
||||
themeResource = resource
|
||||
themeData = data
|
||||
|
||||
@ -501,7 +501,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
current = PresentationThemeSettings.defaultSettings
|
||||
}
|
||||
if let resource = resultTheme.file?.resource, let data = themeData {
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data)
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
|
||||
}
|
||||
let themeReference: PresentationThemeReference = .cloud(PresentationCloudTheme(theme: resultTheme, resolvedWallpaper: resolvedWallpaper))
|
||||
|
||||
@ -542,7 +542,7 @@ public func editThemeController(context: AccountContext, mode: EditThemeControll
|
||||
current = PresentationThemeSettings.defaultSettings
|
||||
}
|
||||
if let resource = resultTheme.file?.resource, let data = themeData {
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data)
|
||||
context.sharedContext.accountManager.mediaBox.storeResourceData(resource.id, data: data, synchronous: true)
|
||||
}
|
||||
let themeReference: PresentationThemeReference = .cloud(PresentationCloudTheme(theme: resultTheme, resolvedWallpaper: resolvedWallpaper))
|
||||
|
||||
|
||||
@ -16,13 +16,13 @@ private let colors: [Int32] = [0x007aff, 0x00c2ed, 0x29b327, 0xeb6ca4, 0xf08200,
|
||||
enum ThemeAccentColorControllerMode {
|
||||
case colors(themeReference: PresentationThemeReference)
|
||||
case background(themeReference: PresentationThemeReference)
|
||||
case edit(theme: PresentationTheme, wallpaper: TelegramWallpaper?, defaultThemeReference: PresentationThemeReference?, completion: (PresentationTheme) -> Void)
|
||||
case edit(theme: PresentationTheme, wallpaper: TelegramWallpaper?, defaultThemeReference: PresentationThemeReference?, create: Bool, completion: (PresentationTheme) -> 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
|
||||
default:
|
||||
return nil
|
||||
@ -121,7 +121,7 @@ final class ThemeAccentColorController: ViewController {
|
||||
|
||||
let theme: PresentationTheme
|
||||
let wallpaper: TelegramWallpaper
|
||||
if case let .edit(editedTheme, walpaper, _, _) = self.mode {
|
||||
if case let .edit(editedTheme, walpaper, _, _, _) = self.mode {
|
||||
theme = editedTheme
|
||||
wallpaper = walpaper ?? editedTheme.chat.defaultWallpaper
|
||||
} else {
|
||||
@ -136,7 +136,7 @@ final class ThemeAccentColorController: ViewController {
|
||||
}, apply: { [weak self] state, serviceBackgroundColor in
|
||||
if let strongSelf = self {
|
||||
let context = strongSelf.context
|
||||
if case let .edit(theme, _, themeReference, completion) = strongSelf.mode {
|
||||
if case let .edit(theme, _, themeReference, _, completion) = strongSelf.mode {
|
||||
let updatedTheme: PresentationTheme
|
||||
if let themeReference = themeReference {
|
||||
updatedTheme = makePresentationTheme(mediaBox: context.sharedContext.accountManager.mediaBox, themeReference: themeReference, accentColor: state.accentColor, bubbleColors: state.messagesColors, backgroundColors: state.backgroundColors, serviceBackgroundColor: serviceBackgroundColor) ?? defaultPresentationTheme
|
||||
@ -145,8 +145,6 @@ final class ThemeAccentColorController: ViewController {
|
||||
}
|
||||
|
||||
completion(updatedTheme)
|
||||
|
||||
strongSelf.dismiss()
|
||||
} else {
|
||||
let _ = (updatePresentationThemeSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in
|
||||
let autoNightModeTriggered = context.sharedContext.currentPresentationData.with { $0 }.autoNightModeTriggered
|
||||
@ -244,7 +242,7 @@ final class ThemeAccentColorController: ViewController {
|
||||
if strongSelf.mode.themeReference == .builtin(.dayClassic) {
|
||||
defaultMessagesColor = UIColor(rgb: 0xe1ffc7)
|
||||
}
|
||||
} else if case let .edit(theme, wallpaper, _, _) = strongSelf.mode {
|
||||
} else if case let .edit(theme, wallpaper, _, _, _) = strongSelf.mode {
|
||||
accentColor = theme.rootController.navigationBar.accentTextColor
|
||||
if case let .color(color) = theme.chat.defaultWallpaper {
|
||||
backgroundColors = (UIColor(rgb: UInt32(bitPattern: color)), nil)
|
||||
|
||||
@ -170,7 +170,14 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
|
||||
}
|
||||
|
||||
self.colorPanelNode = WallpaperColorPanelNode(theme: self.theme, strings: self.presentationData.strings)
|
||||
self.toolbarNode = WallpaperGalleryToolbarNode(theme: self.theme, strings: self.presentationData.strings)
|
||||
|
||||
let doneButtonType: WallpaperGalleryToolbarDoneButtonType
|
||||
if case .edit(_, _, _, true, _) = self.mode {
|
||||
doneButtonType = .proceed
|
||||
} else {
|
||||
doneButtonType = .set
|
||||
}
|
||||
self.toolbarNode = WallpaperGalleryToolbarNode(theme: self.theme, strings: self.presentationData.strings, doneButtonType: doneButtonType)
|
||||
|
||||
self.maskNode = ASImageNode()
|
||||
self.maskNode.displaysAsynchronously = false
|
||||
@ -270,7 +277,7 @@ final class ThemeAccentColorControllerNode: ASDisplayNode, UIScrollViewDelegate
|
||||
let updatedTheme: PresentationTheme
|
||||
if let themeReference = mode.themeReference {
|
||||
updatedTheme = makePresentationTheme(mediaBox: context.sharedContext.accountManager.mediaBox, themeReference: themeReference, accentColor: accentColor, bubbleColors: messagesColors, 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, backgroundColors: backgroundColors, bubbleColors: messagesColors)
|
||||
} else {
|
||||
updatedTheme = theme
|
||||
|
||||
@ -55,10 +55,20 @@ public final class ThemePreviewController: ViewController {
|
||||
self.blocksBackgroundWhenInOverlay = true
|
||||
self.navigationPresentation = .modal
|
||||
|
||||
var hasInstallsCount = false
|
||||
let themeName: String
|
||||
if case let .theme(theme) = source {
|
||||
themeName = theme.title
|
||||
self.theme.set(.single(theme))
|
||||
self.theme.set(.single(theme)
|
||||
|> then(
|
||||
getTheme(account: context.account, slug: theme.slug)
|
||||
|> map(Optional.init)
|
||||
|> `catch` { _ -> Signal<TelegramTheme?, NoError> in
|
||||
return .single(nil)
|
||||
}
|
||||
|> filter { $0 != nil }
|
||||
))
|
||||
hasInstallsCount = true
|
||||
} else if case let .slug(slug, _) = source {
|
||||
self.theme.set(getTheme(account: context.account, slug: slug)
|
||||
|> map(Optional.init)
|
||||
@ -84,6 +94,15 @@ public final class ThemePreviewController: ViewController {
|
||||
}
|
||||
}
|
||||
))
|
||||
hasInstallsCount = true
|
||||
} else if case let .settings(themeReference) = source, case let .cloud(theme) = themeReference {
|
||||
self.theme.set(getTheme(account: context.account, slug: theme.theme.slug)
|
||||
|> map(Optional.init)
|
||||
|> `catch` { _ -> Signal<TelegramTheme?, NoError> in
|
||||
return .single(nil)
|
||||
})
|
||||
themeName = previewTheme.name.string
|
||||
hasInstallsCount = true
|
||||
} else {
|
||||
self.theme.set(.single(nil))
|
||||
themeName = previewTheme.name.string
|
||||
@ -95,7 +114,7 @@ public final class ThemePreviewController: ViewController {
|
||||
}
|
||||
|
||||
let titleView = CounterContollerTitleView(theme: self.previewTheme)
|
||||
titleView.title = CounterContollerTitle(title: themeName, counter: isPreview ? "" : " ")
|
||||
titleView.title = CounterContollerTitle(title: themeName, counter: hasInstallsCount ? " " : "")
|
||||
self.navigationItem.titleView = titleView
|
||||
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: UIView())
|
||||
|
||||
|
||||
@ -112,7 +112,7 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
||||
self.blurredNode = BlurredImageNode()
|
||||
self.blurredNode.blurView.contentMode = .scaleAspectFill
|
||||
|
||||
self.toolbarNode = WallpaperGalleryToolbarNode(theme: self.previewTheme, strings: self.presentationData.strings)
|
||||
self.toolbarNode = WallpaperGalleryToolbarNode(theme: self.previewTheme, strings: self.presentationData.strings, doneButtonType: .set)
|
||||
|
||||
if case let .file(file) = previewTheme.chat.defaultWallpaper, file.id == 0 {
|
||||
self.remoteChatBackgroundNode.isHidden = false
|
||||
|
||||
@ -412,9 +412,6 @@ private func themeSettingsControllerEntries(presentationData: PresentationData,
|
||||
}
|
||||
entries.append(.textSize(presentationData.theme, strings.Appearance_TextSizeSetting, textSizeValue))
|
||||
|
||||
//entries.append(.fontSizeHeader(presentationData.theme, strings.Appearance_TextSize.uppercased()))
|
||||
//entries.append(.fontSize(presentationData.theme, fontSize))
|
||||
|
||||
if !availableAppIcons.isEmpty {
|
||||
entries.append(.iconHeader(presentationData.theme, strings.Appearance_AppIcon.uppercased()))
|
||||
entries.append(.iconItem(presentationData.theme, presentationData.strings, availableAppIcons, currentAppIconName))
|
||||
@ -431,6 +428,7 @@ private func themeSettingsControllerEntries(presentationData: PresentationData,
|
||||
public func themeSettingsController(context: AccountContext, focusOnItemTag: ThemeSettingsEntryTag? = nil) -> ViewController {
|
||||
var pushControllerImpl: ((ViewController) -> Void)?
|
||||
var presentControllerImpl: ((ViewController, Any?) -> Void)?
|
||||
var updateControllersImpl: ((([UIViewController]) -> [UIViewController]) -> Void)?
|
||||
var presentInGlobalOverlayImpl: ((ViewController, Any?) -> Void)?
|
||||
var getNavigationControllerImpl: (() -> NavigationController?)?
|
||||
|
||||
@ -552,13 +550,23 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
||||
return
|
||||
}
|
||||
|
||||
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: nil, defaultThemeReference: nil, completion: { result in
|
||||
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: theme, wallpaper: nil, defaultThemeReference: nil, create: true, completion: { result in
|
||||
let controller = editThemeController(context: context, mode: .create(result), navigateToChat: { peerId in
|
||||
if let navigationController = getNavigationControllerImpl?() {
|
||||
context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))
|
||||
}
|
||||
})
|
||||
pushControllerImpl?(controller)
|
||||
updateControllersImpl?({ controllers in
|
||||
var controllers = controllers
|
||||
controllers = controllers.filter { controller in
|
||||
if controller is ThemeAccentColorController {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
controllers.append(controller)
|
||||
return controllers
|
||||
})
|
||||
}))
|
||||
|
||||
c.dismiss(completion: {
|
||||
@ -671,6 +679,11 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
||||
presentControllerImpl = { [weak controller] c, a in
|
||||
controller?.present(c, in: .window(.root), with: a, blockInteraction: true)
|
||||
}
|
||||
updateControllersImpl = { [weak controller] f in
|
||||
if let navigationController = controller?.navigationController as? NavigationController {
|
||||
navigationController.setViewControllers(f(navigationController.viewControllers), animated: true)
|
||||
}
|
||||
}
|
||||
presentInGlobalOverlayImpl = { [weak controller] c, a in
|
||||
controller?.presentInGlobalOverlay(c, with: a)
|
||||
}
|
||||
@ -753,13 +766,23 @@ public func themeSettingsController(context: AccountContext, focusOnItemTag: The
|
||||
return themeReference
|
||||
}
|
||||
|> deliverOnMainQueue).start(next: { themeReference in
|
||||
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper, defaultThemeReference: themeReference, completion: { result in
|
||||
let controller = ThemeAccentColorController(context: context, mode: .edit(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper, defaultThemeReference: themeReference, create: true, completion: { result in
|
||||
let controller = editThemeController(context: context, mode: .create(result), navigateToChat: { peerId in
|
||||
if let navigationController = getNavigationControllerImpl?() {
|
||||
context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))
|
||||
}
|
||||
})
|
||||
pushControllerImpl?(controller)
|
||||
updateControllersImpl?({ controllers in
|
||||
var controllers = controllers
|
||||
controllers = controllers.filter { controller in
|
||||
if controller is ThemeAccentColorController {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
controllers.append(controller)
|
||||
return controllers
|
||||
})
|
||||
}))
|
||||
pushControllerImpl?(controller)
|
||||
|
||||
|
||||
@ -259,7 +259,11 @@ private class ColorInputFieldNode: ASDisplayNode, UITextFieldDelegate {
|
||||
|
||||
@objc func textFieldDidEndEditing(_ textField: UITextField) {
|
||||
if !self.skipEndEditing {
|
||||
self.setColor(self.previousColor ?? .black, isDefault: self.previousIsDefault ?? false)
|
||||
if let color = self.colorFromCurrentText() {
|
||||
self.setColor(color)
|
||||
} else {
|
||||
self.setColor(self.previousColor ?? .black, isDefault: self.previousIsDefault ?? false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -351,7 +351,7 @@ public class WallpaperGalleryController: ViewController {
|
||||
self.colorPanelNode = colorPanelNode
|
||||
overlayNode.addSubnode(colorPanelNode)
|
||||
|
||||
let toolbarNode = WallpaperGalleryToolbarNode(theme: presentationData.theme, strings: presentationData.strings)
|
||||
let toolbarNode = WallpaperGalleryToolbarNode(theme: presentationData.theme, strings: presentationData.strings, doneButtonType: .set)
|
||||
self.toolbarNode = toolbarNode
|
||||
overlayNode.addSubnode(toolbarNode)
|
||||
|
||||
|
||||
@ -4,8 +4,14 @@ import AsyncDisplayKit
|
||||
import Display
|
||||
import TelegramPresentationData
|
||||
|
||||
enum WallpaperGalleryToolbarDoneButtonType {
|
||||
case set
|
||||
case proceed
|
||||
}
|
||||
|
||||
final class WallpaperGalleryToolbarNode: ASDisplayNode {
|
||||
private var theme: PresentationTheme
|
||||
private let doneButtonType: WallpaperGalleryToolbarDoneButtonType
|
||||
|
||||
private let cancelButton = HighlightableButtonNode()
|
||||
private let doneButton = HighlightableButtonNode()
|
||||
@ -15,8 +21,9 @@ final class WallpaperGalleryToolbarNode: ASDisplayNode {
|
||||
var cancel: (() -> Void)?
|
||||
var done: (() -> Void)?
|
||||
|
||||
init(theme: PresentationTheme, strings: PresentationStrings) {
|
||||
init(theme: PresentationTheme, strings: PresentationStrings, doneButtonType: WallpaperGalleryToolbarDoneButtonType) {
|
||||
self.theme = theme
|
||||
self.doneButtonType = doneButtonType
|
||||
|
||||
super.init()
|
||||
|
||||
@ -67,7 +74,7 @@ final class WallpaperGalleryToolbarNode: ASDisplayNode {
|
||||
self.topSeparatorNode.backgroundColor = theme.rootController.tabBar.separatorColor
|
||||
|
||||
self.cancelButton.setTitle(strings.Common_Cancel, with: Font.regular(17.0), with: theme.list.itemPrimaryTextColor, for: [])
|
||||
self.doneButton.setTitle(strings.Wallpaper_Set, with: Font.regular(17.0), with: theme.list.itemPrimaryTextColor, for: [])
|
||||
self.doneButton.setTitle(self.doneButtonType == .set ? strings.Wallpaper_Set : strings.Theme_Colors_Proceed, with: Font.regular(17.0), with: theme.list.itemPrimaryTextColor, for: [])
|
||||
}
|
||||
|
||||
func updateLayout(size: CGSize, layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -631,6 +631,7 @@ final class ChatMessageInteractiveFileNode: ASDisplayNode {
|
||||
}
|
||||
|
||||
strongSelf.waveformNode.displaysAsynchronously = !presentationData.isPreview
|
||||
strongSelf.statusNode?.displaysAsynchronously = !presentationData.isPreview
|
||||
strongSelf.statusNode?.frame = progressFrame
|
||||
strongSelf.progressFrame = progressFrame
|
||||
strongSelf.streamingCacheStatusFrame = streamingCacheStatusFrame
|
||||
|
||||
Binary file not shown.
@ -110,7 +110,7 @@ final class ThemeUpdateManagerImpl: ThemeUpdateManager {
|
||||
guard complete, let fullSizeData = fullSizeData else {
|
||||
return .complete()
|
||||
}
|
||||
accountManager.mediaBox.storeResourceData(file.file.resource.id, data: fullSizeData)
|
||||
accountManager.mediaBox.storeResourceData(file.file.resource.id, data: fullSizeData, synchronous: true)
|
||||
return .single((.cloud(PresentationCloudTheme(theme: theme, resolvedWallpaper: wallpaper)), presentationTheme))
|
||||
}
|
||||
} else {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user