diff --git a/BUCK b/BUCK
index d0d297e321..3d6afcc743 100644
--- a/BUCK
+++ b/BUCK
@@ -432,6 +432,14 @@ apple_resource(
visibility = ["PUBLIC"],
)
+apple_resource(
+ name = "WatchAppExtensionResources",
+ files = glob([
+ "Watch/Extension/Resources/**/*",
+ ], exclude = ["Watch/Extension/Resources/**/.*"]),
+ visibility = ["PUBLIC"],
+)
+
apple_binary(
name = "WatchAppExtensionBinary",
srcs = glob([
@@ -467,6 +475,7 @@ apple_binary(
],
deps = [
":WatchAppStringResources",
+ ":WatchAppExtensionResources",
],
)
diff --git a/Telegram-iOS/en.lproj/Localizable.strings b/Telegram-iOS/en.lproj/Localizable.strings
index 84da7980b4..e536702253 100644
--- a/Telegram-iOS/en.lproj/Localizable.strings
+++ b/Telegram-iOS/en.lproj/Localizable.strings
@@ -5090,3 +5090,6 @@ Any member of this group will be able to see messages in the channel.";
"ChatList.DeletedChats_any" = "Deleted %@ chats";
"Appearance.ColorThemeNight" = "COLOR THEME — AUTO-NIGHT MODE";
+
+"UserInfo.StartSecretChatConfirmation" = "Are you sure you want to start a secret chat with\n%@?";
+"UserInfo.StartSecretChatStart" = "Start";
diff --git a/Watch/Bridge/TGBridgeMediaSignals.m b/Watch/Bridge/TGBridgeMediaSignals.m
index 2952737d0a..295e13ce61 100644
--- a/Watch/Bridge/TGBridgeMediaSignals.m
+++ b/Watch/Bridge/TGBridgeMediaSignals.m
@@ -131,21 +131,14 @@
+ (SSignal *)_requestImageWithUrl:(NSString *)url subscription:(TGBridgeSubscription *)subscription
{
- SSignal *remoteSignal = [[[[[TGBridgeClient instance] requestSignalWithSubscription:subscription] onStart:^
- {
+ SSignal *remoteSignal = [[[[TGBridgeClient instance] requestSignalWithSubscription:subscription] onStart:^
+ {
if (![[self mediaManager] hasUrl:url])
[[self mediaManager] addUrl:url];
- }] onDispose:^
+ }] then:[[self _downloadedFileWithUrl:url] onNext:^(id next)
{
[[self mediaManager] removeUrl:url];
- }] mapToSignal:^SSignal *(id next)
- {
- return [[self _downloadedFileWithUrl:url] onNext:^(id next)
- {
- [[self mediaManager] removeUrl:url];
- }];
- }];
-
+ }]];
return [[self _cachedOrPendingWithUrl:url] catch:^SSignal *(id error)
{
return remoteSignal;
diff --git a/submodules/AppIntents/BUCK b/submodules/AppIntents/BUCK
new file mode 100644
index 0000000000..2bc4100875
--- /dev/null
+++ b/submodules/AppIntents/BUCK
@@ -0,0 +1,23 @@
+load("//Config:buck_rule_macros.bzl", "static_library")
+
+static_library(
+ name = "AppIntents",
+ srcs = glob([
+ "Sources/**/*.swift",
+ ]),
+ deps = [
+ "//submodules/TelegramCore:TelegramCore#shared",
+ "//submodules/SyncCore:SyncCore#shared",
+ "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit#shared",
+ "//submodules/Display:Display#shared",
+ "//submodules/AccountContext:AccountContext",
+ "//submodules/TelegramPresentationData:TelegramPresentationData",
+ "//submodules/AvatarNode:AvatarNode",
+ ],
+ frameworks = [
+ "$SDKROOT/System/Library/Frameworks/Foundation.framework",
+ ],
+ weak_frameworks = [
+ "Intents",
+ ],
+)
diff --git a/submodules/AppIntents/Info.plist b/submodules/AppIntents/Info.plist
new file mode 100644
index 0000000000..e1fe4cfb7b
--- /dev/null
+++ b/submodules/AppIntents/Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+
+
diff --git a/submodules/AppIntents/Sources/AppIntents.swift b/submodules/AppIntents/Sources/AppIntents.swift
new file mode 100644
index 0000000000..676d2373cc
--- /dev/null
+++ b/submodules/AppIntents/Sources/AppIntents.swift
@@ -0,0 +1,67 @@
+import Foundation
+import UIKit
+import Intents
+import Display
+import Postbox
+import TelegramCore
+import SyncCore
+import SwiftSignalKit
+import TelegramPresentationData
+import AvatarNode
+import AccountContext
+
+public func donateSendMessageIntent(account: Account, sharedContext: SharedAccountContext, peerIds: [PeerId]) {
+ if #available(iOSApplicationExtension 13.2, iOS 13.2, *) {
+ let _ = (account.postbox.transaction { transaction -> [Peer] in
+ var peers: [Peer] = []
+ for peerId in peerIds {
+ if peerId.namespace == Namespaces.Peer.CloudUser && peerId != account.peerId, let peer = transaction.getPeer(peerId) {
+ peers.append(peer)
+ }
+ }
+ return peers
+ }
+ |> mapToSignal { peers -> Signal<[(Peer, UIImage?)], NoError> in
+ var signals: [Signal<(Peer, UIImage?), NoError>] = []
+ for peer in peers {
+ let peerAndAvatar = (peerAvatarImage(account: account, peer: peer, authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil))
+ |> map { avatarImage in
+ return (peer, avatarImage)
+ }
+ signals.append(peerAndAvatar)
+ }
+ return combineLatest(signals)
+ }
+ |> deliverOnMainQueue).start(next: { peers in
+ for (peer, avatarImage) in peers {
+ guard let peer = peer as? TelegramUser, peer.botInfo == nil && !peer.flags.contains(.isSupport) else {
+ continue
+ }
+ let presentationData = sharedContext.currentPresentationData.with { $0 }
+
+ let recipientHandle = INPersonHandle(value: "tg\(peer.id.id)", type: .unknown)
+ var nameComponents = PersonNameComponents()
+ nameComponents.givenName = peer.firstName
+ nameComponents.familyName = peer.lastName
+
+ let displayTitle = peer.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder)
+ let recipient = INPerson(personHandle: recipientHandle, nameComponents: nameComponents, displayName: displayTitle, image: nil, contactIdentifier: nil, customIdentifier: "tg\(peer.id.id)")
+
+ let intent = INSendMessageIntent(recipients: [recipient], content: nil, speakableGroupName: INSpeakableString(spokenPhrase: displayTitle), conversationIdentifier: "tg\(peer.id.id)", serviceName: nil, sender: nil)
+ if let avatarImage = avatarImage, let avatarImageData = avatarImage.jpegData(compressionQuality: 0.8) {
+ intent.setImage(INImage(imageData: avatarImageData), forParameterNamed: \.groupName)
+ }
+ let interaction = INInteraction(intent: intent, response: nil)
+ interaction.direction = .outgoing
+ interaction.groupIdentifier = "sendMessage_\(account.peerId.toInt64())"
+ interaction.donate()
+ }
+ })
+ }
+}
+
+public func deleteAllSendMessageIntents(accountPeerId: PeerId) {
+ if #available(iOS 10.0, *) {
+ INInteraction.delete(with: "sendMessage_\(accountPeerId.toInt64())")
+ }
+}
diff --git a/submodules/PeerInfoUI/Sources/UserInfoController.swift b/submodules/PeerInfoUI/Sources/UserInfoController.swift
index b22a81dbd2..8497888085 100644
--- a/submodules/PeerInfoUI/Sources/UserInfoController.swift
+++ b/submodules/PeerInfoUI/Sources/UserInfoController.swift
@@ -1362,6 +1362,7 @@ public func userInfoController(context: AccountContext, peerId: PeerId, mode: Pe
}
startSecretChatImpl = { [weak controller] in
let _ = (context.account.postbox.transaction { transaction -> (Peer?, PeerId?) in
+ let peer = transaction.getPeer(peerId)
let filteredPeerIds = Array(transaction.getAssociatedPeerIds(peerId)).filter { $0.namespace == Namespaces.Peer.SecretChat }
var activeIndices: [ChatListIndex] = []
for associatedId in filteredPeerIds {
@@ -1377,65 +1378,58 @@ public func userInfoController(context: AccountContext, peerId: PeerId, mode: Pe
}
}
activeIndices.sort()
-
- let peer = transaction.getPeer(peerId)
-
if let index = activeIndices.last {
return (peer, index.messageIndex.id.peerId)
} else {
return (peer, nil)
}
- }
- |> deliverOnMainQueue).start(next: { peer, currentPeerId in
+ } |> deliverOnMainQueue).start(next: { peer, currentPeerId in
if let currentPeerId = currentPeerId {
if let navigationController = (controller?.navigationController as? NavigationController) {
context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(currentPeerId)))
}
- } else if let peer = peer as? TelegramUser {
+ } else if let controller = controller {
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
- presentControllerImpl?(textAlertController(context: context, title: nil, text: presentationData.strings.UserInfo_StartSecretChatConfirmation(peer.compactDisplayTitle).0, actions: [
- TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: {}),
- TextAlertAction(type: .defaultAction, title: presentationData.strings.UserInfo_StartSecretChatStart, action: {
- var createSignal = createSecretChat(account: context.account, peerId: peerId)
- var cancelImpl: (() -> Void)?
- let progressSignal = Signal { subscriber in
- let presentationData = context.sharedContext.currentPresentationData.with { $0 }
- let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: {
- cancelImpl?()
- }))
- presentControllerImpl?(controller, nil)
- return ActionDisposable { [weak controller] in
- Queue.mainQueue().async() {
- controller?.dismiss()
- }
- }
- }
- |> runOn(Queue.mainQueue())
- |> delay(0.15, queue: Queue.mainQueue())
- let progressDisposable = progressSignal.start()
-
- createSignal = createSignal
- |> afterDisposed {
- Queue.mainQueue().async {
- progressDisposable.dispose()
- }
- }
- cancelImpl = {
- createSecretChatDisposable.set(nil)
- }
-
- createSecretChatDisposable.set((createSignal |> deliverOnMainQueue).start(next: { peerId in
- if let navigationController = (controller?.navigationController as? NavigationController) {
- context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))
- }
- }, error: { _ in
- if let controller = controller {
- let presentationData = context.sharedContext.currentPresentationData.with { $0 }
- controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root))
- }
+ let displayTitle = peer?.displayTitle(strings: presentationData.strings, displayOrder: presentationData.nameDisplayOrder) ?? ""
+ controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.UserInfo_StartSecretChatConfirmation(displayTitle).0, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .defaultAction, title: presentationData.strings.UserInfo_StartSecretChatStart, action: {
+ var createSignal = createSecretChat(account: context.account, peerId: peerId)
+ var cancelImpl: (() -> Void)?
+ let progressSignal = Signal { subscriber in
+ let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: {
+ cancelImpl?()
}))
- })
- ]), nil)
+ presentControllerImpl?(controller, nil)
+ return ActionDisposable { [weak controller] in
+ Queue.mainQueue().async() {
+ controller?.dismiss()
+ }
+ }
+ }
+ |> runOn(Queue.mainQueue())
+ |> delay(0.15, queue: Queue.mainQueue())
+ let progressDisposable = progressSignal.start()
+
+ createSignal = createSignal
+ |> afterDisposed {
+ Queue.mainQueue().async {
+ progressDisposable.dispose()
+ }
+ }
+ cancelImpl = {
+ createSecretChatDisposable.set(nil)
+ }
+
+ createSecretChatDisposable.set((createSignal |> deliverOnMainQueue).start(next: { [weak controller] peerId in
+ if let navigationController = (controller?.navigationController as? NavigationController) {
+ context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: context, chatLocation: .peer(peerId)))
+ }
+ }, error: { [weak controller] _ in
+ if let controller = controller {
+ let presentationData = context.sharedContext.currentPresentationData.with { $0 }
+ controller.present(textAlertController(context: context, title: nil, text: presentationData.strings.Login_UnknownError, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root))
+ }
+ }))
+ })]), in: .window(.root))
}
})
}
diff --git a/submodules/ShareController/BUCK b/submodules/ShareController/BUCK
index e67eab7f9c..9a5616a4e9 100644
--- a/submodules/ShareController/BUCK
+++ b/submodules/ShareController/BUCK
@@ -23,6 +23,7 @@ static_library(
"//submodules/ActivityIndicator:ActivityIndicator",
"//submodules/AppBundle:AppBundle",
"//submodules/TelegramStringFormatting:TelegramStringFormatting",
+ "//submodules/AppIntents:AppIntents",
],
frameworks = [
"$SDKROOT/System/Library/Frameworks/Foundation.framework",
diff --git a/submodules/ShareController/Sources/ShareControllerNode.swift b/submodules/ShareController/Sources/ShareControllerNode.swift
index ce4adcd07e..1f5bfd5785 100644
--- a/submodules/ShareController/Sources/ShareControllerNode.swift
+++ b/submodules/ShareController/Sources/ShareControllerNode.swift
@@ -8,6 +8,7 @@ import TelegramCore
import SyncCore
import TelegramPresentationData
import AccountContext
+import AppIntents
enum ShareState {
case preparing
@@ -26,6 +27,7 @@ func openExternalShare(state: () -> Signal) {
final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate {
private let sharedContext: SharedAccountContext
+ private var account: Account?
private var presentationData: PresentationData
private let externalShare: Bool
private let immediateExternalShare: Bool
@@ -537,6 +539,10 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate
peerIds = self.controllerInteraction!.selectedPeers.map { $0.peerId }
}
+ if let account = self.account {
+ donateSendMessageIntent(account: account, sharedContext: self.sharedContext, peerIds: peerIds)
+ }
+
if let signal = self.share?(self.inputFieldNode.text, peerIds) {
self.transitionToContentNode(ShareLoadingContainerNode(theme: self.presentationData.theme, forceNativeAppearance: true), fastOut: true)
let timestamp = CACurrentMediaTime()
@@ -629,6 +635,8 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate
}
func updatePeers(account: Account, switchableAccounts: [AccountWithInfo], peers: [(RenderedPeer, PeerPresence?)], accountPeer: Peer, defaultAction: ShareControllerAction?) {
+ self.account = account
+
if let peersContentNode = self.peersContentNode, peersContentNode.accountPeer.id == accountPeer.id {
peersContentNode.peersValue.set(.single(peers))
return
diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift
index e7b51a7257..4c7361ef0c 100644
--- a/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift
+++ b/submodules/TelegramPresentationData/Sources/DefaultDarkPresentationTheme.swift
@@ -220,8 +220,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor, baseColor: Presenta
)
let message = PresentationThemeChatMessage(
- incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.4), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: accentColor, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0x000000), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
- outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: outgoingScamColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: outgoingPrimaryTextColor, radioProgress: outgoingPrimaryTextColor, highlight: outgoingPrimaryTextColor.withAlphaComponent(0.12), separator: outgoingSecondaryTextColor, bar: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white),
+ incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x262628), highlightedFill: UIColor(rgb: 0x353539), stroke: UIColor(rgb: 0x262628))), primaryTextColor: .white, secondaryTextColor: UIColor(rgb: 0xffffff, alpha: 0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.4), mediaControlInnerBackgroundColor: UIColor(rgb: 0x262628), pendingActivityColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileTitleColor: accentColor, fileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.5), fileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaPlaceholderColor: UIColor(rgb: 0x1f1f1f).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x737373), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0x000000), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
+ outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleHighlightedFillColor, stroke: outgoingBubbleFillColor)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor.white.withAlphaComponent(0.5), scamColor: outgoingScamColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, mediaControlInnerBackgroundColor: outgoingBubbleFillColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: UIColor(rgb: 0x313131).mixedWith(.white, alpha: 0.05), polls: PresentationThemeChatBubblePolls(radioButton: outgoingPrimaryTextColor, radioProgress: outgoingPrimaryTextColor, highlight: outgoingPrimaryTextColor.withAlphaComponent(0.12), separator: outgoingSecondaryTextColor, bar: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), actionButtonsTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white),
freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0x1f1f1f), highlightedFill: UIColor(rgb: 0x2a2a2a), stroke: UIColor(rgb: 0x1f1f1f))),
infoPrimaryTextColor: .white,
infoLinkTextColor: accentColor,
diff --git a/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift
index 73aebe8370..81cbd1eab7 100644
--- a/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift
+++ b/submodules/TelegramPresentationData/Sources/DefaultDarkTintedPresentationTheme.swift
@@ -198,8 +198,8 @@ private func makeDarkPresentationTheme(accentColor: UIColor, baseColor: Presenta
let buttonStrokeColor = accentColor.withMultiplied(hue: 1.014, saturation: 0.56, brightness: 0.64).withAlphaComponent(0.15)
let message = PresentationThemeChatMessage(
- incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.5), pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: accentColor, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), polls: PresentationThemeChatBubblePolls(radioButton: accentColor.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
- outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.5), pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: .white, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51), polls: PresentationThemeChatBubblePolls(radioButton: .white, radioProgress: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0), highlight: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0).withAlphaComponent(0.12), separator: mainSeparatorColor, bar: .white), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white),
+ incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: accentColor.withAlphaComponent(0.5), mediaControlInnerBackgroundColor: mainBackgroundColor, pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: accentColor, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.585, brightness: 0.23), polls: PresentationThemeChatBubblePolls(radioButton: accentColor.withMultiplied(hue: 0.995, saturation: 0.317, brightness: 0.51), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: mainSeparatorColor, bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
+ outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleColor, highlightedFill: highlightedOutgoingBubbleColor, stroke: outgoingBubbleColor)), primaryTextColor: .white, secondaryTextColor: mainSecondaryTextColor.withAlphaComponent(0.5), linkTextColor: accentColor, linkHighlightColor: accentColor.withAlphaComponent(0.5), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xf5c038), accentTextColor: .white, accentControlColor: .white, mediaActiveControlColor: .white, mediaInactiveControlColor: UIColor(rgb: 0xffffff, alpha: 0.5), mediaControlInnerBackgroundColor: outgoingBubbleColor, pendingActivityColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileTitleColor: .white, fileDescriptionColor: mainSecondaryTextColor.withAlphaComponent(0.5), fileDurationColor: mainSecondaryTextColor.withAlphaComponent(0.5), mediaPlaceholderColor: accentColor.withMultiplied(hue: 1.019, saturation: 0.804, brightness: 0.51), polls: PresentationThemeChatBubblePolls(radioButton: .white, radioProgress: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0), highlight: accentColor.withMultiplied(hue: 0.99, saturation: 0.56, brightness: 1.0).withAlphaComponent(0.12), separator: mainSeparatorColor, bar: .white), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: additionalBackgroundColor.withAlphaComponent(0.5), withoutWallpaper: additionalBackgroundColor.withAlphaComponent(0.5)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: buttonStrokeColor), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor.white.withAlphaComponent(0.2), textSelectionKnobColor: UIColor.white),
freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: mainBackgroundColor, highlightedFill: highlightedIncomingBubbleColor, stroke: mainBackgroundColor)),
infoPrimaryTextColor: UIColor(rgb: 0xffffff),
infoLinkTextColor: accentColor,
diff --git a/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift b/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift
index 2d43fa322c..94dfd4913c 100644
--- a/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift
+++ b/submodules/TelegramPresentationData/Sources/DefaultDayPresentationTheme.swift
@@ -204,8 +204,8 @@ private func makeDefaultDayPresentationTheme(accentColor: UIColor, serviceBackgr
)
let message = PresentationThemeChatMessage(
- incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: UIColor(rgb: 0x86A9C9, alpha: 0.5)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: UIColor(rgb: 0x86A9C9, alpha: 0.5))), primaryTextColor: .black, secondaryTextColor: UIColor(rgb: 0x525252, alpha: 0.6), linkTextColor: UIColor(rgb: 0x004bad), linkHighlightColor: accentColor.withAlphaComponent(0.3), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: UIColor(rgb: 0x007ee5), accentControlColor: UIColor(rgb: 0x007ee5), mediaActiveControlColor: UIColor(rgb: 0x007ee5), mediaInactiveControlColor: UIColor(rgb: 0xcacaca), pendingActivityColor: UIColor(rgb: 0x525252, alpha: 0.6), fileTitleColor: UIColor(rgb: 0x0b8bed), fileDescriptionColor: UIColor(rgb: 0x999999), fileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaPlaceholderColor: UIColor(rgb: 0xe8ecf0), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5).withAlphaComponent(0.08), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
- outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xE1FFC7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: UIColor(rgb: 0x86a9c9, alpha: 0.5)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: UIColor(rgb: 0x86a9c9, alpha: 0.5))), primaryTextColor: .black, secondaryTextColor: UIColor(rgb: 0x008c09, alpha: 0.8), linkTextColor: UIColor(rgb: 0x004bad), linkHighlightColor: accentColor.withAlphaComponent(0.3), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: UIColor(rgb: 0x00a700), accentControlColor: UIColor(rgb: 0x3fc33b), mediaActiveControlColor: UIColor(rgb: 0x3fc33b), mediaInactiveControlColor: UIColor(rgb: 0x93d987), pendingActivityColor: UIColor(rgb: 0x42b649), fileTitleColor: UIColor(rgb: 0x3faa3c), fileDescriptionColor: UIColor(rgb: 0x6fb26a), fileDurationColor: UIColor(rgb: 0x008c09, alpha: 0.8), mediaPlaceholderColor: UIColor(rgb: 0xd2f2b6), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x93d987), radioProgress: UIColor(rgb: 0x3fc33b), highlight: UIColor(rgb: 0x3fc33b).withAlphaComponent(0.08), separator: UIColor(rgb: 0x93d987), bar: UIColor(rgb: 0x3fc33b)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor(rgb: 0xBBDE9F), textSelectionKnobColor: UIColor(rgb: 0x3FC33B)),
+ incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: UIColor(rgb: 0x86A9C9, alpha: 0.5)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: UIColor(rgb: 0x86A9C9, alpha: 0.5))), primaryTextColor: .black, secondaryTextColor: UIColor(rgb: 0x525252, alpha: 0.6), linkTextColor: UIColor(rgb: 0x004bad), linkHighlightColor: accentColor.withAlphaComponent(0.3), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: UIColor(rgb: 0x007ee5), accentControlColor: UIColor(rgb: 0x007ee5), mediaActiveControlColor: UIColor(rgb: 0x007ee5), mediaInactiveControlColor: UIColor(rgb: 0xcacaca), mediaControlInnerBackgroundColor: UIColor(rgb: 0xffffff), pendingActivityColor: UIColor(rgb: 0x525252, alpha: 0.6), fileTitleColor: UIColor(rgb: 0x0b8bed), fileDescriptionColor: UIColor(rgb: 0x999999), fileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaPlaceholderColor: UIColor(rgb: 0xe8ecf0), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5).withAlphaComponent(0.08), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: accentColor.withAlphaComponent(0.2), textSelectionKnobColor: accentColor),
+ outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: UIColor(rgb: 0x86a9c9, alpha: 0.5)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xe1ffc7), highlightedFill: UIColor(rgb: 0xc8ffa6), stroke: UIColor(rgb: 0x86a9c9, alpha: 0.5))), primaryTextColor: .black, secondaryTextColor: UIColor(rgb: 0x008c09, alpha: 0.8), linkTextColor: UIColor(rgb: 0x004bad), linkHighlightColor: accentColor.withAlphaComponent(0.3), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffe438), accentTextColor: UIColor(rgb: 0x00a700), accentControlColor: UIColor(rgb: 0x3fc33b), mediaActiveControlColor: UIColor(rgb: 0x3fc33b), mediaInactiveControlColor: UIColor(rgb: 0x93d987), mediaControlInnerBackgroundColor: UIColor(rgb: 0xe1ffc7), pendingActivityColor: UIColor(rgb: 0x42b649), fileTitleColor: UIColor(rgb: 0x3faa3c), fileDescriptionColor: UIColor(rgb: 0x6fb26a), fileDurationColor: UIColor(rgb: 0x008c09, alpha: 0.8), mediaPlaceholderColor: UIColor(rgb: 0xd2f2b6), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x93d987), radioProgress: UIColor(rgb: 0x3fc33b), highlight: UIColor(rgb: 0x3fc33b).withAlphaComponent(0.08), separator: UIColor(rgb: 0x93d987), bar: UIColor(rgb: 0x3fc33b)), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), actionButtonsStrokeColor: PresentationThemeVariableColor(color: .clear), actionButtonsTextColor: PresentationThemeVariableColor(color: .white), textSelectionColor: UIColor(rgb: 0xBBDE9F), textSelectionKnobColor: UIColor(rgb: 0x3FC33B)),
freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: UIColor(rgb: 0x86A9C9, alpha: 0.5)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xd9f4ff), stroke: UIColor(rgb: 0x86A9C9, alpha: 0.5))),
infoPrimaryTextColor: UIColor(rgb: 0x000000),
infoLinkTextColor: UIColor(rgb: 0x004bad),
@@ -222,8 +222,8 @@ private func makeDefaultDayPresentationTheme(accentColor: UIColor, serviceBackgr
)
let messageDay = PresentationThemeChatMessage(
- incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xdadade), stroke: UIColor(rgb: 0xffffff)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xf1f1f4), highlightedFill: UIColor(rgb: 0xdadade), stroke: UIColor(rgb: 0xf1f1f4))), primaryTextColor: .black, secondaryTextColor: UIColor(rgb: 0x525252, alpha: 0.6), linkTextColor: UIColor(rgb: 0x004bad), linkHighlightColor: accentColor.withAlphaComponent(0.3), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffc738), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: UIColor(rgb: 0xcacaca), pendingActivityColor: UIColor(rgb: 0x525252, alpha: 0.6), fileTitleColor: accentColor, fileDescriptionColor: UIColor(rgb: 0x999999), fileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaPlaceholderColor: UIColor(rgb: 0xffffff).withMultipliedBrightnessBy(0.95), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0xc8c7cc), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), actionButtonsStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: accentColor), actionButtonsTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor), textSelectionColor: accentColor.withAlphaComponent(0.3), textSelectionKnobColor: accentColor),
- outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleFillColor.withMultipliedBrightnessBy(0.7), stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleFillColor.withMultipliedBrightnessBy(0.7), stroke: outgoingBubbleStrokeColor)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor(rgb: 0xffffff, alpha: 0.3), scamColor: outgoingPrimaryTextColor, textHighlightColor: UIColor(rgb: 0xffc738), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: accentColor.withMultipliedBrightnessBy(0.95), polls: PresentationThemeChatBubblePolls(radioButton: outgoingSecondaryTextColor, radioProgress: outgoingPrimaryTextColor, highlight: outgoingPrimaryTextColor.withAlphaComponent(0.12), separator: outgoingSecondaryTextColor, bar: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), actionButtonsStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: accentColor), actionButtonsTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor), textSelectionColor: outgoingSelectionBaseColor.withAlphaComponent(0.2), textSelectionKnobColor: outgoingSelectionBaseColor),
+ incoming: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xffffff), highlightedFill: UIColor(rgb: 0xdadade), stroke: UIColor(rgb: 0xffffff)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xf1f1f4), highlightedFill: UIColor(rgb: 0xdadade), stroke: UIColor(rgb: 0xf1f1f4))), primaryTextColor: .black, secondaryTextColor: UIColor(rgb: 0x525252, alpha: 0.6), linkTextColor: UIColor(rgb: 0x004bad), linkHighlightColor: accentColor.withAlphaComponent(0.3), scamColor: destructiveColor, textHighlightColor: UIColor(rgb: 0xffc738), accentTextColor: accentColor, accentControlColor: accentColor, mediaActiveControlColor: accentColor, mediaInactiveControlColor: UIColor(rgb: 0xcacaca), mediaControlInnerBackgroundColor: UIColor(rgb: 0xffffff), pendingActivityColor: UIColor(rgb: 0x525252, alpha: 0.6), fileTitleColor: accentColor, fileDescriptionColor: UIColor(rgb: 0x999999), fileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), mediaPlaceholderColor: UIColor(rgb: 0xffffff).withMultipliedBrightnessBy(0.95), polls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: accentColor, highlight: accentColor.withAlphaComponent(0.12), separator: UIColor(rgb: 0xc8c7cc), bar: accentColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), actionButtonsStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: accentColor), actionButtonsTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor), textSelectionColor: accentColor.withAlphaComponent(0.3), textSelectionKnobColor: accentColor),
+ outgoing: PresentationThemePartedColors(bubble: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleFillColor.withMultipliedBrightnessBy(0.7), stroke: outgoingBubbleFillColor), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: outgoingBubbleFillColor, highlightedFill: outgoingBubbleFillColor.withMultipliedBrightnessBy(0.7), stroke: outgoingBubbleStrokeColor)), primaryTextColor: outgoingPrimaryTextColor, secondaryTextColor: outgoingSecondaryTextColor, linkTextColor: outgoingLinkTextColor, linkHighlightColor: UIColor(rgb: 0xffffff, alpha: 0.3), scamColor: outgoingPrimaryTextColor, textHighlightColor: UIColor(rgb: 0xffc738), accentTextColor: outgoingPrimaryTextColor, accentControlColor: outgoingPrimaryTextColor, mediaActiveControlColor: outgoingPrimaryTextColor, mediaInactiveControlColor: outgoingSecondaryTextColor, mediaControlInnerBackgroundColor: outgoingBubbleFillColor, pendingActivityColor: outgoingSecondaryTextColor, fileTitleColor: outgoingPrimaryTextColor, fileDescriptionColor: outgoingSecondaryTextColor, fileDurationColor: outgoingSecondaryTextColor, mediaPlaceholderColor: accentColor.withMultipliedBrightnessBy(0.95), polls: PresentationThemeChatBubblePolls(radioButton: outgoingSecondaryTextColor, radioProgress: outgoingPrimaryTextColor, highlight: outgoingPrimaryTextColor.withAlphaComponent(0.12), separator: outgoingSecondaryTextColor, bar: outgoingPrimaryTextColor), actionButtonsFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), actionButtonsStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: accentColor), actionButtonsTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor), textSelectionColor: outgoingSelectionBaseColor.withAlphaComponent(0.2), textSelectionKnobColor: outgoingSelectionBaseColor),
freeform: PresentationThemeBubbleColor(withWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xE5E5EA), highlightedFill: UIColor(rgb: 0xDADADE), stroke: UIColor(rgb: 0xE5E5EA)), withoutWallpaper: PresentationThemeBubbleColorComponents(fill: UIColor(rgb: 0xE5E5EA), highlightedFill: UIColor(rgb: 0xdadade), stroke: UIColor(rgb: 0xE5E5EA))),
infoPrimaryTextColor: UIColor(rgb: 0x000000),
infoLinkTextColor: UIColor(rgb: 0x004bad),
diff --git a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift
index b631a75c58..f2a1483411 100644
--- a/submodules/TelegramPresentationData/Sources/PresentationStrings.swift
+++ b/submodules/TelegramPresentationData/Sources/PresentationStrings.swift
@@ -4558,409 +4558,410 @@ public final class PresentationStrings: Equatable {
public var Channel_Setup_TypePublicHelp: String { return self._s[4011]! }
public var Passport_Identity_EditInternalPassport: String { return self._s[4012]! }
public var PhotoEditor_Skip: String { return self._s[4013]! }
- public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
+ public func SharedMedia_File(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func AttachmentMenu_SendItem(_ value: Int32) -> String {
+ public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func UserCount(_ value: Int32) -> String {
+ public func LastSeen_HoursAgo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func StickerPack_AddMaskCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, _2, _1, _3)
- }
- public func Notification_GameScoreExtended(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedAudios(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedVideos(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedFiles(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func SharedMedia_Generic(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ChatList_DeletedChats(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, _0, _1)
- }
- public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, _2, _1, _3)
- }
- public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func LastSeen_HoursAgo(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessagePoll_VotedCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func QuickSend_Photos(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Conversation_SelectedMessages(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Call_Minutes(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func Call_ShortSeconds(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteExpires_Hours(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_Minutes(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedMessages(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func StickerPack_AddStickerCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ChatList_SelectedChats(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Wallet_Updated_HoursAgo(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func ForwardedContacts(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Watch_UserInfo_Mute(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Passport_Scans(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notifications_Exceptions(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Map_ETAMinutes(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Theme_UsersCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _1, _2)
- }
- public func ForwardedLocations(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MuteExpires_Days(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Conversation_StatusOnline(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func MessageTimer_Seconds(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func SharedMedia_File(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func MuteExpires_Minutes(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedPhotos(_ value: Int32) -> String {
+ public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
+ public func MessageTimer_ShortDays(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
+ public func MessageTimer_Weeks(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedStickers(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, _1, _2)
+ return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func Contacts_ImportersCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Media_ShareVideo(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func QuickSend_Photos(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_Years(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ }
+ public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Map_ETAMinutes(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func InviteText_ContactsCountText(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Days(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_ShortHours(_ value: Int32) -> String {
+ public func MuteFor_Days(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Theme_UsersCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_Months(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Call_ShortMinutes(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, _1, _2)
+ return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, _1, _2)
}
- public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
+ public func SharedMedia_Photo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func LastSeen_MinutesAgo(_ value: Int32) -> String {
+ public func Notifications_Exceptions(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func AttachmentMenu_SendGif(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Invitation_Members(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ChatList_SelectedChats(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedPolls(_ value: Int32) -> String {
+ public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, _0, _1)
+ }
+ public func MessageTimer_Seconds(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Media_SharePhoto(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedContacts(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Passport_Scans(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Call_ShortSeconds(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MuteFor_Hours(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func AttachmentMenu_SendItem(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Media_ShareItem(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ }
+ public func ForwardedMessages(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func Conversation_StatusMembers(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func Map_ETAHours(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ChatList_DeletedChats(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedLocations(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func ForwardedPhotos(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func SharedMedia_Generic(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue)
+ }
+ public func MessagePoll_VotedCount(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, _1, _2)
+ public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ public func MessageTimer_Minutes(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
+ public func ForwardedFiles(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2)
+ public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
let form = getPluralizationForm(self.lc, selector)
return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
- public func MuteFor_Hours(_ value: Int32) -> String {
+ public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_Hours(_ value: Int32) -> String {
+ public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Media_SharePhoto(_ value: Int32) -> String {
+ public func Conversation_StatusOnline(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedGifs(_ value: Int32) -> String {
+ public func ForwardedStickers(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, _1, _2)
+ public func MessageTimer_ShortHours(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
+ public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, _1, _2)
+ public func Watch_UserInfo_Mute(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
+ public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func SharedMedia_Photo(_ value: Int32) -> String {
+ public func SharedMedia_Link(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_Months(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue)
- }
- public func InviteText_ContactsCountText(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue)
+ return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Call_Seconds(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, _1, _2)
}
- public func MessageTimer_Years(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, _1, _2)
}
- public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String {
+ public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, _1, _2)
+ }
+ public func SharedMedia_Video(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Conversation_StatusSubscribers(_ value: Int32) -> String {
+ public func Call_Seconds(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue)
@@ -4970,22 +4971,22 @@ public final class PresentationStrings: Equatable {
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String {
+ public func ForwardedVideoMessages(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Call_ShortMinutes(_ value: Int32) -> String {
+ public func ForwardedAudios(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String {
+ public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_Weeks(_ value: Int32) -> String {
+ public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue)
@@ -4995,134 +4996,133 @@ public final class PresentationStrings: Equatable {
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _1, _2)
+ public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
+ public func ForwardedVideos(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
+ public func Call_Minutes(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _2, _1, _3)
+ return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, _1, _2)
}
- public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String {
+ public func Conversation_StatusSubscribers(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Invitation_Members(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
- public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
+ public func MuteExpires_Hours(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func AttachmentMenu_SendGif(_ value: Int32) -> String {
+ public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func StickerPack_StickerCount(_ value: Int32) -> String {
+ public func Notification_GameScoreExtended(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String {
+ public func UserCount(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Notification_GameScoreSimple(_ value: Int32) -> String {
+ public func MessageTimer_Hours(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
+ public func Conversation_SelectedMessages(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
+ public func StickerPack_AddStickerCount(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Media_ShareVideo(_ value: Int32) -> String {
+ public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, _1, _2)
}
- public func MuteFor_Days(_ value: Int32) -> String {
+ public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Contacts_ImportersCount(_ value: Int32) -> String {
+ public func ForwardedPolls(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
+ public func Notification_GameScoreSimple(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func SharedMedia_Link(_ value: Int32) -> String {
+ public func StickerPack_AddMaskCount(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
- let form = getPluralizationForm(self.lc, selector)
- return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, _1, _2)
+ public func StickerPack_StickerCount(_ value: Int32) -> String {
+ let form = getPluralizationForm(self.lc, value)
+ let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
+ return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Conversation_StatusMembers(_ value: Int32) -> String {
+ public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func MessageTimer_ShortDays(_ value: Int32) -> String {
+ public func MuteExpires_Days(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func ForwardedVideoMessages(_ value: Int32) -> String {
+ public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func SharedMedia_Video(_ value: Int32) -> String {
+ public func LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
- let form = getPluralizationForm(self.lc, value)
- let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
- return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, stringValue)
+ public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String {
+ let form = getPluralizationForm(self.lc, selector)
+ return String(format: self._ps[114 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
- public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
+ public func Wallet_Updated_HoursAgo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[115 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Map_ETAHours(_ value: Int32) -> String {
+ public func ForwardedGifs(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[116 * 6 + Int(form.rawValue)]!, stringValue)
diff --git a/submodules/TelegramPresentationData/Sources/PresentationTheme.swift b/submodules/TelegramPresentationData/Sources/PresentationTheme.swift
index 4c4431e617..2b04cbf843 100644
--- a/submodules/TelegramPresentationData/Sources/PresentationTheme.swift
+++ b/submodules/TelegramPresentationData/Sources/PresentationTheme.swift
@@ -565,6 +565,7 @@ public final class PresentationThemePartedColors {
public let accentControlColor: UIColor
public let mediaActiveControlColor: UIColor
public let mediaInactiveControlColor: UIColor
+ public let mediaControlInnerBackgroundColor: UIColor
public let pendingActivityColor: UIColor
public let fileTitleColor: UIColor
public let fileDescriptionColor: UIColor
@@ -577,7 +578,7 @@ public final class PresentationThemePartedColors {
public let textSelectionColor: UIColor
public let textSelectionKnobColor: UIColor
- public init(bubble: PresentationThemeBubbleColor, primaryTextColor: UIColor, secondaryTextColor: UIColor, linkTextColor: UIColor, linkHighlightColor: UIColor, scamColor: UIColor, textHighlightColor: UIColor, accentTextColor: UIColor, accentControlColor: UIColor, mediaActiveControlColor: UIColor, mediaInactiveControlColor: UIColor, pendingActivityColor: UIColor, fileTitleColor: UIColor, fileDescriptionColor: UIColor, fileDurationColor: UIColor, mediaPlaceholderColor: UIColor, polls: PresentationThemeChatBubblePolls, actionButtonsFillColor: PresentationThemeVariableColor, actionButtonsStrokeColor: PresentationThemeVariableColor, actionButtonsTextColor: PresentationThemeVariableColor, textSelectionColor: UIColor, textSelectionKnobColor: UIColor) {
+ public init(bubble: PresentationThemeBubbleColor, primaryTextColor: UIColor, secondaryTextColor: UIColor, linkTextColor: UIColor, linkHighlightColor: UIColor, scamColor: UIColor, textHighlightColor: UIColor, accentTextColor: UIColor, accentControlColor: UIColor, mediaActiveControlColor: UIColor, mediaInactiveControlColor: UIColor, mediaControlInnerBackgroundColor: UIColor, pendingActivityColor: UIColor, fileTitleColor: UIColor, fileDescriptionColor: UIColor, fileDurationColor: UIColor, mediaPlaceholderColor: UIColor, polls: PresentationThemeChatBubblePolls, actionButtonsFillColor: PresentationThemeVariableColor, actionButtonsStrokeColor: PresentationThemeVariableColor, actionButtonsTextColor: PresentationThemeVariableColor, textSelectionColor: UIColor, textSelectionKnobColor: UIColor) {
self.bubble = bubble
self.primaryTextColor = primaryTextColor
self.secondaryTextColor = secondaryTextColor
@@ -589,6 +590,7 @@ public final class PresentationThemePartedColors {
self.accentControlColor = accentControlColor
self.mediaActiveControlColor = mediaActiveControlColor
self.mediaInactiveControlColor = mediaInactiveControlColor
+ self.mediaControlInnerBackgroundColor = mediaControlInnerBackgroundColor
self.pendingActivityColor = pendingActivityColor
self.fileTitleColor = fileTitleColor
self.fileDescriptionColor = fileDescriptionColor
diff --git a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift
index df0244be87..2c14713e3b 100644
--- a/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift
+++ b/submodules/TelegramPresentationData/Sources/PresentationThemeCodable.swift
@@ -1014,6 +1014,7 @@ extension PresentationThemePartedColors: Codable {
case accentControl
case mediaActiveControl
case mediaInactiveControl
+ case mediaControlInnerBg
case pendingActivity
case fileTitle
case fileDescription
@@ -1029,6 +1030,7 @@ extension PresentationThemePartedColors: Codable {
public convenience init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: CodingKeys.self)
+ let codingPath = decoder.codingPath.map { $0.stringValue }.joined(separator: ".")
self.init(
bubble: try values.decode(PresentationThemeBubbleColor.self, forKey: .bubble),
primaryTextColor: try decodeColor(values, .primaryText),
@@ -1041,6 +1043,7 @@ extension PresentationThemePartedColors: Codable {
accentControlColor: try decodeColor(values, .accentControl),
mediaActiveControlColor: try decodeColor(values, .mediaActiveControl),
mediaInactiveControlColor: try decodeColor(values, .mediaInactiveControl),
+ mediaControlInnerBackgroundColor: try decodeColor(values, .mediaControlInnerBg, decoder: decoder, fallbackKey: codingPath + ".bubble.withWp.bg"),
pendingActivityColor: try decodeColor(values, .pendingActivity),
fileTitleColor: try decodeColor(values, .fileTitle),
fileDescriptionColor: try decodeColor(values, .fileDescription),
@@ -1068,6 +1071,7 @@ extension PresentationThemePartedColors: Codable {
try encodeColor(&values, self.accentControlColor, .accentControl)
try encodeColor(&values, self.mediaActiveControlColor, .mediaActiveControl)
try encodeColor(&values, self.mediaInactiveControlColor, .mediaInactiveControl)
+ try encodeColor(&values, self.mediaControlInnerBackgroundColor, .mediaControlInnerBg)
try encodeColor(&values, self.pendingActivityColor, .pendingActivity)
try encodeColor(&values, self.fileTitleColor, .fileTitle)
try encodeColor(&values, self.fileDescriptionColor, .fileDescription)
diff --git a/submodules/TelegramUI/BUCK b/submodules/TelegramUI/BUCK
index 4b6ef3822d..35d07b5256 100644
--- a/submodules/TelegramUI/BUCK
+++ b/submodules/TelegramUI/BUCK
@@ -197,6 +197,7 @@ framework(
"//submodules/AppLock:AppLock",
"//submodules/NotificationsPresentationData:NotificationsPresentationData",
"//submodules/UrlWhitelist:UrlWhitelist",
+ "//submodules/AppIntents:AppIntents",
],
frameworks = [
"$SDKROOT/System/Library/Frameworks/Foundation.framework",
diff --git a/submodules/TelegramUI/TelegramUI/AppDelegate.swift b/submodules/TelegramUI/TelegramUI/AppDelegate.swift
index 14c3f010ea..0136a17210 100644
--- a/submodules/TelegramUI/TelegramUI/AppDelegate.swift
+++ b/submodules/TelegramUI/TelegramUI/AppDelegate.swift
@@ -33,6 +33,7 @@ import WalletCore
import OpenSSLEncryptionProvider
import AppLock
import PresentationDataUtils
+import AppIntents
#if canImport(BackgroundTasks)
import BackgroundTasks
@@ -179,6 +180,8 @@ final class SharedApplicationContext {
private let authContext = Promise()
private let authContextDisposable = MetaDisposable()
+ private let logoutDisposable = MetaDisposable()
+
private let openChatWhenReadyDisposable = MetaDisposable()
private let openUrlWhenReadyDisposable = MetaDisposable()
@@ -1155,7 +1158,8 @@ final class SharedApplicationContext {
}
|> take(1)
|> timeout(4.0, queue: .mainQueue(), alternate: .complete())
- |> deliverOnMainQueue).start(completed: { authContextValue.rootController.view.endEditing(true)
+ |> deliverOnMainQueue).start(completed: {
+ authContextValue.rootController.view.endEditing(true)
authContextValue.rootController.dismiss()
})
} else {
@@ -1174,12 +1178,32 @@ final class SharedApplicationContext {
|> take(1)
|> deliverOnMainQueue).start(next: { _ in
statusController.dismiss()
- self.mainWindow.present(context.rootController, on: .root) }))
+ self.mainWindow.present(context.rootController, on: .root)
+ }))
} else {
authContextReadyDisposable.set(nil)
}
}))
+ self.logoutDisposable.set((self.sharedContextPromise.get()
+ |> take(1)
+ |> mapToSignal { sharedContext -> Signal, NoError> in
+ return sharedContext.sharedContext.activeAccounts
+ |> map { _, accounts, _ -> Set in
+ return Set(accounts.map { $0.1.peerId })
+ }
+ |> reduceLeft(value: Set()) { current, updated, emit in
+ if !current.isEmpty {
+ emit(current.subtracting(current.intersection(updated)))
+ }
+ return updated
+ }
+ }).start(next: { loggedOutAccountPeerIds in
+ for peerId in loggedOutAccountPeerIds {
+ deleteAllSendMessageIntents(accountPeerId: peerId)
+ }
+ }))
+
self.watchCommunicationManagerPromise.set(watchCommunicationManager(context: self.context.get() |> flatMap { WatchCommunicationManagerContext(context: $0.context) }, allowBackgroundTimeExtension: { timeout in
let _ = (self.sharedContextPromise.get()
|> take(1)).start(next: { sharedContext in
diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift
index c789824280..8f754321bd 100644
--- a/submodules/TelegramUI/TelegramUI/ChatController.swift
+++ b/submodules/TelegramUI/TelegramUI/ChatController.swift
@@ -55,6 +55,7 @@ import LocalizedPeerData
import PhoneNumberFormat
import SettingsUI
import UrlWhitelist
+import AppIntents
public enum ChatControllerPeekActions {
case standard
@@ -2798,7 +2799,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
})
- strongSelf.donateSendMessageIntent()
+ donateSendMessageIntent(account: strongSelf.context.account, sharedContext: strongSelf.context.sharedContext, peerIds: [peerId])
}
}
@@ -5994,7 +5995,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
})
- self.donateSendMessageIntent()
+ donateSendMessageIntent(account: self.context.account, sharedContext: self.context.sharedContext, peerIds: [peerId])
} else {
let mode: ChatScheduleTimeControllerMode
if peerId == self.context.account.peerId {
@@ -7776,7 +7777,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
actionSheet?.dismissAnimated()
if let strongSelf = self {
let controller = storageUsageController(context: strongSelf.context, isModal: true)
- strongSelf.present(controller, in: .window(.root), with: ViewControllerPresentationArguments(presentationAnimation: .modalSheet))
+ strongSelf.present(controller, in: .window(.root), with: ViewControllerPresentationArguments(presentationAnimation: .modalSheet), blockInteraction: true)
}
}))
@@ -8067,44 +8068,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
})
}
- private func donateSendMessageIntent() {
- guard case let .peer(peerId) = self.chatLocation, peerId.namespace == Namespaces.Peer.CloudUser && peerId != self.context.account.peerId else {
- return
- }
- if #available(iOSApplicationExtension 13.2, iOS 13.2, *) {
- let _ = (self.context.account.postbox.loadedPeerWithId(peerId)
- |> mapToSignal { peer -> Signal<(Peer, UIImage?), NoError> in
- let avatarImage = peerAvatarImage(account: self.context.account, peer: peer, authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil)
- return avatarImage
- |> map { avatarImage in
- return (peer, avatarImage)
- }
- }
- |> deliverOnMainQueue).start(next: { [weak self] peer, avatarImage in
- if let strongSelf = self, let peer = peer as? TelegramUser, peer.botInfo == nil && !peer.flags.contains(.isSupport) {
- let recipientHandle = INPersonHandle(value: "tg\(peerId.id)", type: .unknown)
- var nameComponents = PersonNameComponents()
- nameComponents.givenName = peer.firstName
- nameComponents.familyName = peer.lastName
- let displayTitle = peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)
- let recipient = INPerson(personHandle: recipientHandle, nameComponents: nameComponents, displayName: displayTitle, image: nil, contactIdentifier: nil, customIdentifier: "tg\(peerId.id)")
- let intent = INSendMessageIntent(recipients: [recipient], content: nil, speakableGroupName: INSpeakableString(spokenPhrase: displayTitle), conversationIdentifier: "tg\(peerId.id)", serviceName: nil, sender: nil)
- if #available(iOS 12.0, *), let avatarImage = avatarImage, let avatarImageData = avatarImage.jpegData(compressionQuality: 0.8) {
- intent.setImage(INImage(imageData: avatarImageData), forParameterNamed: \.groupName)
- }
- let interaction = INInteraction(intent: intent, response: nil)
- interaction.direction = .outgoing
- interaction.groupIdentifier = "sendMessage_\(strongSelf.context.account.peerId.toInt64())"
- interaction.donate { error in
- if let error = error {
- print(error.localizedDescription)
- }
- }
- }
- })
- }
- }
-
private func updateReminderActivity() {
if self.isReminderActivityEnabled && false {
if #available(iOS 9.0, *) {
diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift
index e55d712ebd..28db418c60 100644
--- a/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift
+++ b/submodules/TelegramUI/TelegramUI/ChatMessageInteractiveFileNode.swift
@@ -757,7 +757,7 @@ final class ChatMessageInteractiveFileNode: ASDisplayNode {
if self.iconNode != nil {
statusForegroundColor = presentationData.theme.chat.message.mediaOverlayControlColors.foregroundColor
} else {
- statusForegroundColor = bubbleColorComponents(theme: presentationData.theme, incoming: incoming, wallpaper: !presentationData.wallpaper.isEmpty).fill
+ statusForegroundColor = incoming ? presentationData.theme.chat.message.incoming.mediaControlInnerBackgroundColor : presentationData.theme.chat.message.outgoing.mediaControlInnerBackgroundColor
}
switch resourceStatus.mediaStatus {
case var .fetchStatus(fetchStatus):
diff --git a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping
index f4b74190be..745aa95ef1 100644
Binary files a/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping and b/submodules/TelegramUI/TelegramUI/Resources/PresentationStrings.mapping differ
diff --git a/submodules/WalletUI/Resources/WalletStrings.mapping b/submodules/WalletUI/Resources/WalletStrings.mapping
index 98b9dc4e5f..c1d9aa47b1 100644
Binary files a/submodules/WalletUI/Resources/WalletStrings.mapping and b/submodules/WalletUI/Resources/WalletStrings.mapping differ
diff --git a/submodules/WalletUI/Sources/WalletStrings.swift b/submodules/WalletUI/Sources/WalletStrings.swift
index ccb258d32a..1403361194 100644
--- a/submodules/WalletUI/Sources/WalletStrings.swift
+++ b/submodules/WalletUI/Sources/WalletStrings.swift
@@ -445,12 +445,12 @@ public final class WalletStrings: Equatable {
public var Wallet_SecureStorageReset_Title: String { return self._s[215]! }
public var Wallet_Receive_CommentHeader: String { return self._s[216]! }
public var Wallet_Info_ReceiveGrams: String { return self._s[217]! }
- public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String {
+ public func Wallet_Updated_HoursAgo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue)
}
- public func Wallet_Updated_HoursAgo(_ value: Int32) -> String {
+ public func Wallet_Updated_MinutesAgo(_ value: Int32) -> String {
let form = getPluralizationForm(self.lc, value)
let stringValue = walletStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)
diff --git a/submodules/WatchBridge/Sources/WatchRequestHandlers.swift b/submodules/WatchBridge/Sources/WatchRequestHandlers.swift
index b42e8c9375..95f32f18e2 100644
--- a/submodules/WatchBridge/Sources/WatchRequestHandlers.swift
+++ b/submodules/WatchBridge/Sources/WatchRequestHandlers.swift
@@ -402,7 +402,7 @@ final class WatchMediaHandler: WatchRequestHandler {
if let peer = peer, let representation = peer.smallProfileImage {
let imageData = peerAvatarImageData(account: context.account, peer: peer, authorOfMessage: nil, representation: representation, synchronousLoad: false)
if let imageData = imageData {
- return imageData |> deliverOn(Queue.concurrentDefaultQueue())
+ return imageData
|> map { data -> UIImage? in
if let data = data, let image = generateImage(targetSize, contextGenerator: { size, context -> Void in
if let imageSource = CGImageSourceCreateWithData(data as CFData, nil), let dataImage = CGImageSourceCreateImageAtIndex(imageSource, 0, nil) {
@@ -429,7 +429,7 @@ final class WatchMediaHandler: WatchRequestHandler {
let disposable = signal.start(next: { image in
if let image = image, let imageData = image.jpegData(compressionQuality: compressionRate) {
- sendData(manager: manager, data: imageData, key: key, ext: ".jpg", type: TGBridgeIncomingFileTypeImage)
+ sendData(manager: manager, data: imageData, key: key, ext: ".jpg", type: TGBridgeIncomingFileTypeImage, forceAsData: true)
}
subscriber?.putNext(key)
}, completed: {