mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Merge commit '7ac580694b49d9e8c38f16d7431da6be319ecd62'
This commit is contained in:
commit
d968c67627
@ -7024,3 +7024,11 @@ Sorry for the inconvenience.";
|
||||
"SharedMedia.ShowCalendar" = "Show Calendar";
|
||||
"SharedMedia.ShowPhotos" = "Show Photos";
|
||||
"SharedMedia.ShowVideos" = "Show Videos";
|
||||
|
||||
"Settings.ChatThemes" = "Chat Themes";
|
||||
|
||||
"Themes.Title" = "Chat Themes";
|
||||
"Themes.SelectTheme" = "Select Theme";
|
||||
"Themes.BuildOwn" = "Build Your Own Theme";
|
||||
"Themes.EditCurrentTheme" = "Edit Current Theme";
|
||||
"Themes.CreateNewTheme" = "Create a New Theme";
|
||||
|
@ -440,8 +440,13 @@ public class ItemListInviteRequestItemNode: ListViewItemNode, ItemListItemNode {
|
||||
alphaTransition.updateAlpha(node: strongSelf.addButton, alpha: isExtracted ? 0.0 : 1.0, delay: isExtracted ? 0.0 : 0.1)
|
||||
alphaTransition.updateAlpha(node: strongSelf.dismissButton, alpha: isExtracted ? 0.0 : 1.0, delay: isExtracted ? 0.0 : 0.1)
|
||||
|
||||
var sublayerOffset: CGFloat = -64.0
|
||||
if item.style == .plain {
|
||||
sublayerOffset += 16.0
|
||||
}
|
||||
|
||||
let offsetInitialSublayerTransform = strongSelf.offsetContainerNode.layer.sublayerTransform
|
||||
strongSelf.offsetContainerNode.layer.sublayerTransform = CATransform3DMakeTranslation(isExtracted ? -64.0 : 0.0, isExtracted ? extractedVerticalOffset : 0.0, 0.0)
|
||||
strongSelf.offsetContainerNode.layer.sublayerTransform = CATransform3DMakeTranslation(isExtracted ? sublayerOffset : 0.0, isExtracted ? extractedVerticalOffset : 0.0, 0.0)
|
||||
|
||||
let initialExtractedBackgroundPosition = strongSelf.extractedBackgroundImageNode.position
|
||||
strongSelf.extractedBackgroundImageNode.layer.position = rect.center
|
||||
@ -493,7 +498,12 @@ public class ItemListInviteRequestItemNode: ListViewItemNode, ItemListItemNode {
|
||||
transition.updateAlpha(node: strongSelf.addButton, alpha: isExtracted ? 0.0 : 1.0, delay: isExtracted ? 0.0 : 0.1)
|
||||
transition.updateAlpha(node: strongSelf.dismissButton, alpha: isExtracted ? 0.0 : 1.0, delay: isExtracted ? 0.0 : 0.1)
|
||||
|
||||
transition.updateSublayerTransformOffset(layer: strongSelf.offsetContainerNode.layer, offset: CGPoint(x: isExtracted ? -16.0 : 0.0, y: 0.0))
|
||||
var sublayerOffset: CGFloat = -16.0
|
||||
if item.style == .plain {
|
||||
sublayerOffset += 16.0
|
||||
}
|
||||
|
||||
transition.updateSublayerTransformOffset(layer: strongSelf.offsetContainerNode.layer, offset: CGPoint(x: isExtracted ? sublayerOffset : 0.0, y: 0.0))
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -546,7 +556,12 @@ public class ItemListInviteRequestItemNode: ListViewItemNode, ItemListItemNode {
|
||||
|
||||
let (titleLayout, titleApply) = makeTitleLayout(TextNodeLayoutArguments(attributedString: titleAttributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset - 44.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
|
||||
let (subtitleLayout, subtitleApply) = makeSubtitleLayout(TextNodeLayoutArguments(attributedString: subtitleAttributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
|
||||
let (expandedSubtitleLayout, expandedSubtitleApply) = makeExpandedSubtitleLayout(TextNodeLayoutArguments(attributedString: expnadedSubtitleAttributedString, backgroundColor: nil, maximumNumberOfLines: 5, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
|
||||
|
||||
var expandedMaxWidth = params.width - leftInset - rightInset
|
||||
if item.style == .plain {
|
||||
expandedMaxWidth -= 32.0
|
||||
}
|
||||
let (expandedSubtitleLayout, expandedSubtitleApply) = makeExpandedSubtitleLayout(TextNodeLayoutArguments(attributedString: expnadedSubtitleAttributedString, backgroundColor: nil, maximumNumberOfLines: 5, truncationType: .end, constrainedSize: CGSize(width: expandedMaxWidth, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
|
||||
let (dateLayout, dateApply) = makeDateLayout(TextNodeLayoutArguments(attributedString: dateAttributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: params.width - leftInset - rightInset, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets()))
|
||||
|
||||
let titleSpacing: CGFloat = 1.0
|
||||
@ -595,7 +610,12 @@ public class ItemListInviteRequestItemNode: ListViewItemNode, ItemListItemNode {
|
||||
if case .blocks = item.style {
|
||||
nonExtractedRect = nonExtractedRect.inset(by: UIEdgeInsets(top: 0.0, left: params.leftInset, bottom: 0.0, right: params.rightInset))
|
||||
}
|
||||
var extractedRect = CGRect(origin: CGPoint(), size: layout.contentSize).insetBy(dx: params.leftInset, dy: 0.0)
|
||||
var extractedRect: CGRect
|
||||
if case .blocks = item.style {
|
||||
extractedRect = CGRect(origin: CGPoint(), size: layout.contentSize).insetBy(dx: params.leftInset, dy: 0.0)
|
||||
} else {
|
||||
extractedRect = CGRect(origin: CGPoint(), size: layout.contentSize).insetBy(dx: params.leftInset + 16.0, dy: 0.0)
|
||||
}
|
||||
var extractedHeight = extractedRect.height + expandedSubtitleLayout.size.height - subtitleLayout.size.height
|
||||
var extractedVerticalOffset: CGFloat = 0.0
|
||||
if item.importer?.peer.peer?.smallProfileImage != nil {
|
||||
|
@ -168,7 +168,7 @@ class ItemListPeerActionItemNode: ListViewItemNode {
|
||||
case .generic:
|
||||
verticalInset = 11.0
|
||||
verticalOffset = 0.0
|
||||
leftInset = (item.icon == nil ? 16.0 : 65.0) + params.leftInset
|
||||
leftInset = (item.icon == nil ? 16.0 : 59.0) + params.leftInset
|
||||
case .peerList:
|
||||
verticalInset = 14.0
|
||||
verticalOffset = 0.0
|
||||
|
@ -33,8 +33,9 @@ private final class ChannelVisibilityControllerArguments {
|
||||
let shareLink: (ExportedInvitation) -> Void
|
||||
let linkContextAction: (ASDisplayNode, ContextGesture?) -> Void
|
||||
let manageInviteLinks: () -> Void
|
||||
let openLink: (ExportedInvitation) -> Void
|
||||
|
||||
init(context: AccountContext, updateCurrentType: @escaping (CurrentChannelType) -> Void, updatePublicLinkText: @escaping (String?, String) -> Void, scrollToPublicLinkText: @escaping () -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, revokePeerId: @escaping (PeerId) -> Void, copyLink: @escaping (ExportedInvitation) -> Void, shareLink: @escaping (ExportedInvitation) -> Void, linkContextAction: @escaping (ASDisplayNode, ContextGesture?) -> Void, manageInviteLinks: @escaping () -> Void) {
|
||||
init(context: AccountContext, updateCurrentType: @escaping (CurrentChannelType) -> Void, updatePublicLinkText: @escaping (String?, String) -> Void, scrollToPublicLinkText: @escaping () -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, revokePeerId: @escaping (PeerId) -> Void, copyLink: @escaping (ExportedInvitation) -> Void, shareLink: @escaping (ExportedInvitation) -> Void, linkContextAction: @escaping (ASDisplayNode, ContextGesture?) -> Void, manageInviteLinks: @escaping () -> Void, openLink: @escaping (ExportedInvitation) -> Void) {
|
||||
self.context = context
|
||||
self.updateCurrentType = updateCurrentType
|
||||
self.updatePublicLinkText = updatePublicLinkText
|
||||
@ -45,6 +46,7 @@ private final class ChannelVisibilityControllerArguments {
|
||||
self.shareLink = shareLink
|
||||
self.linkContextAction = linkContextAction
|
||||
self.manageInviteLinks = manageInviteLinks
|
||||
self.openLink = openLink
|
||||
}
|
||||
}
|
||||
|
||||
@ -302,7 +304,9 @@ private enum ChannelVisibilityEntry: ItemListNodeEntry {
|
||||
}, contextAction: { node, gesture in
|
||||
arguments.linkContextAction(node, gesture)
|
||||
}, viewAction: {
|
||||
|
||||
if let invite = invite {
|
||||
arguments.openLink(invite)
|
||||
}
|
||||
})
|
||||
case let .editablePublicLink(theme, _, placeholder, currentText):
|
||||
return ItemListSingleLineInputItem(presentationData: presentationData, title: NSAttributedString(string: "t.me/", textColor: theme.list.itemPrimaryTextColor), text: currentText, placeholder: placeholder, type: .regular(capitalization: false, autocorrection: false), clearType: .always, tag: ChannelVisibilityEntryTag.publicLink, sectionId: self.section, textUpdated: { updatedText in
|
||||
@ -1055,6 +1059,9 @@ public func channelVisibilityController(context: AccountContext, updatedPresenta
|
||||
}, manageInviteLinks: {
|
||||
let controller = inviteLinkListController(context: context, updatedPresentationData: updatedPresentationData, peerId: peerId, admin: nil)
|
||||
pushControllerImpl?(controller)
|
||||
}, openLink: { invite in
|
||||
let controller = InviteLinkViewController(context: context, updatedPresentationData: updatedPresentationData, peerId: peerId, invite: invite, invitationsContext: nil, revokedInvitationsContext: nil, importersContext: nil)
|
||||
pushControllerImpl?(controller)
|
||||
})
|
||||
|
||||
let peerView = context.account.viewTracker.peerView(peerId)
|
||||
|
@ -222,7 +222,7 @@ private enum NotificationsPeerCategoryEntry: ItemListNodeEntry {
|
||||
case let .exceptionsHeader(_, text):
|
||||
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section)
|
||||
case let .addException(theme, text):
|
||||
return ItemListPeerActionItem(presentationData: presentationData, icon: PresentationResourcesItemList.plusIconImage(theme), title: text, sectionId: self.section, height: .generic, color: .accent, editing: false, action: {
|
||||
return ItemListPeerActionItem(presentationData: presentationData, icon: PresentationResourcesItemList.plusIconImage(theme), title: text, sectionId: self.section, height: .peerList, color: .accent, editing: false, action: {
|
||||
arguments.addException()
|
||||
})
|
||||
case let .exception(_, _, _, dateTimeFormat, nameDisplayOrder, peer, description, _, editing, revealed):
|
||||
|
@ -138,10 +138,13 @@ func iconForSession(_ session: RecentAccountSession) -> (UIImage?, String?) {
|
||||
if platform.contains("android") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/Android"), "device_android")
|
||||
}
|
||||
if platform.contains("ios") || platform.contains("macos") {
|
||||
if platform.contains("ios") || platform.contains("macos") || systemVersion.contains("macos") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/iOS"), nil)
|
||||
}
|
||||
if platform.contains("linux") {
|
||||
if platform.contains("ubuntu") || systemVersion.contains("ubuntu") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/Ubuntu"), nil)
|
||||
}
|
||||
if platform.contains("linux") || systemVersion.contains("macos") {
|
||||
return (UIImage(bundleImageName: "Settings/Devices/Linux"), nil)
|
||||
}
|
||||
if platform.contains("windows") || systemVersion.contains("windows") {
|
||||
|
@ -285,10 +285,10 @@ private enum ThemePickerControllerEntry: ItemListNodeEntry {
|
||||
private func themePickerControllerEntries(presentationData: PresentationData, presentationThemeSettings: PresentationThemeSettings, themeReference: PresentationThemeReference, availableThemes: [PresentationThemeReference], chatThemes: [PresentationThemeReference], nightMode: Bool, animatedEmojiStickers: [String: [StickerPackItem]]) -> [ThemePickerControllerEntry] {
|
||||
var entries: [ThemePickerControllerEntry] = []
|
||||
|
||||
entries.append(.themesHeader(presentationData.theme, "Select Theme".uppercased()))
|
||||
entries.append(.themesHeader(presentationData.theme, presentationData.strings.Themes_SelectTheme.uppercased()))
|
||||
entries.append(.themes(presentationData.theme, presentationData.strings, chatThemes, themeReference, nightMode, animatedEmojiStickers))
|
||||
|
||||
entries.append(.customHeader(presentationData.theme, "Build Your Own Theme".uppercased()))
|
||||
entries.append(.customHeader(presentationData.theme, presentationData.strings.Themes_BuildOwn.uppercased()))
|
||||
entries.append(.chatPreview(presentationData.theme, presentationData.chatWallpaper, presentationData.chatFontSize, presentationData.chatBubbleCorners, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, [ChatPreviewMessageItem(outgoing: false, reply: (presentationData.strings.Appearance_PreviewReplyAuthor, presentationData.strings.Appearance_PreviewReplyText), text: presentationData.strings.Appearance_PreviewIncomingText), ChatPreviewMessageItem(outgoing: true, reply: nil, text: presentationData.strings.Appearance_PreviewOutgoingText)]))
|
||||
|
||||
let generalThemes: [PresentationThemeReference] = availableThemes.filter { reference in
|
||||
@ -333,8 +333,8 @@ private func themePickerControllerEntries(presentationData: PresentationData, pr
|
||||
entries.append(.accentColor(presentationData.theme, generalThemeReference, themeReference, colorThemes, colorOption))
|
||||
}
|
||||
|
||||
entries.append(.editTheme(presentationData.theme, "Edit Current Theme"))
|
||||
entries.append(.createTheme(presentationData.theme, "Create a New Theme"))
|
||||
entries.append(.editTheme(presentationData.theme, presentationData.strings.Themes_EditCurrentTheme))
|
||||
entries.append(.createTheme(presentationData.theme, presentationData.strings.Themes_CreateNewTheme))
|
||||
|
||||
return entries
|
||||
}
|
||||
@ -934,7 +934,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme
|
||||
|
||||
let nightMode = nightModePreview || presentationData.autoNightModeTriggered
|
||||
|
||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text("Chat Themes"), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back))
|
||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.Themes_Title), leftNavigationButton: nil, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back))
|
||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: themePickerControllerEntries(presentationData: presentationData, presentationThemeSettings: settings, themeReference: themeReference, availableThemes: availableThemes, chatThemes: chatThemes, nightMode: nightMode, animatedEmojiStickers: animatedEmojiStickers), style: .blocks, ensureVisibleItemTag: focusOnItemTag, animateChanges: false)
|
||||
|
||||
return (controllerState, (listState, arguments))
|
||||
|
@ -413,10 +413,10 @@ class ThemeGridThemeItemNode: ListViewItemNode, ItemListItemNode {
|
||||
|
||||
let referenceImageSize: CGSize
|
||||
let screenWidth = min(params.width, params.availableHeight)
|
||||
if screenWidth >= 375.0 {
|
||||
if screenWidth >= 390.0 {
|
||||
referenceImageSize = CGSize(width: 110.0, height: 150.0)
|
||||
} else {
|
||||
referenceImageSize = CGSize(width: 91.0, height: 150.0)
|
||||
referenceImageSize = CGSize(width: 90.0, height: 150.0)
|
||||
}
|
||||
let totalWidth = params.width - params.leftInset - params.rightInset
|
||||
let imageCount = Int((totalWidth - minSpacing) / (referenceImageSize.width + minSpacing))
|
||||
|
@ -614,7 +614,7 @@ final class ThemeGridControllerNode: ASDisplayNode {
|
||||
let minSpacing: CGFloat = 8.0
|
||||
let referenceImageSize: CGSize
|
||||
let screenWidth = min(layout.size.width, layout.size.height)
|
||||
if screenWidth >= 375.0 {
|
||||
if screenWidth >= 390.0 {
|
||||
referenceImageSize = CGSize(width: 108.0, height: 230.0)
|
||||
} else {
|
||||
referenceImageSize = CGSize(width: 91.0, height: 161.0)
|
||||
|
@ -774,14 +774,14 @@ final class ThemeGridSearchContentNode: SearchDisplayControllerContentNode {
|
||||
let minSpacing: CGFloat = 8.0
|
||||
let referenceImageSize: CGSize
|
||||
let screenWidth = min(layout.size.width, layout.size.height)
|
||||
if screenWidth >= 375.0 {
|
||||
if screenWidth >= 390.0 {
|
||||
referenceImageSize = CGSize(width: 108.0, height: 230.0)
|
||||
} else {
|
||||
referenceImageSize = CGSize(width: 91.0, height: 161.0)
|
||||
}
|
||||
let imageCount = Int((layout.size.width - minSpacing * 2.0) / (referenceImageSize.width + minSpacing))
|
||||
let imageSize = referenceImageSize.aspectFilled(CGSize(width: floor((layout.size.width - CGFloat(imageCount + 1) * minSpacing) / CGFloat(imageCount)), height: referenceImageSize.height))
|
||||
let spacing = floor((layout.size.width - CGFloat(imageCount) * imageSize.width) / CGFloat(imageCount + 1))
|
||||
let imageSize = referenceImageSize.aspectFilled(CGSize(width: floor((layout.size.width - layout.safeInsets.left - layout.safeInsets.right - CGFloat(imageCount + 1) * minSpacing) / CGFloat(imageCount)), height: referenceImageSize.height))
|
||||
let spacing = floor((layout.size.width - layout.safeInsets.left - layout.safeInsets.right - CGFloat(imageCount) * imageSize.width) / CGFloat(imageCount + 1))
|
||||
|
||||
let topInset = navigationBarHeight
|
||||
transition.updateFrame(node: self.dimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: topInset), size: CGSize(width: layout.size.width, height: layout.size.height - topInset)))
|
||||
|
@ -342,42 +342,7 @@ private func themeSettingsControllerEntries(presentationData: PresentationData,
|
||||
entries.append(.chatPreview(presentationData.theme, presentationData.chatWallpaper, presentationData.chatFontSize, presentationData.chatBubbleCorners, presentationData.strings, presentationData.dateTimeFormat, presentationData.nameDisplayOrder, [ChatPreviewMessageItem(outgoing: false, reply: (presentationData.strings.Appearance_PreviewReplyAuthor, presentationData.strings.Appearance_PreviewReplyText), text: presentationData.strings.Appearance_PreviewIncomingText), ChatPreviewMessageItem(outgoing: true, reply: nil, text: presentationData.strings.Appearance_PreviewOutgoingText)]))
|
||||
|
||||
entries.append(.themes(presentationData.theme, presentationData.strings, chatThemes, themeReference, presentationThemeSettings.automaticThemeSwitchSetting.force, animatedEmojiStickers))
|
||||
// let generalThemes: [PresentationThemeReference] = availableThemes.filter { reference in
|
||||
// if case let .cloud(theme) = reference {
|
||||
// return theme.theme.settings == nil
|
||||
// } else {
|
||||
// return true
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// let generalThemeReference: PresentationThemeReference
|
||||
// if case let .cloud(theme) = themeReference, let settings = theme.theme.settings {
|
||||
// generalThemeReference = .builtin(PresentationBuiltinThemeReference(baseTheme: settings.baseTheme))
|
||||
// } else {
|
||||
// generalThemeReference = themeReference
|
||||
// }
|
||||
|
||||
// entries.append(.themeItem(presentationData.theme, presentationData.strings, generalThemes, availableThemes, themeReference, presentationThemeSettings.themeSpecificAccentColors, presentationThemeSettings.themeSpecificChatWallpapers, presentationThemeSettings.themeSpecificAccentColors[themeReference.index]))
|
||||
//
|
||||
// if case let .builtin(builtinTheme) = generalThemeReference {
|
||||
// let colorThemes = availableThemes.filter { reference in
|
||||
// if case let .cloud(theme) = reference, let settings = theme.theme.settings, settings.baseTheme == builtinTheme.baseTheme {
|
||||
// return true
|
||||
// } else {
|
||||
// return false
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// var colorOption: ThemeSettingsColorOption?
|
||||
// if case .builtin = themeReference {
|
||||
// colorOption = presentationThemeSettings.themeSpecificAccentColors[themeReference.index].flatMap { .accentColor($0) }
|
||||
// } else {
|
||||
// colorOption = .theme(themeReference)
|
||||
// }
|
||||
//
|
||||
// entries.append(.accentColor(presentationData.theme, generalThemeReference, themeReference, colorThemes, colorOption))
|
||||
// }
|
||||
entries.append(.chatTheme(presentationData.theme, "Chat Themes"))
|
||||
entries.append(.chatTheme(presentationData.theme, strings.Settings_ChatThemes))
|
||||
entries.append(.wallpaper(presentationData.theme, strings.Settings_ChatBackground))
|
||||
|
||||
entries.append(.autoNight(presentationData.theme, strings.Appearance_NightTheme, presentationThemeSettings.automaticThemeSwitchSetting.force, !presentationData.autoNightModeTriggered || presentationThemeSettings.automaticThemeSwitchSetting.force))
|
||||
|
@ -217,7 +217,7 @@ public struct PresentationResourcesItemList {
|
||||
}
|
||||
|
||||
public static func resetIcon(_ theme: PresentationTheme) -> UIImage? {
|
||||
return theme.image(PresentationResourceKey.itemListEditThemeIcon.rawValue, { theme in
|
||||
return theme.image(PresentationResourceKey.itemListResetIcon.rawValue, { theme in
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Settings/Reset"), color: theme.list.itemAccentColor)
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user