Skip to content

Commit 1c6f234

Browse files
author
Isaac
committed
Merge commit '2adffc2ebc3a6f654224ecd4ca79cfa5a6e577a6'
2 parents 1f93f6b + 2adffc2 commit 1c6f234

File tree

20 files changed

+307
-163
lines changed

20 files changed

+307
-163
lines changed

submodules/LegacyComponents/PublicHeaders/LegacyComponents/TGCameraController.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ typedef enum {
4545
@property (nonatomic, strong) id<TGPhotoPaintStickersContext> stickersContext;
4646
@property (nonatomic, assign) bool shortcut;
4747

48+
@property (nonatomic, assign) int64_t sendPaidMessageStars;
49+
4850
@property (nonatomic, strong) NSAttributedString *forcedCaption;
4951

5052
@property (nonatomic, strong) NSString *recipientName;

submodules/LegacyComponents/Sources/TGCameraController.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,6 +1446,7 @@ - (void)_createContextsIfNeeded
14461446
if (editingContext == nil)
14471447
{
14481448
editingContext = [[TGMediaEditingContext alloc] init];
1449+
editingContext.sendPaidMessageStars = self.sendPaidMessageStars;
14491450
if (self.forcedCaption != nil)
14501451
[editingContext setForcedCaption:self.forcedCaption];
14511452
_editingContext = editingContext;

submodules/LegacyComponents/Sources/TGPhotoToolbarView.m

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -673,57 +673,71 @@ - (void)layoutSubviews
673673
CGFloat offset = 8.0f;
674674
if (self.frame.size.width > self.frame.size.height)
675675
{
676-
if (buttons.count == 1)
677-
{
676+
_cancelButton.frame = CGRectMake(0, 0, 49, 49);
677+
678+
CGFloat leftEdge = _cancelButton.frame.size.width;
679+
CGFloat rightEdge = 0.0f;
680+
681+
if (_starsDoneButton != nil) {
682+
CGSize buttonSize = [_starsDoneButton updateCount:_sendPaidMessageStars];
683+
rightEdge = buttonSize.width + 2.0f;
684+
[_starsDoneButton updateFrame:CGRectMake(self.frame.size.width - rightEdge, 2.0f, buttonSize.width, buttonSize.height)];
685+
} else {
686+
rightEdge = _cancelButton.frame.size.width;
687+
}
688+
689+
CGFloat availableWidth = self.frame.size.width - leftEdge - rightEdge;
690+
CGFloat startX = leftEdge;
691+
CGFloat sideOffset = 5.0f;
692+
693+
if (buttons.count == 1) {
678694
UIView *button = buttons.firstObject;
679-
button.frame = CGRectMake(CGFloor(self.frame.size.width / 2 - button.frame.size.width / 2), offset, button.frame.size.width, button.frame.size.height);
695+
CGFloat buttonX = startX + (availableWidth - button.frame.size.width) / 2;
696+
button.frame = CGRectMake(buttonX, offset, button.frame.size.width, button.frame.size.height);
680697
}
681-
else if (buttons.count == 2)
682-
{
698+
else if (buttons.count == 2) {
683699
UIView *leftButton = buttons.firstObject;
684700
UIView *rightButton = buttons.lastObject;
685701

686-
leftButton.frame = CGRectMake(CGFloor(self.frame.size.width / 5 * 2 - 5 - leftButton.frame.size.width / 2), offset, leftButton.frame.size.width, leftButton.frame.size.height);
687-
rightButton.frame = CGRectMake(CGCeil(self.frame.size.width - leftButton.frame.origin.x - rightButton.frame.size.width), offset, rightButton.frame.size.width, rightButton.frame.size.height);
702+
CGFloat leftButtonX = startX + availableWidth / 3 - leftButton.frame.size.width / 2 - sideOffset;
703+
CGFloat rightButtonX = startX + 2 * availableWidth / 3 - rightButton.frame.size.width / 2 + sideOffset;
704+
705+
leftButton.frame = CGRectMake(leftButtonX, offset, leftButton.frame.size.width, leftButton.frame.size.height);
706+
rightButton.frame = CGRectMake(rightButtonX, offset, rightButton.frame.size.width, rightButton.frame.size.height);
688707
}
689-
else if (buttons.count == 3)
690-
{
708+
else if (buttons.count == 3) {
691709
UIView *leftButton = buttons.firstObject;
692710
UIView *centerButton = [buttons objectAtIndex:1];
693711
UIView *rightButton = buttons.lastObject;
694712

695-
centerButton.frame = CGRectMake(CGFloor(self.frame.size.width / 2 - centerButton.frame.size.width / 2), offset, centerButton.frame.size.width, centerButton.frame.size.height);
696-
697-
leftButton.frame = CGRectMake(CGFloor(self.frame.size.width / 6 * 2 - 10 - leftButton.frame.size.width / 2), offset, leftButton.frame.size.width, leftButton.frame.size.height);
713+
CGFloat leftButtonX = startX + availableWidth / 4 - leftButton.frame.size.width / 2 - sideOffset;
714+
CGFloat centerButtonX = startX + availableWidth / 2 - centerButton.frame.size.width / 2;
715+
CGFloat rightButtonX = startX + 3 * availableWidth / 4 - rightButton.frame.size.width / 2 + sideOffset;
698716

699-
rightButton.frame = CGRectMake(CGCeil(self.frame.size.width - leftButton.frame.origin.x - rightButton.frame.size.width), offset, rightButton.frame.size.width, rightButton.frame.size.height);
717+
leftButton.frame = CGRectMake(leftButtonX, offset, leftButton.frame.size.width, leftButton.frame.size.height);
718+
centerButton.frame = CGRectMake(centerButtonX, offset, centerButton.frame.size.width, centerButton.frame.size.height);
719+
rightButton.frame = CGRectMake(rightButtonX, offset, rightButton.frame.size.width, rightButton.frame.size.height);
700720
}
701-
else if (buttons.count == 4)
702-
{
721+
else if (buttons.count == 4) {
703722
UIView *leftButton = buttons.firstObject;
704723
UIView *centerLeftButton = [buttons objectAtIndex:1];
705724
UIView *centerRightButton = [buttons objectAtIndex:2];
706725
UIView *rightButton = buttons.lastObject;
707726

708-
leftButton.frame = CGRectMake(CGFloor(self.frame.size.width / 8 * 2 - 3 - leftButton.frame.size.width / 2), offset, leftButton.frame.size.width, leftButton.frame.size.height);
709-
710-
centerLeftButton.frame = CGRectMake(CGFloor(self.frame.size.width / 10 * 4 + 5 - centerLeftButton.frame.size.width / 2), offset, centerLeftButton.frame.size.width, centerLeftButton.frame.size.height);
711-
712-
centerRightButton.frame = CGRectMake(CGCeil(self.frame.size.width - centerLeftButton.frame.origin.x - centerRightButton.frame.size.width), offset, centerRightButton.frame.size.width, centerRightButton.frame.size.height);
727+
CGFloat leftButtonX = startX + availableWidth / 5 - leftButton.frame.size.width / 2 - sideOffset;
728+
CGFloat centerLeftButtonX = startX + 2 * availableWidth / 5 - centerLeftButton.frame.size.width / 2 - TGScreenPixelFloor(sideOffset / 2.0);
729+
CGFloat centerRightButtonX = startX + 3 * availableWidth / 5 - centerRightButton.frame.size.width / 2 + TGScreenPixelFloor(sideOffset / 2.0);
730+
CGFloat rightButtonX = startX + 4 * availableWidth / 5 - rightButton.frame.size.width / 2 + sideOffset;
713731

714-
rightButton.frame = CGRectMake(CGCeil(self.frame.size.width - leftButton.frame.origin.x - rightButton.frame.size.width), offset, rightButton.frame.size.width, rightButton.frame.size.height);
732+
leftButton.frame = CGRectMake(leftButtonX, offset, leftButton.frame.size.width, leftButton.frame.size.height);
733+
centerLeftButton.frame = CGRectMake(centerLeftButtonX, offset, centerLeftButton.frame.size.width, centerLeftButton.frame.size.height);
734+
centerRightButton.frame = CGRectMake(centerRightButtonX, offset, centerRightButton.frame.size.width, centerRightButton.frame.size.height);
735+
rightButton.frame = CGRectMake(rightButtonX, offset, rightButton.frame.size.width, rightButton.frame.size.height);
715736
}
716737

717-
_cancelButton.frame = CGRectMake(0, 0, 49, 49);
718738
CGFloat offset = 49.0f;
719739
if (_doneButton.frame.size.width > 49.0f)
720740
offset = 60.0f;
721-
722-
if (_starsDoneButton != nil) {
723-
CGSize buttonSize = [_starsDoneButton updateCount:_sendPaidMessageStars];
724-
[_starsDoneButton updateFrame:CGRectMake(self.frame.size.width - buttonSize.width - 2.0, 49.0f - offset + 2.0f, buttonSize.width, buttonSize.height)];
725-
}
726-
727741
_doneButton.frame = CGRectMake(self.frame.size.width - offset, 49.0f - offset, _doneButton.frame.size.width, _doneButton.frame.size.height);
728742

729743
_infoLabel.frame = CGRectMake(49.0f + 10.0f, 0.0f, self.frame.size.width - (49.0f + 10.0f) * 2.0f, 49.0f);

submodules/SettingsUI/Sources/Privacy and Security/IncomingMessagePrivacyScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ public func incomingMessagePrivacyScreen(context: AccountContext, value: GlobalP
346346
updateState { state in
347347
var updatedState = state
348348
updatedState.disableFor = updatedPeerIds
349-
return state
349+
return updatedState
350350
}
351351
let settings: SelectivePrivacySettings = .enableContacts(enableFor: updatedPeerIds, disableFor: [:], enableForPremium: false, enableForBots: false)
352352
let _ = context.engine.privacy.updateSelectiveAccountPrivacySettings(type: .noPaidMessages, settings: settings).start()

submodules/SettingsUI/Sources/Privacy and Security/PrivacyAndSecurityController.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,11 @@ private enum PrivacyAndSecurityEntry: ItemListNodeEntry {
432432
})
433433
case let .messagePrivacy(theme, value, hasPremium):
434434
let label: String
435-
switch value {
435+
var effectiveValue = value
436+
if !hasPremium {
437+
effectiveValue = .everybody
438+
}
439+
switch effectiveValue {
436440
case .everybody:
437441
label = presentationData.strings.Settings_Privacy_Messages_ValueEveryone
438442
case .requirePremium:
@@ -669,7 +673,7 @@ private func privacyAndSecurityControllerEntries(
669673
entries.append(.forwardPrivacy(presentationData.theme, presentationData.strings.Privacy_Forwards, stringForSelectiveSettings(strings: presentationData.strings, settings: privacySettings.forwards)))
670674
entries.append(.voiceCallPrivacy(presentationData.theme, presentationData.strings.Privacy_Calls, stringForSelectiveSettings(strings: presentationData.strings, settings: privacySettings.voiceCalls)))
671675
if !isPremiumDisabled || isPremium {
672-
entries.append(.voiceMessagePrivacy(presentationData.theme, presentationData.strings.Privacy_VoiceMessages, stringForSelectiveSettings(strings: presentationData.strings, settings: privacySettings.voiceMessages), isPremium))
676+
entries.append(.voiceMessagePrivacy(presentationData.theme, presentationData.strings.Privacy_VoiceMessages, stringForSelectiveSettings(strings: presentationData.strings, settings: isPremium ? privacySettings.voiceMessages : .enableEveryone(disableFor: [:])), isPremium))
673677
entries.append(.messagePrivacy(presentationData.theme, privacySettings.globalSettings.nonContactChatsPrivacy, isPremium))
674678
}
675679
entries.append(.groupPrivacy(presentationData.theme, presentationData.strings.PrivacySettings_InviteItem, stringForSelectiveSettings(strings: presentationData.strings, settings: privacySettings.groupInvitations)))

submodules/ShareController/Sources/ShareController.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -674,8 +674,8 @@ public final class ShareController: ViewController {
674674

675675
if case let .messages(messages) = self.subject {
676676
messageCount = messages.count
677-
} else if case let .image(images) = self.subject {
678-
messageCount = images.count
677+
} else if case .image = self.subject {
678+
messageCount = 1
679679
} else if case let .fromExternal(count, _) = self.subject {
680680
messageCount = count
681681
}
@@ -2516,6 +2516,8 @@ public final class ShareController: ViewController {
25162516
peers.append(EngineRenderedPeer(entryData.renderedPeer))
25172517
if let user = peer as? TelegramUser, user.flags.contains(.requirePremium) || user.flags.contains(.requireStars) {
25182518
possiblePremiumRequiredPeers.insert(user.id)
2519+
} else if let channel = peer as? TelegramChannel, let _ = channel.sendPaidMessageStars {
2520+
possiblePremiumRequiredPeers.insert(channel.id)
25192521
}
25202522
}
25212523
default:
@@ -2529,6 +2531,7 @@ public final class ShareController: ViewController {
25292531
keys.append(peerPresencesKey)
25302532

25312533
for id in possiblePremiumRequiredPeers {
2534+
keys.append(.basicPeer(id))
25322535
keys.append(.cachedPeerData(peerId: id))
25332536
}
25342537

@@ -2546,6 +2549,8 @@ public final class ShareController: ViewController {
25462549
if let view = views.views[.cachedPeerData(peerId: id)] as? CachedPeerDataView, let data = view.cachedPeerData as? CachedUserData {
25472550
requiresPremiumForMessaging[id] = data.flags.contains(.premiumRequired)
25482551
requiresStars[id] = data.sendPaidMessageStars?.value
2552+
} else if let view = views.views[.basicPeer(id)] as? BasicPeerView, let channel = view.peer as? TelegramChannel {
2553+
requiresStars[id] = channel.sendPaidMessageStars?.value
25492554
} else {
25502555
requiresPremiumForMessaging[id] = false
25512556
}

submodules/TelegramCore/Sources/State/PendingMessageManager.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ public final class PendingMessageManager {
254254
context.sendDisposable.dispose()
255255
context.uploadDisposable.dispose()
256256
context.activityDisposable.dispose()
257+
context.postponeDisposable.dispose()
257258

258259
if context.status != nil {
259260
context.status = nil

submodules/TelegramUI/Components/ChatEntityKeyboardInputNode/Sources/ChatEntityKeyboardInputNode.swift

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,7 +2153,7 @@ public final class ChatEntityKeyboardInputNode: ChatInputNode {
21532153
})))
21542154
}
21552155

2156-
if isSaved {
2156+
if isSaved && interfaceState.sendPaidMessageStars == nil {
21572157
items.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_SendMessage_ScheduleMessage, icon: { theme in
21582158
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Menu/ScheduleIcon"), color: theme.actionSheet.primaryTextColor)
21592159
}, action: { [weak self] _, f in
@@ -2764,6 +2764,13 @@ public final class EmojiContentPeekBehaviorImpl: EmojiContentPeekBehavior {
27642764
}))
27652765
}
27662766
} else {
2767+
let sendPaidMessageStars: Signal<StarsAmount?, NoError>
2768+
if let chatPeerId = strongSelf.chatPeerId {
2769+
sendPaidMessageStars = context.engine.data.get(TelegramEngine.EngineData.Item.Peer.SendPaidMessageStars(id: chatPeerId))
2770+
} else {
2771+
sendPaidMessageStars = .single(nil)
2772+
}
2773+
27672774
return combineLatest(
27682775
context.engine.stickers.isStickerSaved(id: file.fileId),
27692776
context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: accountPeerId)) |> map { peer -> Bool in
@@ -2772,10 +2779,11 @@ public final class EmojiContentPeekBehaviorImpl: EmojiContentPeekBehavior {
27722779
hasPremium = true
27732780
}
27742781
return hasPremium
2775-
}
2782+
},
2783+
sendPaidMessageStars
27762784
)
27772785
|> deliverOnMainQueue
2778-
|> map { [weak itemLayer] isStarred, hasPremium -> (UIView, CGRect, PeekControllerContent)? in
2786+
|> map { [weak itemLayer] isStarred, hasPremium, sendPaidMessageStars -> (UIView, CGRect, PeekControllerContent)? in
27792787
guard let strongSelf = self, let itemLayer = itemLayer else {
27802788
return nil
27812789
}
@@ -2805,18 +2813,20 @@ public final class EmojiContentPeekBehaviorImpl: EmojiContentPeekBehavior {
28052813
})))
28062814
}
28072815

2808-
menuItems.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_SendMessage_ScheduleMessage, icon: { theme in
2809-
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Menu/ScheduleIcon"), color: theme.actionSheet.primaryTextColor)
2810-
}, action: { _, f in
2811-
if let strongSelf = self, let peekController = strongSelf.peekController {
2812-
if let animationNode = (peekController.contentNode as? StickerPreviewPeekContentNode)?.animationNode {
2813-
let _ = sendSticker(.standalone(media: file), false, true, nil, false, animationNode.view, animationNode.bounds, nil)
2814-
} else if let imageNode = (peekController.contentNode as? StickerPreviewPeekContentNode)?.imageNode {
2815-
let _ = sendSticker(.standalone(media: file), false, true, nil, false, imageNode.view, imageNode.bounds, nil)
2816+
if sendPaidMessageStars == nil {
2817+
menuItems.append(.action(ContextMenuActionItem(text: presentationData.strings.Conversation_SendMessage_ScheduleMessage, icon: { theme in
2818+
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Input/Menu/ScheduleIcon"), color: theme.actionSheet.primaryTextColor)
2819+
}, action: { _, f in
2820+
if let strongSelf = self, let peekController = strongSelf.peekController {
2821+
if let animationNode = (peekController.contentNode as? StickerPreviewPeekContentNode)?.animationNode {
2822+
let _ = sendSticker(.standalone(media: file), false, true, nil, false, animationNode.view, animationNode.bounds, nil)
2823+
} else if let imageNode = (peekController.contentNode as? StickerPreviewPeekContentNode)?.imageNode {
2824+
let _ = sendSticker(.standalone(media: file), false, true, nil, false, imageNode.view, imageNode.bounds, nil)
2825+
}
28162826
}
2817-
}
2818-
f(.default)
2819-
})))
2827+
f(.default)
2828+
})))
2829+
}
28202830
}
28212831

28222832
menuItems.append(

0 commit comments

Comments
 (0)