Animated emojis fixes

This commit is contained in:
Ilya Laktyushin 2019-07-31 01:41:49 +03:00
parent dded7c451a
commit 4c32f661e0
15 changed files with 48 additions and 66 deletions

View File

@ -309,6 +309,26 @@ private extension ChatHistoryLocationInput {
} }
} }
private struct ChatHistoryAnimatedEmojiConfiguration {
static var defaultValue: ChatHistoryAnimatedEmojiConfiguration {
return ChatHistoryAnimatedEmojiConfiguration(scale: 0.625)
}
public let scale: CGFloat
fileprivate init(scale: CGFloat) {
self.scale = scale
}
static func with(appConfiguration: AppConfiguration) -> ChatHistoryAnimatedEmojiConfiguration {
if let data = appConfiguration.data, let scale = data["emojies_animated_zoom"] as? Double {
return ChatHistoryAnimatedEmojiConfiguration(scale: CGFloat(scale))
} else {
return .defaultValue
}
}
}
public final class ChatHistoryListNode: ListView, ChatHistoryNode { public final class ChatHistoryListNode: ListView, ChatHistoryNode {
private let context: AccountContext private let context: AccountContext
private let chatLocation: ChatLocation private let chatLocation: ChatLocation
@ -395,7 +415,7 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
return self.isInteractivelyScrollingPromise.get() return self.isInteractivelyScrollingPromise.get()
} }
private var currentPresentationData: PresentationData private var currentPresentationData: ChatPresentationData
private var chatPresentationDataPromise: Promise<ChatPresentationData> private var chatPresentationDataPromise: Promise<ChatPresentationData>
private var presentationDataDisposable: Disposable? private var presentationDataDisposable: Disposable?
@ -428,9 +448,10 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
self.controllerInteraction = controllerInteraction self.controllerInteraction = controllerInteraction
self.mode = mode self.mode = mode
self.currentPresentationData = context.sharedContext.currentPresentationData.with { $0 } let presentationData = context.sharedContext.currentPresentationData.with { $0 }
self.currentPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper), fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: presentationData.disableAnimations, largeEmoji: presentationData.largeEmoji, animatedEmojiScale: 1.0)
self.chatPresentationDataPromise = Promise(ChatPresentationData(theme: ChatPresentationThemeData(theme: self.currentPresentationData.theme, wallpaper: self.currentPresentationData.chatWallpaper), fontSize: self.currentPresentationData.fontSize, strings: self.currentPresentationData.strings, dateTimeFormat: self.currentPresentationData.dateTimeFormat, nameDisplayOrder: self.currentPresentationData.nameDisplayOrder, disableAnimations: self.currentPresentationData.disableAnimations, largeEmoji: self.currentPresentationData.largeEmoji)) self.chatPresentationDataPromise = Promise(self.currentPresentationData)
self.prefetchManager = InChatPrefetchManager(context: context) self.prefetchManager = InChatPrefetchManager(context: context)
@ -735,20 +756,28 @@ public final class ChatHistoryListNode: ListView, ChatHistoryNode {
} }
} }
self.presentationDataDisposable = (context.sharedContext.presentationData let appConfiguration = context.account.postbox.preferencesView(keys: [PreferencesKeys.appConfiguration])
|> deliverOnMainQueue).start(next: { [weak self] presentationData in |> take(1)
|> map { view in
return view.values[PreferencesKeys.appConfiguration] as? AppConfiguration ?? .defaultValue
}
self.presentationDataDisposable = (combineLatest(context.sharedContext.presentationData, appConfiguration)
|> deliverOnMainQueue).start(next: { [weak self] presentationData, appConfiguration in
if let strongSelf = self { if let strongSelf = self {
let previousTheme = strongSelf.currentPresentationData.theme let previousTheme = strongSelf.currentPresentationData.theme
let previousStrings = strongSelf.currentPresentationData.strings let previousStrings = strongSelf.currentPresentationData.strings
let previousWallpaper = strongSelf.currentPresentationData.chatWallpaper let previousWallpaper = strongSelf.currentPresentationData.theme.wallpaper
let previousDisableAnimations = strongSelf.currentPresentationData.disableAnimations let previousDisableAnimations = strongSelf.currentPresentationData.disableAnimations
let previousAnimatedEmojiScale = strongSelf.currentPresentationData.animatedEmojiScale
strongSelf.currentPresentationData = presentationData let animatedEmojiConfig = ChatHistoryAnimatedEmojiConfiguration.with(appConfiguration: appConfiguration)
if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings || previousWallpaper != presentationData.chatWallpaper || previousDisableAnimations != presentationData.disableAnimations { if previousTheme !== presentationData.theme || previousStrings !== presentationData.strings || previousWallpaper != presentationData.chatWallpaper || previousDisableAnimations != presentationData.disableAnimations || previousAnimatedEmojiScale != animatedEmojiConfig.scale {
let themeData = ChatPresentationThemeData(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper) let themeData = ChatPresentationThemeData(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper)
let chatPresentationData = ChatPresentationData(theme: themeData, fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: presentationData.disableAnimations, largeEmoji: presentationData.largeEmoji) let chatPresentationData = ChatPresentationData(theme: themeData, fontSize: presentationData.fontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: presentationData.disableAnimations, largeEmoji: presentationData.largeEmoji, animatedEmojiScale: animatedEmojiConfig.scale)
strongSelf.currentPresentationData = chatPresentationData
strongSelf.dynamicBounceEnabled = !presentationData.disableAnimations strongSelf.dynamicBounceEnabled = !presentationData.disableAnimations
strongSelf.forEachItemHeaderNode { itemHeaderNode in strongSelf.forEachItemHeaderNode { itemHeaderNode in

View File

@ -162,6 +162,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
var file: TelegramMediaFile? var file: TelegramMediaFile?
var playbackMode: AnimatedStickerPlaybackMode = .loop var playbackMode: AnimatedStickerPlaybackMode = .loop
var isEmoji = false
if let telegramFile = self.telegramFile { if let telegramFile = self.telegramFile {
file = telegramFile file = telegramFile
@ -169,6 +170,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
playbackMode = .once playbackMode = .once
} }
} else if let emojiFile = self.emojiFile { } else if let emojiFile = self.emojiFile {
isEmoji = true
file = emojiFile file = emojiFile
if item.context.sharedContext.immediateExperimentalUISettings.playAnimatedEmojiOnce { if item.context.sharedContext.immediateExperimentalUISettings.playAnimatedEmojiOnce {
playbackMode = .once playbackMode = .once
@ -177,7 +179,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
if let file = file { if let file = file {
let dimensions = file.dimensions ?? CGSize(width: 512.0, height: 512.0) let dimensions = file.dimensions ?? CGSize(width: 512.0, height: 512.0)
let fittedSize = dimensions.aspectFitted(CGSize(width: 384.0, height: 384.0)) let fittedSize = isEmoji ? dimensions.aspectFilled(CGSize(width: 384.0, height: 384.0)) : dimensions.aspectFitted(CGSize(width: 384.0, height: 384.0))
self.animationNode.setup(account: item.context.account, resource: file.resource, width: Int(fittedSize.width), height: Int(fittedSize.height), playbackMode: playbackMode, mode: .cached) self.animationNode.setup(account: item.context.account, resource: file.resource, width: Int(fittedSize.width), height: Int(fittedSize.height), playbackMode: playbackMode, mode: .cached)
} }
} }
@ -216,9 +218,9 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
} else if let emojiFile = emojiFile { } else if let emojiFile = emojiFile {
isEmoji = true isEmoji = true
let displaySize = CGSize(width: floor(displaySize.width * 350.0 / 512.0), height: floor(displaySize.height * 350.0 / 512.0)) let displaySize = CGSize(width: floor(displaySize.width * item.presentationData.animatedEmojiScale), height: floor(displaySize.height * item.presentationData.animatedEmojiScale))
if let dimensions = emojiFile.dimensions { if let dimensions = emojiFile.dimensions {
imageSize = dimensions.aspectFitted(displaySize) imageSize = dimensions.aspectFilled(displaySize)
} else if let thumbnailSize = emojiFile.previewRepresentations.first?.dimensions { } else if let thumbnailSize = emojiFile.previewRepresentations.first?.dimensions {
imageSize = thumbnailSize.aspectFitted(displaySize) imageSize = thumbnailSize.aspectFitted(displaySize)
} }

View File

@ -86,7 +86,9 @@ public final class ChatPresentationData {
let messageFixedFont: UIFont let messageFixedFont: UIFont
let messageBlockQuoteFont: UIFont let messageBlockQuoteFont: UIFont
init(theme: ChatPresentationThemeData, fontSize: PresentationFontSize, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool, largeEmoji: Bool) { let animatedEmojiScale: CGFloat
init(theme: ChatPresentationThemeData, fontSize: PresentationFontSize, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool, largeEmoji: Bool, animatedEmojiScale: CGFloat = 1.0) {
self.theme = theme self.theme = theme
self.fontSize = fontSize self.fontSize = fontSize
self.strings = strings self.strings = strings
@ -105,5 +107,7 @@ public final class ChatPresentationData {
self.messageBoldItalicFont = Font.semiboldItalic(baseFontSize) self.messageBoldItalicFont = Font.semiboldItalic(baseFontSize)
self.messageFixedFont = UIFont(name: "Menlo-Regular", size: baseFontSize - 1.0) ?? UIFont.systemFont(ofSize: baseFontSize) self.messageFixedFont = UIFont(name: "Menlo-Regular", size: baseFontSize - 1.0) ?? UIFont.systemFont(ofSize: baseFontSize)
self.messageBlockQuoteFont = UIFont.systemFont(ofSize: baseFontSize - 1.0) self.messageBlockQuoteFont = UIFont.systemFont(ofSize: baseFontSize - 1.0)
self.animatedEmojiScale = animatedEmojiScale
} }
} }

View File

@ -34,17 +34,6 @@
091BEAB3214552D9003AEA30 /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02DADBE2138D76F00116225 /* Vision.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; 091BEAB3214552D9003AEA30 /* Vision.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D02DADBE2138D76F00116225 /* Vision.framework */; settings = {ATTRIBUTES = (Weak, ); }; };
0921F60B228C8765001A13D7 /* ItemListPlaceholderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F60A228C8765001A13D7 /* ItemListPlaceholderItem.swift */; }; 0921F60B228C8765001A13D7 /* ItemListPlaceholderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F60A228C8765001A13D7 /* ItemListPlaceholderItem.swift */; };
0921F60E228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F60D228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift */; }; 0921F60E228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0921F60D228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift */; };
0925902C22EF8158003D6283 /* thumbs_up_5.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 0925902622EF8157003D6283 /* thumbs_up_5.tgs */; };
0925902D22EF8158003D6283 /* thumbs_up_6.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 0925902722EF8158003D6283 /* thumbs_up_6.tgs */; };
0925902E22EF8158003D6283 /* thumbs_up_3.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 0925902822EF8158003D6283 /* thumbs_up_3.tgs */; };
0925902F22EF8158003D6283 /* thumbs_up_1.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 0925902922EF8158003D6283 /* thumbs_up_1.tgs */; };
0925903022EF8158003D6283 /* thumbs_up_2.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 0925902A22EF8158003D6283 /* thumbs_up_2.tgs */; };
0925903122EF8158003D6283 /* thumbs_up_4.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 0925902B22EF8158003D6283 /* thumbs_up_4.tgs */; };
092A65DB22EF16900032E20C /* lol.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 092A65D522EF16900032E20C /* lol.tgs */; };
092A65DD22EF16900032E20C /* meh.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 092A65D722EF16900032E20C /* meh.tgs */; };
092A65DE22EF16900032E20C /* confused.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 092A65D822EF16900032E20C /* confused.tgs */; };
092A65DF22EF16900032E20C /* celeb.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 092A65D922EF16900032E20C /* celeb.tgs */; };
092A65E022EF16900032E20C /* heart.tgs in Resources */ = {isa = PBXBuildFile; fileRef = 092A65DA22EF16900032E20C /* heart.tgs */; };
092F368D2154AAEA001A9F49 /* SFCompactRounded-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */; }; 092F368D2154AAEA001A9F49 /* SFCompactRounded-Semibold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */; };
092F36902157AB46001A9F49 /* ItemListCallListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 092F368F2157AB46001A9F49 /* ItemListCallListItem.swift */; }; 092F36902157AB46001A9F49 /* ItemListCallListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 092F368F2157AB46001A9F49 /* ItemListCallListItem.swift */; };
09310D32213ED5FC0020033A /* anim_ungroup.json in Resources */ = {isa = PBXBuildFile; fileRef = 09310D1A213BC5DE0020033A /* anim_ungroup.json */; }; 09310D32213ED5FC0020033A /* anim_ungroup.json in Resources */ = {isa = PBXBuildFile; fileRef = 09310D1A213BC5DE0020033A /* anim_ungroup.json */; };
@ -1277,17 +1266,6 @@
091954782294754E00E11046 /* AnimatedStickerUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedStickerUtils.swift; sourceTree = "<group>"; }; 091954782294754E00E11046 /* AnimatedStickerUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedStickerUtils.swift; sourceTree = "<group>"; };
0921F60A228C8765001A13D7 /* ItemListPlaceholderItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListPlaceholderItem.swift; sourceTree = "<group>"; }; 0921F60A228C8765001A13D7 /* ItemListPlaceholderItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListPlaceholderItem.swift; sourceTree = "<group>"; };
0921F60D228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionUrlAuthController.swift; sourceTree = "<group>"; }; 0921F60D228EE000001A13D7 /* ChatMessageActionUrlAuthController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageActionUrlAuthController.swift; sourceTree = "<group>"; };
0925902622EF8157003D6283 /* thumbs_up_5.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = thumbs_up_5.tgs; sourceTree = "<group>"; };
0925902722EF8158003D6283 /* thumbs_up_6.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = thumbs_up_6.tgs; sourceTree = "<group>"; };
0925902822EF8158003D6283 /* thumbs_up_3.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = thumbs_up_3.tgs; sourceTree = "<group>"; };
0925902922EF8158003D6283 /* thumbs_up_1.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = thumbs_up_1.tgs; sourceTree = "<group>"; };
0925902A22EF8158003D6283 /* thumbs_up_2.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = thumbs_up_2.tgs; sourceTree = "<group>"; };
0925902B22EF8158003D6283 /* thumbs_up_4.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = thumbs_up_4.tgs; sourceTree = "<group>"; };
092A65D522EF16900032E20C /* lol.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = lol.tgs; sourceTree = "<group>"; };
092A65D722EF16900032E20C /* meh.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = meh.tgs; sourceTree = "<group>"; };
092A65D822EF16900032E20C /* confused.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = confused.tgs; sourceTree = "<group>"; };
092A65D922EF16900032E20C /* celeb.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = celeb.tgs; sourceTree = "<group>"; };
092A65DA22EF16900032E20C /* heart.tgs */ = {isa = PBXFileReference; lastKnownFileType = file; path = heart.tgs; sourceTree = "<group>"; };
092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFCompactRounded-Semibold.otf"; sourceTree = "<group>"; }; 092F368C2154AAE9001A9F49 /* SFCompactRounded-Semibold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SFCompactRounded-Semibold.otf"; sourceTree = "<group>"; };
092F368F2157AB46001A9F49 /* ItemListCallListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListCallListItem.swift; sourceTree = "<group>"; }; 092F368F2157AB46001A9F49 /* ItemListCallListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListCallListItem.swift; sourceTree = "<group>"; };
09310D1A213BC5DE0020033A /* anim_ungroup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_ungroup.json; sourceTree = "<group>"; }; 09310D1A213BC5DE0020033A /* anim_ungroup.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = anim_ungroup.json; sourceTree = "<group>"; };
@ -2611,25 +2589,6 @@
name = "Animated Stickers"; name = "Animated Stickers";
sourceTree = "<group>"; sourceTree = "<group>";
}; };
092A65D422EF16900032E20C /* Emoji */ = {
isa = PBXGroup;
children = (
0925902922EF8158003D6283 /* thumbs_up_1.tgs */,
0925902A22EF8158003D6283 /* thumbs_up_2.tgs */,
0925902822EF8158003D6283 /* thumbs_up_3.tgs */,
0925902B22EF8158003D6283 /* thumbs_up_4.tgs */,
0925902622EF8157003D6283 /* thumbs_up_5.tgs */,
0925902722EF8158003D6283 /* thumbs_up_6.tgs */,
092A65D522EF16900032E20C /* lol.tgs */,
092A65D722EF16900032E20C /* meh.tgs */,
092A65D822EF16900032E20C /* confused.tgs */,
092A65D922EF16900032E20C /* celeb.tgs */,
092A65DA22EF16900032E20C /* heart.tgs */,
);
name = Emoji;
path = TelegramUI/Resources/Emoji;
sourceTree = "<group>";
};
092F368B2154AAD6001A9F49 /* Fonts */ = { 092F368B2154AAD6001A9F49 /* Fonts */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -3284,7 +3243,6 @@
D0471B521EFD8EBC0074D609 /* Resources */ = { D0471B521EFD8EBC0074D609 /* Resources */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
092A65D422EF16900032E20C /* Emoji */,
09E2D9ED226F1AF300EA0AA4 /* Emoji.mapping */, 09E2D9ED226F1AF300EA0AA4 /* Emoji.mapping */,
D0955FB32191278C00F89427 /* PresentationStrings.mapping */, D0955FB32191278C00F89427 /* PresentationStrings.mapping */,
09310D13213BC5DE0020033A /* Animations */, 09310D13213BC5DE0020033A /* Animations */,
@ -5312,12 +5270,10 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
09874E4F21078FA100E190B8 /* Generic.html in Resources */, 09874E4F21078FA100E190B8 /* Generic.html in Resources */,
092A65E022EF16900032E20C /* heart.tgs in Resources */,
09874E5021078FA100E190B8 /* GenericUserScript.js in Resources */, 09874E5021078FA100E190B8 /* GenericUserScript.js in Resources */,
09874E5121078FA100E190B8 /* Instagram.html in Resources */, 09874E5121078FA100E190B8 /* Instagram.html in Resources */,
09874E5221078FA100E190B8 /* Twitch.html in Resources */, 09874E5221078FA100E190B8 /* Twitch.html in Resources */,
09874E5321078FA100E190B8 /* TwitchUserScript.js in Resources */, 09874E5321078FA100E190B8 /* TwitchUserScript.js in Resources */,
0925902F22EF8158003D6283 /* thumbs_up_1.tgs in Resources */,
094735122275D72100EA2312 /* anim_mute.json in Resources */, 094735122275D72100EA2312 /* anim_mute.json in Resources */,
09874E5421078FA100E190B8 /* Vimeo.html in Resources */, 09874E5421078FA100E190B8 /* Vimeo.html in Resources */,
09874E5521078FA100E190B8 /* VimeoUserScript.js in Resources */, 09874E5521078FA100E190B8 /* VimeoUserScript.js in Resources */,
@ -5329,7 +5285,6 @@
D0EB42051F3143AB00838FE6 /* LegacyComponentsResources.bundle in Resources */, D0EB42051F3143AB00838FE6 /* LegacyComponentsResources.bundle in Resources */,
D0E9BAA21F056F4C00F079A4 /* stp_card_discover@3x.png in Resources */, D0E9BAA21F056F4C00F079A4 /* stp_card_discover@3x.png in Resources */,
D0E9BAB01F056F4C00F079A4 /* stp_card_mastercard@3x.png in Resources */, D0E9BAB01F056F4C00F079A4 /* stp_card_mastercard@3x.png in Resources */,
092A65DF22EF16900032E20C /* celeb.tgs in Resources */,
09310D32213ED5FC0020033A /* anim_ungroup.json in Resources */, 09310D32213ED5FC0020033A /* anim_ungroup.json in Resources */,
09E2D9EF226F1AFA00EA0AA4 /* Emoji.mapping in Resources */, 09E2D9EF226F1AFA00EA0AA4 /* Emoji.mapping in Resources */,
D0955FB521912B6000F89427 /* PresentationStrings.mapping in Resources */, D0955FB521912B6000F89427 /* PresentationStrings.mapping in Resources */,
@ -5352,16 +5307,13 @@
D0F972101FFE4BD5002595C8 /* MessageSent.caf in Resources */, D0F972101FFE4BD5002595C8 /* MessageSent.caf in Resources */,
D0E9BAB71F056F4C00F079A4 /* stp_card_visa_template@2x.png in Resources */, D0E9BAB71F056F4C00F079A4 /* stp_card_visa_template@2x.png in Resources */,
D0E9BA951F056F4C00F079A4 /* stp_card_applepay@2x.png in Resources */, D0E9BA951F056F4C00F079A4 /* stp_card_applepay@2x.png in Resources */,
092A65DB22EF16900032E20C /* lol.tgs in Resources */,
D0E9BAA01F056F4C00F079A4 /* stp_card_diners_template@3x.png in Resources */, D0E9BAA01F056F4C00F079A4 /* stp_card_diners_template@3x.png in Resources */,
094735132275D72100EA2312 /* anim_delete.json in Resources */, 094735132275D72100EA2312 /* anim_delete.json in Resources */,
094735192277483C00EA2312 /* anim_infotip.json in Resources */, 094735192277483C00EA2312 /* anim_infotip.json in Resources */,
094735142275D72100EA2312 /* anim_unarchive.json in Resources */, 094735142275D72100EA2312 /* anim_unarchive.json in Resources */,
D0E9BAAA1F056F4C00F079A4 /* stp_card_form_front@3x.png in Resources */, D0E9BAAA1F056F4C00F079A4 /* stp_card_form_front@3x.png in Resources */,
D0E9BA971F056F4C00F079A4 /* stp_card_applepay_template@2x.png in Resources */, D0E9BA971F056F4C00F079A4 /* stp_card_applepay_template@2x.png in Resources */,
092A65DD22EF16900032E20C /* meh.tgs in Resources */,
D0E9BAB41F056F4C00F079A4 /* stp_card_placeholder_template@3x.png in Resources */, D0E9BAB41F056F4C00F079A4 /* stp_card_placeholder_template@3x.png in Resources */,
0925903022EF8158003D6283 /* thumbs_up_2.tgs in Resources */,
D0E9BAA71F056F4C00F079A4 /* stp_card_form_back@2x.png in Resources */, D0E9BAA71F056F4C00F079A4 /* stp_card_form_back@2x.png in Resources */,
D0E9BAB11F056F4C00F079A4 /* stp_card_mastercard_template@2x.png in Resources */, D0E9BAB11F056F4C00F079A4 /* stp_card_mastercard_template@2x.png in Resources */,
D0E9BA9D1F056F4C00F079A4 /* stp_card_diners@2x.png in Resources */, D0E9BA9D1F056F4C00F079A4 /* stp_card_diners@2x.png in Resources */,
@ -5370,17 +5322,13 @@
D0E9BAAC1F056F4C00F079A4 /* stp_card_jcb@3x.png in Resources */, D0E9BAAC1F056F4C00F079A4 /* stp_card_jcb@3x.png in Resources */,
D0E9BA911F056F4C00F079A4 /* stp_card_amex@2x.png in Resources */, D0E9BA911F056F4C00F079A4 /* stp_card_amex@2x.png in Resources */,
D0E9BA931F056F4C00F079A4 /* stp_card_amex_template@2x.png in Resources */, D0E9BA931F056F4C00F079A4 /* stp_card_amex_template@2x.png in Resources */,
0925903122EF8158003D6283 /* thumbs_up_4.tgs in Resources */,
D0E9BAA91F056F4C00F079A4 /* stp_card_form_front@2x.png in Resources */, D0E9BAA91F056F4C00F079A4 /* stp_card_form_front@2x.png in Resources */,
D0E9BAA41F056F4C00F079A4 /* stp_card_discover_template@3x.png in Resources */, D0E9BAA41F056F4C00F079A4 /* stp_card_discover_template@3x.png in Resources */,
D0E9BAA81F056F4C00F079A4 /* stp_card_form_back@3x.png in Resources */, D0E9BAA81F056F4C00F079A4 /* stp_card_form_back@3x.png in Resources */,
092A65DE22EF16900032E20C /* confused.tgs in Resources */,
D0E9BAA11F056F4C00F079A4 /* stp_card_discover@2x.png in Resources */, D0E9BAA11F056F4C00F079A4 /* stp_card_discover@2x.png in Resources */,
D0E9B9EA1F00853C00F079A4 /* PhoneCountries.txt in Resources */, D0E9B9EA1F00853C00F079A4 /* PhoneCountries.txt in Resources */,
094735152275D72100EA2312 /* anim_unpin.json in Resources */, 094735152275D72100EA2312 /* anim_unpin.json in Resources */,
D0E9BAB31F056F4C00F079A4 /* stp_card_placeholder_template@2x.png in Resources */, D0E9BAB31F056F4C00F079A4 /* stp_card_placeholder_template@2x.png in Resources */,
0925902E22EF8158003D6283 /* thumbs_up_3.tgs in Resources */,
0925902D22EF8158003D6283 /* thumbs_up_6.tgs in Resources */,
D0E9BAAE1F056F4C00F079A4 /* stp_card_jcb_template@3x.png in Resources */, D0E9BAAE1F056F4C00F079A4 /* stp_card_jcb_template@3x.png in Resources */,
D0E9BAAB1F056F4C00F079A4 /* stp_card_jcb@2x.png in Resources */, D0E9BAAB1F056F4C00F079A4 /* stp_card_jcb@2x.png in Resources */,
09E2DA132273367900EA0AA4 /* anim_archiveAvatar.json in Resources */, 09E2DA132273367900EA0AA4 /* anim_archiveAvatar.json in Resources */,
@ -5391,7 +5339,6 @@
D0E9BAB21F056F4C00F079A4 /* stp_card_mastercard_template@3x.png in Resources */, D0E9BAB21F056F4C00F079A4 /* stp_card_mastercard_template@3x.png in Resources */,
D0E9BA981F056F4C00F079A4 /* stp_card_applepay_template@3x.png in Resources */, D0E9BA981F056F4C00F079A4 /* stp_card_applepay_template@3x.png in Resources */,
D0E9BAA51F056F4C00F079A4 /* stp_card_form_applepay@2x.png in Resources */, D0E9BAA51F056F4C00F079A4 /* stp_card_form_applepay@2x.png in Resources */,
0925902C22EF8158003D6283 /* thumbs_up_5.tgs in Resources */,
D0E9BAB81F056F4C00F079A4 /* stp_card_visa_template@3x.png in Resources */, D0E9BAB81F056F4C00F079A4 /* stp_card_visa_template@3x.png in Resources */,
D0AF797822C2E26500CECCB8 /* meson.build in Resources */, D0AF797822C2E26500CECCB8 /* meson.build in Resources */,
D0E9BA9B1F056F4C00F079A4 /* stp_card_cvc_amex@2x.png in Resources */, D0E9BA9B1F056F4C00F079A4 /* stp_card_cvc_amex@2x.png in Resources */,