mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Tags and stories quality premium info
This commit is contained in:
parent
4ffc6367bb
commit
c7f6595e8e
@ -10983,3 +10983,10 @@ Sorry for the inconvenience.";
|
||||
"Login.Announce.Info" = "Notify people on Telegram who know my phone number that I signed up.";
|
||||
"Login.Announce.Notify" = "Notify";
|
||||
"Login.Announce.DontNotify" = "Do Not Notify";
|
||||
|
||||
"Premium.Stories.Quality.Title" = "Higher Quality";
|
||||
"Premium.Stories.Quality.Text" = "View video stories in double the resolution.";
|
||||
|
||||
"Premium.MessageTags" = "Tags for Messages";
|
||||
"Premium.MessageTagsInfo" = "Organize your Saved Messages with tags for quicker access.";
|
||||
"Premium.MessageTags.Proceed" = "About Telegram Premium";
|
||||
|
@ -30,12 +30,14 @@ public enum PremiumIntroSource {
|
||||
case storiesFormatting
|
||||
case storiesExpirationDurations
|
||||
case storiesSuggestedReactions
|
||||
case storiesHigherQuality
|
||||
case channelBoost(EnginePeer.Id)
|
||||
case nameColor
|
||||
case similarChannels
|
||||
case wallpapers
|
||||
case presence
|
||||
case readTime
|
||||
case messageTags
|
||||
}
|
||||
|
||||
public enum PremiumGiftSource: Equatable {
|
||||
@ -65,6 +67,7 @@ public enum PremiumDemoSubject {
|
||||
case stories
|
||||
case colors
|
||||
case wallpapers
|
||||
case messageTags
|
||||
}
|
||||
|
||||
public enum PremiumLimitSubject {
|
||||
|
BIN
submodules/PremiumUI/Resources/tag.png
Normal file
BIN
submodules/PremiumUI/Resources/tag.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
BIN
submodules/PremiumUI/Resources/tag.scn
Normal file
BIN
submodules/PremiumUI/Resources/tag.scn
Normal file
Binary file not shown.
@ -111,3 +111,57 @@ final class EmojiStarsView: UIView, PhoneDemoDecorationView {
|
||||
self.sceneView.frame = CGRect(origin: .zero, size: frame.size)
|
||||
}
|
||||
}
|
||||
|
||||
final class TagStarsView: UIView, PhoneDemoDecorationView {
|
||||
private let sceneView: SCNView
|
||||
|
||||
private var leftParticles: SCNNode?
|
||||
private var rightParticles: SCNNode?
|
||||
|
||||
override init(frame: CGRect) {
|
||||
self.sceneView = SCNView(frame: CGRect(origin: .zero, size: frame.size))
|
||||
self.sceneView.backgroundColor = .clear
|
||||
if let url = getAppBundle().url(forResource: "tag", withExtension: "scn") {
|
||||
self.sceneView.scene = try? SCNScene(url: url, options: nil)
|
||||
}
|
||||
self.sceneView.isUserInteractionEnabled = false
|
||||
self.sceneView.preferredFramesPerSecond = 60
|
||||
|
||||
super.init(frame: frame)
|
||||
|
||||
self.alpha = 0.0
|
||||
|
||||
self.addSubview(self.sceneView)
|
||||
|
||||
self.leftParticles = self.sceneView.scene?.rootNode.childNode(withName: "leftParticles", recursively: false)
|
||||
self.rightParticles = self.sceneView.scene?.rootNode.childNode(withName: "rightParticles", recursively: false)
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
func setVisible(_ visible: Bool) {
|
||||
if visible, let leftParticles = self.leftParticles, let rightParticles = self.rightParticles, leftParticles.parent == nil {
|
||||
self.sceneView.scene?.rootNode.addChildNode(leftParticles)
|
||||
self.sceneView.scene?.rootNode.addChildNode(rightParticles)
|
||||
}
|
||||
|
||||
let transition = ContainedViewLayoutTransition.animated(duration: 0.3, curve: .linear)
|
||||
transition.updateAlpha(layer: self.layer, alpha: visible ? 0.5 : 0.0, completion: { [weak self] finished in
|
||||
if let strongSelf = self, finished && !visible && strongSelf.leftParticles?.parent != nil {
|
||||
strongSelf.leftParticles?.removeFromParentNode()
|
||||
strongSelf.rightParticles?.removeFromParentNode()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func resetAnimation() {
|
||||
}
|
||||
|
||||
override func layoutSubviews() {
|
||||
super.layoutSubviews()
|
||||
|
||||
self.sceneView.frame = CGRect(origin: .zero, size: frame.size)
|
||||
}
|
||||
}
|
||||
|
@ -370,6 +370,7 @@ final class PhoneDemoComponent: Component {
|
||||
case badgeStars
|
||||
case emoji
|
||||
case hello
|
||||
case tag
|
||||
}
|
||||
|
||||
enum Model {
|
||||
@ -539,6 +540,13 @@ final class PhoneDemoComponent: Component {
|
||||
self.decorationView = starsView
|
||||
self.decorationContainerView.addSubview(starsView)
|
||||
}
|
||||
case .tag:
|
||||
if let _ = self.decorationView as? TagStarsView {
|
||||
} else {
|
||||
let starsView = TagStarsView(frame: self.decorationContainerView.bounds)
|
||||
self.decorationView = starsView
|
||||
self.decorationContainerView.addSubview(starsView)
|
||||
}
|
||||
}
|
||||
|
||||
self.phoneView.setup(context: component.context, videoFile: component.videoFile, position: component.position)
|
||||
|
@ -981,6 +981,25 @@ private final class DemoSheetContent: CombinedComponent {
|
||||
)
|
||||
)
|
||||
)
|
||||
availableItems[.messageTags] = DemoPagerComponent.Item(
|
||||
AnyComponentWithIdentity(
|
||||
id: PremiumDemoScreen.Subject.messageTags,
|
||||
component: AnyComponent(
|
||||
PageComponent(
|
||||
content: AnyComponent(PhoneDemoComponent(
|
||||
context: component.context,
|
||||
position: .top,
|
||||
model: .island,
|
||||
videoFile: configuration.videos["saved_tags"],
|
||||
decoration: .tag
|
||||
)),
|
||||
title: strings.Premium_MessageTags,
|
||||
text: strings.Premium_MessageTagsInfo,
|
||||
textColor: textColor
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
var items: [DemoPagerComponent.Item] = component.order.compactMap { availableItems[$0] }
|
||||
let index: Int
|
||||
@ -1083,6 +1102,8 @@ private final class DemoSheetContent: CombinedComponent {
|
||||
buttonText = strings.Premium_Wallpaper_Proceed
|
||||
case .colors:
|
||||
buttonText = strings.Premium_Colors_Proceed
|
||||
case .messageTags:
|
||||
buttonText = strings.Premium_MessageTags_Proceed
|
||||
default:
|
||||
buttonText = strings.Common_OK
|
||||
}
|
||||
@ -1118,9 +1139,9 @@ private final class DemoSheetContent: CombinedComponent {
|
||||
text = strings.Premium_ColorsInfo
|
||||
case .wallpapers:
|
||||
text = strings.Premium_WallpapersInfo
|
||||
case .doubleLimits:
|
||||
text = ""
|
||||
case .stories:
|
||||
case .messageTags:
|
||||
text = strings.Premium_MessageTagsInfo
|
||||
case .doubleLimits, .stories:
|
||||
text = ""
|
||||
}
|
||||
|
||||
@ -1338,6 +1359,7 @@ public class PremiumDemoScreen: ViewControllerComponentContainer {
|
||||
case stories
|
||||
case colors
|
||||
case wallpapers
|
||||
case messageTags
|
||||
}
|
||||
|
||||
public enum Source: Equatable {
|
||||
|
@ -429,6 +429,7 @@ private final class PremiumGiftScreenContentComponent: CombinedComponent {
|
||||
UIColor(rgb: 0xcb3e6d),
|
||||
UIColor(rgb: 0xbc4395),
|
||||
UIColor(rgb: 0xab4ac4),
|
||||
UIColor(rgb: 0xa34cd7),
|
||||
UIColor(rgb: 0x9b4fed),
|
||||
UIColor(rgb: 0x8958ff),
|
||||
UIColor(rgb: 0x676bff),
|
||||
@ -521,6 +522,8 @@ private final class PremiumGiftScreenContentComponent: CombinedComponent {
|
||||
demoSubject = .colors
|
||||
case .wallpapers:
|
||||
demoSubject = .wallpapers
|
||||
case .messageTags:
|
||||
demoSubject = .messageTags
|
||||
}
|
||||
|
||||
let buttonText: String
|
||||
|
@ -229,6 +229,12 @@ public enum PremiumSource: Equatable {
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
case .storiesHigherQuality:
|
||||
if case .storiesHigherQuality = rhs {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
case let .channelBoost(peerId):
|
||||
if case .channelBoost(peerId) = rhs {
|
||||
return true
|
||||
@ -265,6 +271,12 @@ public enum PremiumSource: Equatable {
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
case .messageTags:
|
||||
if case .messageTags = rhs {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -301,12 +313,14 @@ public enum PremiumSource: Equatable {
|
||||
case storiesFormatting
|
||||
case storiesExpirationDurations
|
||||
case storiesSuggestedReactions
|
||||
case storiesHigherQuality
|
||||
case channelBoost(EnginePeer.Id)
|
||||
case nameColor
|
||||
case similarChannels
|
||||
case wallpapers
|
||||
case presence
|
||||
case readTime
|
||||
case messageTags
|
||||
|
||||
var identifier: String? {
|
||||
switch self {
|
||||
@ -378,6 +392,8 @@ public enum PremiumSource: Equatable {
|
||||
return "stories__expiration_durations"
|
||||
case .storiesSuggestedReactions:
|
||||
return "stories__suggested_reactions"
|
||||
case .storiesHigherQuality:
|
||||
return "stories__quality"
|
||||
case let .channelBoost(peerId):
|
||||
return "channel_boost__\(peerId.id._internalGetInt64Value())"
|
||||
case .nameColor:
|
||||
@ -390,6 +406,8 @@ public enum PremiumSource: Equatable {
|
||||
return "presence"
|
||||
case .readTime:
|
||||
return "read_time"
|
||||
case .messageTags:
|
||||
return "saved_tags"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -412,6 +430,7 @@ public enum PremiumPerk: CaseIterable {
|
||||
case stories
|
||||
case colors
|
||||
case wallpapers
|
||||
case messageTags
|
||||
|
||||
public static var allCases: [PremiumPerk] {
|
||||
return [
|
||||
@ -431,7 +450,8 @@ public enum PremiumPerk: CaseIterable {
|
||||
.translation,
|
||||
.stories,
|
||||
.colors,
|
||||
.wallpapers
|
||||
.wallpapers,
|
||||
.messageTags
|
||||
]
|
||||
}
|
||||
|
||||
@ -481,6 +501,8 @@ public enum PremiumPerk: CaseIterable {
|
||||
return "peer_colors"
|
||||
case .wallpapers:
|
||||
return "wallpapers"
|
||||
case .messageTags:
|
||||
return "saved_tags"
|
||||
}
|
||||
}
|
||||
|
||||
@ -520,6 +542,8 @@ public enum PremiumPerk: CaseIterable {
|
||||
return strings.Premium_Colors
|
||||
case .wallpapers:
|
||||
return strings.Premium_Wallpapers
|
||||
case .messageTags:
|
||||
return strings.Premium_MessageTags
|
||||
}
|
||||
}
|
||||
|
||||
@ -559,6 +583,8 @@ public enum PremiumPerk: CaseIterable {
|
||||
return strings.Premium_ColorsInfo
|
||||
case .wallpapers:
|
||||
return strings.Premium_WallpapersInfo
|
||||
case .messageTags:
|
||||
return strings.Premium_MessageTagsInfo
|
||||
}
|
||||
}
|
||||
|
||||
@ -598,6 +624,8 @@ public enum PremiumPerk: CaseIterable {
|
||||
return "Premium/Perk/Colors"
|
||||
case .wallpapers:
|
||||
return "Premium/Perk/Wallpapers"
|
||||
case .messageTags:
|
||||
return "Premium/Perk/MessageTags"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -606,22 +634,23 @@ struct PremiumIntroConfiguration {
|
||||
static var defaultValue: PremiumIntroConfiguration {
|
||||
return PremiumIntroConfiguration(perks: [
|
||||
.stories,
|
||||
.doubleLimits,
|
||||
.moreUpload,
|
||||
.doubleLimits,
|
||||
.voiceToText,
|
||||
.fasterDownload,
|
||||
.translation,
|
||||
.voiceToText,
|
||||
.noAds,
|
||||
.animatedEmoji,
|
||||
.emojiStatus,
|
||||
.messageTags,
|
||||
.colors,
|
||||
.wallpapers,
|
||||
.uniqueReactions,
|
||||
.premiumStickers,
|
||||
.animatedEmoji,
|
||||
.advancedChatManagement,
|
||||
.profileBadge,
|
||||
.advancedChatManagement,
|
||||
.noAds,
|
||||
.appIcons,
|
||||
.uniqueReactions,
|
||||
.animatedUserpics,
|
||||
.appIcons
|
||||
.premiumStickers
|
||||
])
|
||||
}
|
||||
|
||||
@ -657,6 +686,9 @@ struct PremiumIntroConfiguration {
|
||||
if !perks.contains(.colors) {
|
||||
perks.append(.colors)
|
||||
}
|
||||
if !perks.contains(.messageTags) {
|
||||
perks.append(.messageTags)
|
||||
}
|
||||
#endif
|
||||
return PremiumIntroConfiguration(perks: perks)
|
||||
} else {
|
||||
@ -1617,8 +1649,9 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent {
|
||||
self.newPerksDisposable = combineLatest(queue: Queue.mainQueue(),
|
||||
ApplicationSpecificNotice.dismissedPremiumAppIconsBadge(accountManager: context.sharedContext.accountManager),
|
||||
ApplicationSpecificNotice.dismissedPremiumWallpapersBadge(accountManager: context.sharedContext.accountManager),
|
||||
ApplicationSpecificNotice.dismissedPremiumColorsBadge(accountManager: context.sharedContext.accountManager)
|
||||
).startStrict(next: { [weak self] dismissedPremiumAppIconsBadge, dismissedPremiumWallpapersBadge, dismissedPremiumColorsBadge in
|
||||
ApplicationSpecificNotice.dismissedPremiumColorsBadge(accountManager: context.sharedContext.accountManager),
|
||||
ApplicationSpecificNotice.dismissedMessageTagsBadge(accountManager: context.sharedContext.accountManager)
|
||||
).startStrict(next: { [weak self] dismissedPremiumAppIconsBadge, dismissedPremiumWallpapersBadge, dismissedPremiumColorsBadge, dismissedMessageTagsBadge in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
@ -1629,6 +1662,9 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent {
|
||||
if !dismissedPremiumColorsBadge {
|
||||
newPerks.append(PremiumPerk.colors.identifier)
|
||||
}
|
||||
if !dismissedMessageTagsBadge {
|
||||
newPerks.append(PremiumPerk.messageTags.identifier)
|
||||
}
|
||||
self.newPerks = newPerks
|
||||
self.updated()
|
||||
})
|
||||
@ -1808,6 +1844,7 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent {
|
||||
UIColor(rgb: 0xcb3e6d),
|
||||
UIColor(rgb: 0xbc4395),
|
||||
UIColor(rgb: 0xab4ac4),
|
||||
UIColor(rgb: 0xa34cd7),
|
||||
UIColor(rgb: 0x9b4fed),
|
||||
UIColor(rgb: 0x8958ff),
|
||||
UIColor(rgb: 0x676bff),
|
||||
@ -2031,6 +2068,9 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent {
|
||||
case .wallpapers:
|
||||
demoSubject = .wallpapers
|
||||
let _ = ApplicationSpecificNotice.setDismissedPremiumWallpapersBadge(accountManager: accountContext.sharedContext.accountManager).startStandalone()
|
||||
case .messageTags:
|
||||
demoSubject = .messageTags
|
||||
let _ = ApplicationSpecificNotice.setDismissedMessageTagsBadge(accountManager: accountContext.sharedContext.accountManager).startStandalone()
|
||||
}
|
||||
|
||||
let isPremium = state?.isPremium == true
|
||||
|
@ -742,6 +742,25 @@ public class PremiumLimitsListScreen: ViewController {
|
||||
)
|
||||
)
|
||||
)
|
||||
availableItems[.messageTags] = DemoPagerComponent.Item(
|
||||
AnyComponentWithIdentity(
|
||||
id: PremiumDemoScreen.Subject.messageTags,
|
||||
component: AnyComponent(
|
||||
PageComponent(
|
||||
content: AnyComponent(PhoneDemoComponent(
|
||||
context: context,
|
||||
position: .top,
|
||||
model: .island,
|
||||
videoFile: configuration.videos["saved_tags"],
|
||||
decoration: .tag
|
||||
)),
|
||||
title: strings.Premium_MessageTags,
|
||||
text: strings.Premium_MessageTagsInfo,
|
||||
textColor: textColor
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if let order = controller.order {
|
||||
var items: [DemoPagerComponent.Item] = order.compactMap { availableItems[$0] }
|
||||
|
@ -312,13 +312,14 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
let strings = context.component.context.sharedContext.currentPresentationData.with { $0 }.strings
|
||||
|
||||
let colors = [
|
||||
UIColor(rgb: 0x0275f3),
|
||||
UIColor(rgb: 0x8698ff),
|
||||
UIColor(rgb: 0xc871ff),
|
||||
UIColor(rgb: 0xc356ad),
|
||||
UIColor(rgb: 0xe85c44),
|
||||
UIColor(rgb: 0xff932b),
|
||||
UIColor(rgb: 0xe9af18)
|
||||
UIColor(rgb: 0x007aff),
|
||||
UIColor(rgb: 0x798aff),
|
||||
UIColor(rgb: 0xac64f3),
|
||||
UIColor(rgb: 0xc456ae),
|
||||
UIColor(rgb: 0xe95d44),
|
||||
UIColor(rgb: 0xf2822a),
|
||||
UIColor(rgb: 0xe79519),
|
||||
UIColor(rgb: 0xe7ad19)
|
||||
]
|
||||
|
||||
let titleColor = theme.list.itemPrimaryTextColor
|
||||
@ -367,6 +368,20 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
)
|
||||
)
|
||||
|
||||
items.append(
|
||||
AnyComponentWithIdentity(
|
||||
id: "quality",
|
||||
component: AnyComponent(ParagraphComponent(
|
||||
title: strings.Premium_Stories_Quality_Title,
|
||||
titleColor: titleColor,
|
||||
text: strings.Premium_Stories_Quality_Text,
|
||||
textColor: textColor,
|
||||
iconName: "Premium/Stories/Quality",
|
||||
iconColor: colors[2]
|
||||
))
|
||||
)
|
||||
)
|
||||
|
||||
items.append(
|
||||
AnyComponentWithIdentity(
|
||||
id: "views",
|
||||
@ -376,7 +391,7 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
text: strings.Premium_Stories_Views_Text,
|
||||
textColor: textColor,
|
||||
iconName: "Premium/Stories/Views",
|
||||
iconColor: colors[2]
|
||||
iconColor: colors[3]
|
||||
))
|
||||
)
|
||||
)
|
||||
@ -390,7 +405,7 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
text: strings.Premium_Stories_Expiration_Text,
|
||||
textColor: textColor,
|
||||
iconName: "Premium/Stories/Expire",
|
||||
iconColor: colors[3]
|
||||
iconColor: colors[4]
|
||||
))
|
||||
)
|
||||
)
|
||||
@ -404,7 +419,7 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
text: strings.Premium_Stories_Save_Text,
|
||||
textColor: textColor,
|
||||
iconName: "Premium/Stories/Save",
|
||||
iconColor: colors[4]
|
||||
iconColor: colors[5]
|
||||
))
|
||||
)
|
||||
)
|
||||
@ -418,7 +433,7 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
text: strings.Premium_Stories_Captions_Text,
|
||||
textColor: textColor,
|
||||
iconName: "Premium/Stories/Caption",
|
||||
iconColor: colors[5]
|
||||
iconColor: colors[6]
|
||||
))
|
||||
)
|
||||
)
|
||||
@ -432,7 +447,7 @@ private final class StoriesListComponent: CombinedComponent {
|
||||
text: strings.Premium_Stories_Format_Text,
|
||||
textColor: textColor,
|
||||
iconName: "Premium/Stories/Format",
|
||||
iconColor: colors[6]
|
||||
iconColor: colors[7]
|
||||
))
|
||||
)
|
||||
)
|
||||
|
@ -195,6 +195,7 @@ private enum ApplicationSpecificGlobalNotice: Int32 {
|
||||
case videoMessagesPlayOnceSuggestion = 61
|
||||
case incomingVideoMessagePlayOnceTip = 62
|
||||
case outgoingVideoMessagePlayOnceTip = 63
|
||||
case dismissedMessageTagsBadge = 64
|
||||
|
||||
var key: ValueBoxKey {
|
||||
let v = ValueBoxKey(length: 4)
|
||||
@ -504,6 +505,10 @@ private struct ApplicationSpecificNoticeKeys {
|
||||
static func outgoingVideoMessagePlayOnceTip() -> NoticeEntryKey {
|
||||
return NoticeEntryKey(namespace: noticeNamespace(namespace: globalNamespace), key: ApplicationSpecificGlobalNotice.outgoingVideoMessagePlayOnceTip.key)
|
||||
}
|
||||
|
||||
static func dismissedMessageTagsBadge() -> NoticeEntryKey {
|
||||
return NoticeEntryKey(namespace: noticeNamespace(namespace: globalNamespace), key: ApplicationSpecificGlobalNotice.dismissedMessageTagsBadge.key)
|
||||
}
|
||||
}
|
||||
|
||||
public struct ApplicationSpecificNotice {
|
||||
@ -2080,4 +2085,25 @@ public struct ApplicationSpecificNotice {
|
||||
return Int(previousValue)
|
||||
}
|
||||
}
|
||||
|
||||
public static func setDismissedMessageTagsBadge(accountManager: AccountManager<TelegramAccountManagerTypes>) -> Signal<Never, NoError> {
|
||||
return accountManager.transaction { transaction -> Void in
|
||||
if let entry = CodableEntry(ApplicationSpecificBoolNotice()) {
|
||||
transaction.setNotice(ApplicationSpecificNoticeKeys.dismissedMessageTagsBadge(), entry)
|
||||
}
|
||||
}
|
||||
|> ignoreValues
|
||||
}
|
||||
|
||||
public static func dismissedMessageTagsBadge(accountManager: AccountManager<TelegramAccountManagerTypes>) -> Signal<Bool, NoError> {
|
||||
return accountManager.noticeEntry(key: ApplicationSpecificNoticeKeys.dismissedMessageTagsBadge())
|
||||
|> map { view -> Bool in
|
||||
if let _ = view.value?.get(ApplicationSpecificBoolNotice.self) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|> take(1)
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ public final class SliderContextItem: ContextMenuCustomItem {
|
||||
|
||||
private let textFont = Font.with(size: 17.0, design: .regular, traits: .monospacedNumbers)
|
||||
|
||||
private final class SliderContextItemNode: ASDisplayNode, ContextMenuCustomNode {
|
||||
private final class SliderContextItemNode: ASDisplayNode, ContextMenuCustomNode, UIGestureRecognizerDelegate {
|
||||
private var presentationData: PresentationData
|
||||
|
||||
private(set) var vibrancyEffectView: UIVisualEffectView?
|
||||
@ -122,6 +122,8 @@ private final class SliderContextItemNode: ASDisplayNode, ContextMenuCustomNode
|
||||
override func didLoad() {
|
||||
super.didLoad()
|
||||
|
||||
self.view.disablesInteractiveTransitionGestureRecognizer = true
|
||||
|
||||
if let vibrancyEffectView = self.vibrancyEffectView {
|
||||
Queue.mainQueue().after(0.05) {
|
||||
if let effectNode = findEffectNode(node: self.supernode) {
|
||||
@ -132,6 +134,7 @@ private final class SliderContextItemNode: ASDisplayNode, ContextMenuCustomNode
|
||||
}
|
||||
|
||||
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.panGesture(_:)))
|
||||
panGestureRecognizer.delegate = self
|
||||
self.view.addGestureRecognizer(panGestureRecognizer)
|
||||
|
||||
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:)))
|
||||
@ -201,7 +204,7 @@ private final class SliderContextItemNode: ASDisplayNode, ContextMenuCustomNode
|
||||
self.updateValue(transition: transition)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@objc private func panGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||
let range = self.maxValue - self.minValue
|
||||
switch gestureRecognizer.state {
|
||||
|
@ -5620,8 +5620,7 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
//TODO:localize
|
||||
self.presentStoriesUpgradeScreen(source: .storiesStealthMode)
|
||||
self.presentStoriesUpgradeScreen(source: .storiesHigherQuality)
|
||||
})
|
||||
}
|
||||
|
||||
|
12
submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/Contents.json
vendored
Normal file
12
submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "tag_30 (2).pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
164
submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/tag_30 (2).pdf
vendored
Normal file
164
submodules/TelegramUI/Images.xcassets/Premium/Perk/MessageTags.imageset/tag_30 (2).pdf
vendored
Normal file
@ -0,0 +1,164 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< /Type /XObject
|
||||
/Length 2 0 R
|
||||
/Group << /Type /Group
|
||||
/S /Transparency
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Resources << >>
|
||||
/BBox [ 0.000000 0.000000 30.000000 30.000000 ]
|
||||
>>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 5.406738 8.000000 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
16.973253 11.854660 m
|
||||
19.015503 9.069774 l
|
||||
19.918947 7.837805 19.918947 6.162195 19.015503 4.930227 c
|
||||
16.973253 2.145341 l
|
||||
15.984283 0.796747 14.411980 0.000000 12.739626 0.000000 c
|
||||
3.500002 0.000000 l
|
||||
1.567005 0.000000 0.000000 1.567004 0.000000 3.500001 c
|
||||
0.000000 10.500000 l
|
||||
0.000000 12.432997 1.567003 14.000000 3.500000 14.000000 c
|
||||
12.739625 14.000000 l
|
||||
14.411979 14.000000 15.984283 13.203254 16.973253 11.854660 c
|
||||
h
|
||||
14.350163 5.250000 m
|
||||
15.316662 5.250000 16.100163 6.033502 16.100163 7.000000 c
|
||||
16.100163 7.966498 15.316662 8.750000 14.350163 8.750000 c
|
||||
13.383665 8.750000 12.600163 7.966498 12.600163 7.000000 c
|
||||
12.600163 6.033502 13.383665 5.250000 14.350163 5.250000 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
809
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
<< /Type /XObject
|
||||
/Length 4 0 R
|
||||
/Group << /Type /Group
|
||||
/S /Transparency
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Resources << >>
|
||||
/BBox [ 0.000000 0.000000 30.000000 30.000000 ]
|
||||
>>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
0.000000 18.799999 m
|
||||
0.000000 22.720367 0.000000 24.680552 0.762954 26.177933 c
|
||||
1.434068 27.495068 2.504932 28.565931 3.822066 29.237045 c
|
||||
5.319448 30.000000 7.279633 30.000000 11.200000 30.000000 c
|
||||
18.799999 30.000000 l
|
||||
22.720367 30.000000 24.680552 30.000000 26.177933 29.237045 c
|
||||
27.495068 28.565931 28.565931 27.495068 29.237045 26.177933 c
|
||||
30.000000 24.680552 30.000000 22.720367 30.000000 18.799999 c
|
||||
30.000000 11.200001 l
|
||||
30.000000 7.279633 30.000000 5.319448 29.237045 3.822067 c
|
||||
28.565931 2.504932 27.495068 1.434069 26.177933 0.762955 c
|
||||
24.680552 0.000000 22.720367 0.000000 18.799999 0.000000 c
|
||||
11.200000 0.000000 l
|
||||
7.279633 0.000000 5.319448 0.000000 3.822066 0.762955 c
|
||||
2.504932 1.434069 1.434068 2.504932 0.762954 3.822067 c
|
||||
0.000000 5.319448 0.000000 7.279633 0.000000 11.200001 c
|
||||
0.000000 18.799999 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
944
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /XObject << /X1 1 0 R >>
|
||||
/ExtGState << /E1 << /SMask << /Type /Mask
|
||||
/G 3 0 R
|
||||
/S /Alpha
|
||||
>>
|
||||
/Type /ExtGState
|
||||
>> >>
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Length 7 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
/E1 gs
|
||||
/X1 Do
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
46
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
|
||||
/Resources 5 0 R
|
||||
/Contents 6 0 R
|
||||
/Parent 9 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
9 0 obj
|
||||
<< /Kids [ 8 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
<< /Pages 9 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000001067 00000 n
|
||||
0000001089 00000 n
|
||||
0000002281 00000 n
|
||||
0000002303 00000 n
|
||||
0000002601 00000 n
|
||||
0000002703 00000 n
|
||||
0000002724 00000 n
|
||||
0000002897 00000 n
|
||||
0000002971 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 10 0 R
|
||||
/Size 11
|
||||
>>
|
||||
startxref
|
||||
3031
|
||||
%%EOF
|
12
submodules/TelegramUI/Images.xcassets/Premium/Stories/Quality.imageset/Contents.json
vendored
Normal file
12
submodules/TelegramUI/Images.xcassets/Premium/Stories/Quality.imageset/Contents.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "hd_30.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
161
submodules/TelegramUI/Images.xcassets/Premium/Stories/Quality.imageset/hd_30.pdf
vendored
Normal file
161
submodules/TelegramUI/Images.xcassets/Premium/Stories/Quality.imageset/hd_30.pdf
vendored
Normal file
@ -0,0 +1,161 @@
|
||||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 3.084961 4.960083 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
6.665000 20.079956 m
|
||||
6.635606 20.079956 l
|
||||
6.635600 20.079956 l
|
||||
5.610404 20.079960 4.800312 20.079964 4.147855 20.026657 c
|
||||
3.481411 19.972206 2.921088 19.858839 2.410632 19.598749 c
|
||||
1.579897 19.175468 0.904487 18.500059 0.481207 17.669323 c
|
||||
0.221116 17.158869 0.107750 16.598545 0.053300 15.932100 c
|
||||
-0.000008 15.279644 -0.000005 14.469551 0.000000 13.444355 c
|
||||
0.000000 13.444349 l
|
||||
0.000000 13.414955 l
|
||||
0.000000 6.664956 l
|
||||
0.000000 6.635563 l
|
||||
-0.000005 5.610363 -0.000008 4.800270 0.053300 4.147811 c
|
||||
0.107750 3.481365 0.221116 2.921043 0.481207 2.410587 c
|
||||
0.904487 1.579851 1.579897 0.904442 2.410632 0.481161 c
|
||||
2.921088 0.221071 3.481411 0.107704 4.147856 0.053255 c
|
||||
4.800318 -0.000055 5.610417 -0.000051 6.635624 -0.000046 c
|
||||
6.665001 -0.000046 l
|
||||
17.165001 -0.000046 l
|
||||
17.194378 -0.000046 l
|
||||
18.219585 -0.000051 19.029684 -0.000055 19.682146 0.053255 c
|
||||
20.348591 0.107704 20.908913 0.221071 21.419369 0.481161 c
|
||||
22.250105 0.904442 22.925514 1.579851 23.348795 2.410587 c
|
||||
23.608885 2.921043 23.722252 3.481365 23.776701 4.147811 c
|
||||
23.830011 4.800273 23.830008 5.610373 23.830002 6.635580 c
|
||||
23.830002 6.664956 l
|
||||
23.830002 13.414955 l
|
||||
23.830002 13.444332 l
|
||||
23.830008 14.469540 23.830011 15.279638 23.776701 15.932100 c
|
||||
23.722252 16.598545 23.608885 17.158869 23.348795 17.669323 c
|
||||
22.925514 18.500059 22.250105 19.175468 21.419369 19.598749 c
|
||||
20.908913 19.858839 20.348591 19.972206 19.682146 20.026657 c
|
||||
19.029688 20.079964 18.219595 20.079960 17.194395 20.079956 c
|
||||
17.165001 20.079956 l
|
||||
6.665000 20.079956 l
|
||||
h
|
||||
3.014440 18.413712 m
|
||||
3.306153 18.562346 3.671964 18.653343 4.256160 18.701073 c
|
||||
4.848119 18.749439 5.603929 18.749956 6.665000 18.749956 c
|
||||
17.165001 18.749956 l
|
||||
18.226072 18.749956 18.981882 18.749439 19.573841 18.701073 c
|
||||
20.158037 18.653343 20.523848 18.562346 20.815561 18.413712 c
|
||||
21.396042 18.117941 21.867987 17.645996 22.163755 17.065517 c
|
||||
22.312391 16.773804 22.403387 16.407993 22.451118 15.823796 c
|
||||
22.499483 15.231836 22.500000 14.476027 22.500000 13.414955 c
|
||||
22.500000 6.664956 l
|
||||
22.500000 5.603885 22.499483 4.848075 22.451118 4.256116 c
|
||||
22.403387 3.671919 22.312391 3.306108 22.163755 3.014395 c
|
||||
21.867987 2.433914 21.396042 1.961969 20.815561 1.666201 c
|
||||
20.523848 1.517565 20.158037 1.426569 19.573841 1.378838 c
|
||||
18.981882 1.330473 18.226072 1.329956 17.165001 1.329956 c
|
||||
6.665001 1.329956 l
|
||||
5.603929 1.329956 4.848119 1.330473 4.256160 1.378838 c
|
||||
3.671964 1.426569 3.306153 1.517565 3.014440 1.666201 c
|
||||
2.433959 1.961969 1.962015 2.433914 1.666245 3.014395 c
|
||||
1.517610 3.306108 1.426613 3.671919 1.378883 4.256116 c
|
||||
1.330518 4.848075 1.330000 5.603885 1.330000 6.664956 c
|
||||
1.330000 13.414955 l
|
||||
1.330000 14.476027 1.330518 15.231836 1.378883 15.823796 c
|
||||
1.426613 16.407993 1.517610 16.773804 1.666245 17.065517 c
|
||||
1.962015 17.645996 2.433959 18.117941 3.014440 18.413712 c
|
||||
h
|
||||
3.975623 6.325036 m
|
||||
3.975623 5.885583 4.231971 5.617028 4.659217 5.617028 c
|
||||
5.080359 5.617028 5.342811 5.885583 5.342811 6.325036 c
|
||||
5.342811 9.614831 l
|
||||
9.865516 9.614831 l
|
||||
9.865516 6.325036 l
|
||||
9.865516 5.885583 10.121863 5.617028 10.549109 5.617028 c
|
||||
10.970252 5.617028 11.232703 5.885583 11.232703 6.325036 c
|
||||
11.232703 13.911706 l
|
||||
11.232703 14.351159 10.970252 14.619714 10.549109 14.619714 c
|
||||
10.121863 14.619714 9.865516 14.351159 9.865516 13.911706 c
|
||||
9.865516 10.798913 l
|
||||
5.342811 10.798913 l
|
||||
5.342811 13.911706 l
|
||||
5.342811 14.351159 5.080359 14.619714 4.659217 14.619714 c
|
||||
4.231971 14.619714 3.975623 14.351159 3.975623 13.911706 c
|
||||
3.975623 6.325036 l
|
||||
h
|
||||
12.752635 6.422692 m
|
||||
12.752635 5.983239 13.008983 5.714684 13.436229 5.714684 c
|
||||
15.859324 5.714684 l
|
||||
18.483837 5.714684 20.028027 7.350427 20.028027 10.133630 c
|
||||
20.028027 12.910729 18.477734 14.522058 15.859324 14.522058 c
|
||||
13.436229 14.522058 l
|
||||
13.008983 14.522058 12.752635 14.253503 12.752635 13.814050 c
|
||||
12.752635 6.422692 l
|
||||
h
|
||||
15.731151 6.898767 m
|
||||
14.119823 6.898767 l
|
||||
14.119823 13.344079 l
|
||||
15.731151 13.344079 l
|
||||
17.592724 13.344079 18.630322 12.196618 18.630322 10.121423 c
|
||||
18.630322 8.040124 17.598827 6.898767 15.731151 6.898767 c
|
||||
h
|
||||
f*
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
4117
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 30.000000 30.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000004207 00000 n
|
||||
0000004230 00000 n
|
||||
0000004403 00000 n
|
||||
0000004477 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
4536
|
||||
%%EOF
|
@ -317,8 +317,8 @@ extension ChatControllerImpl {
|
||||
|
||||
let context = self.context
|
||||
var replaceImpl: ((ViewController) -> Void)?
|
||||
let controller = PremiumDemoScreen(context: context, subject: .uniqueReactions, action: {
|
||||
let controller = PremiumIntroScreen(context: context, source: .reactions)
|
||||
let controller = PremiumDemoScreen(context: context, subject: .messageTags, action: {
|
||||
let controller = PremiumIntroScreen(context: context, source: .messageTags)
|
||||
replaceImpl?(controller)
|
||||
})
|
||||
replaceImpl = { [weak controller] c in
|
||||
|
@ -21,8 +21,8 @@ extension ChatControllerImpl {
|
||||
//TODO:localize
|
||||
let context = self.context
|
||||
var replaceImpl: ((ViewController) -> Void)?
|
||||
let controller = PremiumDemoScreen(context: context, subject: .uniqueReactions, action: {
|
||||
let controller = PremiumIntroScreen(context: context, source: .reactions)
|
||||
let controller = PremiumDemoScreen(context: context, subject: .messageTags, action: {
|
||||
let controller = PremiumIntroScreen(context: context, source: .messageTags)
|
||||
replaceImpl?(controller)
|
||||
})
|
||||
replaceImpl = { [weak controller] c in
|
||||
|
@ -1938,6 +1938,8 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
||||
mappedSource = .storiesExpirationDurations
|
||||
case .storiesSuggestedReactions:
|
||||
mappedSource = .storiesSuggestedReactions
|
||||
case .storiesHigherQuality:
|
||||
mappedSource = .storiesHigherQuality
|
||||
case let .channelBoost(peerId):
|
||||
mappedSource = .channelBoost(peerId)
|
||||
case .nameColor:
|
||||
@ -1950,6 +1952,8 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
||||
mappedSource = .presence
|
||||
case .readTime:
|
||||
mappedSource = .readTime
|
||||
case .messageTags:
|
||||
mappedSource = .messageTags
|
||||
}
|
||||
let controller = PremiumIntroScreen(context: context, modal: modal, source: mappedSource, forceDark: forceDark)
|
||||
controller.wasDismissed = dismissed
|
||||
@ -1993,6 +1997,8 @@ public final class SharedAccountContextImpl: SharedAccountContext {
|
||||
mappedSubject = .colors
|
||||
case .wallpapers:
|
||||
mappedSubject = .wallpapers
|
||||
case .messageTags:
|
||||
mappedSubject = .messageTags
|
||||
}
|
||||
return PremiumDemoScreen(context: context, subject: mappedSubject, action: action)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user