diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 6d7999efb1..39da024bab 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -13038,6 +13038,7 @@ Sorry for the inconvenience."; "Gift.Send.HideMyName" = "Hide My Name"; "Gift.Send.HideMyName.Info" = "Hide my name and message from visitors to %1$@'s profile. %2$@ will still see your name and message."; "Gift.Send.Send" = "Send a Gift for"; +"Gift.Send.Limited" = "Limited"; "Profile.SendGift" = "Send a Gift"; "Settings.SendGift" = "Send a Gift"; diff --git a/submodules/Display/Source/MinimizeKeyboardGestureRecognizer.swift b/submodules/Display/Source/MinimizeKeyboardGestureRecognizer.swift deleted file mode 100644 index b8c2ed10c5..0000000000 --- a/submodules/Display/Source/MinimizeKeyboardGestureRecognizer.swift +++ /dev/null @@ -1,20 +0,0 @@ -import Foundation -import UIKit - -final class MinimizeKeyboardGestureRecognizer: UISwipeGestureRecognizer, UIGestureRecognizerDelegate { - override init(target: Any?, action: Selector?) { - super.init(target: target, action: action) - - self.cancelsTouchesInView = false - self.delaysTouchesBegan = false - self.delaysTouchesEnded = false - self.delegate = self - - self.direction = [.left, .right] - self.numberOfTouchesRequired = 2 - } - - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - return true - } -} diff --git a/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift b/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift index e383df3049..713deadceb 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftSetupScreen/Sources/GiftSetupScreen.swift @@ -143,6 +143,8 @@ final class GiftSetupScreenComponent: Component { self.addSubview(self.scrollView) self.scrollView.layer.addSublayer(self.topOverscrollLayer) + + self.disablesInteractiveKeyboardGestureRecognizer = true } required init?(coder: NSCoder) { @@ -352,6 +354,8 @@ final class GiftSetupScreenComponent: Component { } navigationController.setViewControllers(controllers, animated: true) } + + starsContext.load(force: true) }) }) } @@ -459,9 +463,7 @@ final class GiftSetupScreenComponent: Component { return } if let textInputView = self.introSection.findTaggedView(tag: self.textInputTag) as? ListMultilineTextFieldItemComponent.View { - if self.textInputState.isEditing { - textInputView.insertText(text: text) - } + textInputView.insertText(text: text) } }, backwardsDeleteText: { [weak self] in @@ -510,6 +512,16 @@ final class GiftSetupScreenComponent: Component { } } ) + + if case .starGift = component.subject { + self.optionsDisposable = (component.context.engine.payments.starsTopUpOptions() + |> deliverOnMainQueue).start(next: { [weak self] options in + guard let self else { + return + } + self.options = options + }) + } } let environment = environment[EnvironmentType.self].value @@ -566,14 +578,14 @@ final class GiftSetupScreenComponent: Component { if case let .starGift(starGift) = component.subject, let availability = starGift.availability { let remains: Int32 = availability.remains let position = CGFloat(remains) / CGFloat(availability.total) - let remainsString = "\(remains)" //presentationStringsFormattedNumber(remains, environment.dateTimeFormat.groupingSeparator) + let remainsString = "\(remains)" let totalString = presentationStringsFormattedNumber(availability.total, environment.dateTimeFormat.groupingSeparator) let remainingCountSize = self.remainingCount.update( transition: transition, component: AnyComponent(RemainingCountComponent( inactiveColor: environment.theme.list.itemBlocksSeparatorColor.withAlphaComponent(0.3), activeColors: [UIColor(rgb: 0x5bc2ff), UIColor(rgb: 0x2d9eff)], - inactiveTitle: "Limited", + inactiveTitle: environment.strings.Gift_Send_Limited, inactiveValue: "", inactiveTitleColor: environment.theme.list.itemSecondaryTextColor, activeTitle: "", @@ -1001,7 +1013,7 @@ final class GiftSetupScreenComponent: Component { } } } - if self.recenterOnTag == nil && self.previousHadInputHeight != (environment.inputHeight > 0.0) { + if self.recenterOnTag == nil && self.previousHadInputHeight != (environment.inputHeight > 0.0), case .keyboard = self.currentInputMode { if self.textInputState.isEditing { self.recenterOnTag = self.textInputTag } @@ -1251,9 +1263,6 @@ public final class GiftSetupScreen: ViewControllerComponentContainer { fatalError("init(coder:) has not been implemented") } - deinit { - } - @objc private func cancelPressed() { self.dismiss() } diff --git a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftViewScreen.swift b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftViewScreen.swift index a97db9618a..ff09e4d3a4 100644 --- a/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftViewScreen.swift +++ b/submodules/TelegramUI/Components/Gifts/GiftViewScreen/Sources/GiftViewScreen.swift @@ -181,6 +181,7 @@ private final class GiftViewSheetContent: CombinedComponent { let text: String? let entities: [MessageTextEntity]? let limitTotal: Int32? + var outgoing = false var incoming = false var savedToProfile = false var converted = false @@ -193,6 +194,11 @@ private final class GiftViewSheetContent: CombinedComponent { entities = arguments.entities limitTotal = arguments.gift.availability?.total convertStars = arguments.convertStars + if case .message = component.subject { + outgoing = !arguments.incoming + } else { + outgoing = false + } incoming = arguments.incoming || arguments.peerId == component.context.account.peerId savedToProfile = arguments.savedToProfile converted = arguments.converted @@ -238,12 +244,12 @@ private final class GiftViewSheetContent: CombinedComponent { } var formattedAmount = presentationStringsFormattedNumber(abs(Int32(stars)), dateTimeFormat.groupingSeparator) - if !incoming && stars > 0 { + if outgoing { formattedAmount = "- \(formattedAmount)" } let countFont: UIFont = Font.semibold(17.0) let amountText = formattedAmount - let countColor = incoming ? theme.list.itemDisclosureActions.constructive.fillColor : theme.list.itemDestructiveColor + let countColor = outgoing ? theme.list.itemDestructiveColor : theme.list.itemDisclosureActions.constructive.fillColor let title = title.update( component: MultilineTextComponent( @@ -367,7 +373,8 @@ private final class GiftViewSheetContent: CombinedComponent { animationCache: component.context.animationCache, animationRenderer: component.context.animationRenderer, placeholderColor: theme.list.mediaPlaceholderColor, - text: .plain(attributedText) + text: .plain(attributedText), + maximumNumberOfLines: 0 ) ) )) @@ -1071,17 +1078,26 @@ private final class TableComponent: CombinedComponent { } else { insets = UIEdgeInsets(top: 0.0, left: horizontalPadding, bottom: 0.0, right: horizontalPadding) } - let valueChild = valueChildren[item.id].update( - component: item.component, - availableSize: CGSize(width: rightColumnWidth - insets.left - insets.right, height: context.availableSize.height), - transition: context.transition - ) - updatedValueChildren.append((valueChild, insets)) var titleHeight: CGFloat = 0.0 if let titleChild = updatedTitleChildren[i] { titleHeight = titleChild.size.height } + + let availableValueWidth: CGFloat + if titleHeight > 0.0 { + availableValueWidth = rightColumnWidth + } else { + availableValueWidth = context.availableSize.width + } + + let valueChild = valueChildren[item.id].update( + component: item.component, + availableSize: CGSize(width: availableValueWidth - insets.left - insets.right, height: context.availableSize.height), + transition: context.transition + ) + updatedValueChildren.append((valueChild, insets)) + let rowHeight = max(40.0, max(titleHeight, valueChild.size.height) + verticalPadding * 2.0) rowHeights[i] = rowHeight totalHeight += rowHeight diff --git a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoGiftsPaneNode.swift b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoGiftsPaneNode.swift index dce8f22379..4becea5f6d 100644 --- a/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoGiftsPaneNode.swift +++ b/submodules/TelegramUI/Components/PeerInfo/PeerInfoVisualMediaPaneNode/Sources/PeerInfoGiftsPaneNode.swift @@ -138,8 +138,10 @@ public final class PeerInfoGiftsPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScr var validIds: [AnyHashable] = [] var itemFrame = CGRect(origin: CGPoint(x: sideInset, y: 60.0), size: starsOptionSize) + + var index: Int32 = 0 for product in starsProducts { - let itemId = AnyHashable(product.date) + let itemId = AnyHashable(index) validIds.append(itemId) var itemTransition = transition @@ -221,6 +223,7 @@ public final class PeerInfoGiftsPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScr itemFrame.origin.x = sideInset itemFrame.origin.y += starsOptionSize.height + optionSpacing } + index += 1 } var removeIds: [AnyHashable] = [] @@ -243,7 +246,7 @@ public final class PeerInfoGiftsPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScr self.starsItems.removeValue(forKey: id) } - var contentHeight = ceil(CGFloat(starsProducts.count) / 3.0) * starsOptionSize.height + 60.0 + 16.0 + var contentHeight = ceil(CGFloat(starsProducts.count) / 3.0) * (starsOptionSize.height + optionSpacing) - optionSpacing + 60.0 + 16.0 if self.peerId == self.context.account.peerId { let transition = ComponentTransition.immediate diff --git a/versions.json b/versions.json index da4ab2f6e5..3556a03d85 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,5 @@ { - "app": "11.2", + "app": "11.2.1", "xcode": "16.0", "bazel": "7.3.1", "macos": "15.0"