Various fixes

This commit is contained in:
Ilya Laktyushin 2021-10-28 00:23:37 +04:00
parent a423239c18
commit d86b655413
4 changed files with 85 additions and 63 deletions

View File

@ -113,6 +113,10 @@ final class ItemListRecentSessionItem: ListViewItem, ItemListItem {
private func iconForSession(_ session: RecentAccountSession) -> UIImage? {
let platform = session.platform.lowercased()
let device = session.deviceModel.lowercased()
let systemVersion = session.systemVersion.lowercased()
if device.contains("xbox") {
return UIImage(bundleImageName: "Settings/Devices/Xbox")
}
if device.contains("chrome") && !device.contains("chromebook") {
return UIImage(bundleImageName: "Settings/Devices/Chrome")
}
@ -140,7 +144,7 @@ private func iconForSession(_ session: RecentAccountSession) -> UIImage? {
if platform.contains("linux") {
return UIImage(bundleImageName: "Settings/Devices/Linux")
}
if platform.contains("windows") {
if platform.contains("windows") || systemVersion.contains("windows") {
return UIImage(bundleImageName: "Settings/Devices/Windows")
}
return nil

View File

@ -578,6 +578,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme
presentControllerImpl?(shareController, nil)
})
})))
if !theme.theme.isDefault {
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Appearance_RemoveTheme, textColor: .destructive, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Delete"), color: theme.contextMenu.destructiveColor) }, action: { c, f in
c.dismiss(completion: {
let actionSheet = ActionSheetController(presentationData: presentationData)
@ -624,6 +625,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme
presentControllerImpl?(actionSheet, nil)
})
})))
}
} else {
items.append(.action(ContextMenuActionItem(text: strings.Theme_Context_ChangeColors, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/ApplyTheme"), color: theme.contextMenu.primaryColor)
}, action: { c, f in
@ -817,7 +819,7 @@ public func themePickerController(context: AccountContext, focusOnItemTag: Theme
presentControllerImpl?(shareController, nil)
})
})))
if cloudThemeExists {
if cloudThemeExists && !cloudTheme.theme.isDefault {
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Appearance_RemoveTheme, textColor: .destructive, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Delete"), color: theme.contextMenu.destructiveColor) }, action: { c, f in
c.dismiss(completion: {
let actionSheet = ActionSheetController(presentationData: presentationData)

View File

@ -19,6 +19,7 @@ import TelegramAnimatedStickerNode
import ShimmerEffect
import StickerResources
private var cachedBorderImages: [String: UIImage] = [:]
private func generateBorderImage(theme: PresentationTheme, bordered: Bool, selected: Bool) -> UIImage? {
let key = "\(theme.list.itemBlocksBackgroundColor.hexString)_\(selected ? "s" + theme.list.itemAccentColor.hexString : theme.list.disclosureArrowColor.hexString)"
@ -78,13 +79,11 @@ private final class ThemeGridThemeItemIconNode : ASDisplayNode {
self.emojiContainerNode = ASDisplayNode()
self.imageNode = TransformImageNode()
self.imageNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: 120.0, height: 150.0))
self.imageNode.isLayerBacked = true
self.imageNode.cornerRadius = 8.0
self.imageNode.clipsToBounds = true
self.overlayNode = ASImageNode()
self.overlayNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: 122.0, height: 152.0))
self.overlayNode.isLayerBacked = true
self.textNode = TextNode()
@ -226,13 +225,13 @@ private final class ThemeGridThemeItemIconNode : ASDisplayNode {
self.textNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((90.0 - textLayout.size.width) / 2.0), y: 83.0), size: textLayout.size)
self.textNode.isHidden = string == nil
self.containerNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: 120.0, height: 150.0))
self.emojiContainerNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: 120.0, height: 150.0))
self.containerNode.frame = CGRect(origin: CGPoint(), size: size)
self.emojiContainerNode.frame = CGRect(origin: CGPoint(), size: size)
let _ = textApply()
let _ = emojiApply()
let imageSize = CGSize(width: 120.0, height: 150.0)
let imageSize = size
self.imageNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: imageSize)
let applyLayout = makeImageLayout(TransformImageArguments(corners: ImageCorners(), imageSize: imageSize, boundingSize: imageSize, intrinsicInsets: UIEdgeInsets(), emptyColor: .clear))
applyLayout()
@ -240,7 +239,7 @@ private final class ThemeGridThemeItemIconNode : ASDisplayNode {
self.overlayNode.frame = self.imageNode.frame.insetBy(dx: -1.0, dy: -1.0)
self.emojiNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 79.0), size: CGSize(width: 90.0, height: 30.0))
let emojiFrame = CGRect(origin: CGPoint(x: 39.0, y: 98.0), size: CGSize(width: 42.0, height: 42.0))
let emojiFrame = CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - 42.0) / 2.0), y: 98.0), size: CGSize(width: 42.0, height: 42.0))
if let file = item.emojiFile, currentItem == nil {
let imageApply = self.emojiImageNode.asyncLayout()(TransformImageArguments(corners: ImageCorners(), imageSize: emojiFrame.size, boundingSize: emojiFrame.size, intrinsicInsets: UIEdgeInsets()))
imageApply()
@ -407,11 +406,28 @@ class ThemeGridThemeItemNode: ListViewItemNode, ItemListItemNode {
let insets: UIEdgeInsets
let separatorHeight = UIScreenPixel
let itemSize = CGSize(width: 120.0, height: 150.0)
let itemSpacing: CGFloat = 7.0
let rows = ceil(CGFloat(item.themes.count) / 3.0)
let minSpacing: CGFloat = 6.0
contentSize = CGSize(width: params.width, height: itemSpacing + rows * (itemSize.height + itemSpacing) + 2.0)
let referenceImageSize: CGSize
let screenWidth = min(params.width, params.availableHeight)
if screenWidth >= 375.0 {
referenceImageSize = CGSize(width: 110.0, height: 150.0)
} else {
referenceImageSize = CGSize(width: 91.0, height: 150.0)
}
let totalWidth = params.width - params.leftInset - params.rightInset
let imageCount = Int((totalWidth - minSpacing) / (referenceImageSize.width + minSpacing))
let itemSize = referenceImageSize.aspectFilled(CGSize(width: floorToScreenPixels((totalWidth - CGFloat(imageCount + 1) * minSpacing) / CGFloat(imageCount)), height: referenceImageSize.height))
let itemSpacing = floorToScreenPixels((totalWidth - CGFloat(imageCount) * itemSize.width) / CGFloat(imageCount + 1))
var spacingOffset: CGFloat = 0.0
if totalWidth - imageCount * itemSize - (imageCount + 1) * itemSpacing == 1.0 {
spacingOffset = UIScreenPixel
}
let rows = ceil(CGFloat(item.themes.count) / CGFloat(imageCount))
contentSize = CGSize(width: params.width, height: minSpacing + rows * (itemSize.height + itemSpacing))
insets = itemListNeighborsGroupedInsets(neighbors)
let layout = ListViewItemNodeLayout(contentSize: contentSize, insets: insets)
@ -496,9 +512,9 @@ class ThemeGridThemeItemNode: ListViewItemNode, ItemListItemNode {
strongSelf.addSubnode(addedItemNode)
}
let col = CGFloat(index % 3)
let row = floor(CGFloat(index) / 3.0)
let itemFrame = CGRect(origin: CGPoint(x: params.leftInset + itemSpacing + 1.0 + (itemSize.width + itemSpacing) * col, y: itemSpacing + 1.0 + (itemSize.height + itemSpacing) * row), size: itemSize)
let col = CGFloat(index % imageCount)
let row = floor(CGFloat(index) / CGFloat(imageCount))
let itemFrame = CGRect(origin: CGPoint(x: params.leftInset + spacingOffset + itemSpacing + (itemSize.width + itemSpacing) * col, y: minSpacing + (itemSize.height + itemSpacing) * row), size: itemSize)
itemNode.frame = itemFrame
index += 1

View File

@ -1628,7 +1628,7 @@ public func themeIconImage(account: Account, accountManager: AccountManager<Tele
if large {
c.saveGState()
c.translateBy(x: -71.0, y: 66.0)
c.translateBy(x: (drawingRect.width - 120) - 71, y: 66.0)
c.translateBy(x: 114.0, y: 32.0)
c.scaleBy(x: 1.0, y: -1.0)
c.translateBy(x: 0.0, y: -32.0)