mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
79ac0a6c5f
commit
be9463e80b
@ -11336,12 +11336,10 @@ Sorry for the inconvenience.";
|
|||||||
"Premium.Business.Location.Text" = "Display the location of your business on your account.";
|
"Premium.Business.Location.Text" = "Display the location of your business on your account.";
|
||||||
|
|
||||||
"Premium.Business.Hours.Title" = "Opening Hours";
|
"Premium.Business.Hours.Title" = "Opening Hours";
|
||||||
"Premium.Business.Hours.Text" = "Show to your customers when you are
|
"Premium.Business.Hours.Text" = "Show to your customers when you are open for business.";
|
||||||
open for business.";
|
|
||||||
|
|
||||||
"Premium.Business.Replies.Title" = "Quick Replies";
|
"Premium.Business.Replies.Title" = "Quick Replies";
|
||||||
"Premium.Business.Replies.Text" = "Set up shortcuts with rich text and media
|
"Premium.Business.Replies.Text" = "Set up shortcuts with rich text and media to respond to messages faster.";
|
||||||
to respond to messages faster.";
|
|
||||||
|
|
||||||
"Premium.Business.Greetings.Title" = "Greeting Messages";
|
"Premium.Business.Greetings.Title" = "Greeting Messages";
|
||||||
"Premium.Business.Greetings.Text" = "Create greetings that will be automatically sent to new customers.";
|
"Premium.Business.Greetings.Text" = "Create greetings that will be automatically sent to new customers.";
|
||||||
|
@ -3141,10 +3141,14 @@ private final class PremiumIntroScreenComponent: CombinedComponent {
|
|||||||
let secondaryTitleText: String
|
let secondaryTitleText: String
|
||||||
var isAnonymous = false
|
var isAnonymous = false
|
||||||
if var otherPeerName = state.otherPeerName {
|
if var otherPeerName = state.otherPeerName {
|
||||||
if case let .emojiStatus(_, _, file, maybeEmojiPack) = context.component.source, let emojiPack = maybeEmojiPack, case let .result(info, _, _) = emojiPack {
|
if case let .emojiStatus(peerId, _, file, maybeEmojiPack) = context.component.source, let emojiPack = maybeEmojiPack, case let .result(info, _, _) = emojiPack {
|
||||||
loadedEmojiPack = maybeEmojiPack
|
loadedEmojiPack = maybeEmojiPack
|
||||||
highlightableLinks = true
|
highlightableLinks = true
|
||||||
|
|
||||||
|
if peerId.isGroupOrChannel, otherPeerName.count > 20 {
|
||||||
|
otherPeerName = otherPeerName.prefix(20).trimmingCharacters(in: .whitespacesAndNewlines) + "\u{2026}"
|
||||||
|
}
|
||||||
|
|
||||||
var packReference: StickerPackReference?
|
var packReference: StickerPackReference?
|
||||||
if let file = file {
|
if let file = file {
|
||||||
for attribute in file.attributes {
|
for attribute in file.attributes {
|
||||||
|
@ -17,6 +17,12 @@ public final class AudioTranscriptionButtonComponent: Component {
|
|||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
case let .custom(lhsBackgroundColor, lhsForegroundColor):
|
||||||
|
if case let .custom(rhsBackgroundColor, rhsForegroundColor) = rhs {
|
||||||
|
return lhsBackgroundColor == rhsBackgroundColor && lhsForegroundColor == rhsForegroundColor
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
case let .freeform(lhsFreeform, lhsForeground):
|
case let .freeform(lhsFreeform, lhsForeground):
|
||||||
if case let .freeform(rhsFreeform, rhsForeground) = rhs, lhsFreeform == rhsFreeform, lhsForeground == rhsForeground {
|
if case let .freeform(rhsFreeform, rhsForeground) = rhs, lhsFreeform == rhsFreeform, lhsForeground == rhsForeground {
|
||||||
return true
|
return true
|
||||||
@ -27,6 +33,7 @@ public final class AudioTranscriptionButtonComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case bubble(PresentationThemePartedColors)
|
case bubble(PresentationThemePartedColors)
|
||||||
|
case custom(UIColor, UIColor)
|
||||||
case freeform((UIColor, Bool), UIColor)
|
case freeform((UIColor, Bool), UIColor)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,6 +108,9 @@ public final class AudioTranscriptionButtonComponent: Component {
|
|||||||
case let .bubble(theme):
|
case let .bubble(theme):
|
||||||
foregroundColor = theme.bubble.withWallpaper.reactionActiveBackground
|
foregroundColor = theme.bubble.withWallpaper.reactionActiveBackground
|
||||||
backgroundColor = theme.bubble.withWallpaper.reactionInactiveBackground
|
backgroundColor = theme.bubble.withWallpaper.reactionInactiveBackground
|
||||||
|
case let .custom(backgroundColorValue, foregroundColorValue):
|
||||||
|
foregroundColor = foregroundColorValue
|
||||||
|
backgroundColor = backgroundColorValue
|
||||||
case let .freeform(colorAndBlur, color):
|
case let .freeform(colorAndBlur, color):
|
||||||
foregroundColor = color
|
foregroundColor = color
|
||||||
backgroundColor = .clear
|
backgroundColor = .clear
|
||||||
|
@ -728,7 +728,7 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
|
|||||||
|
|
||||||
let contentFileSizeAndApply: (CGSize, ChatMessageInteractiveFileNode.Apply)?
|
let contentFileSizeAndApply: (CGSize, ChatMessageInteractiveFileNode.Apply)?
|
||||||
if let contentFileFinalizeLayout {
|
if let contentFileFinalizeLayout {
|
||||||
let (size, apply) = contentFileFinalizeLayout(resultingWidth - insets.left - insets.right)
|
let (size, apply) = contentFileFinalizeLayout(resultingWidth - insets.left - insets.right - 6.0)
|
||||||
contentFileSizeAndApply = (size, apply)
|
contentFileSizeAndApply = (size, apply)
|
||||||
} else {
|
} else {
|
||||||
contentFileSizeAndApply = nil
|
contentFileSizeAndApply = nil
|
||||||
@ -846,7 +846,7 @@ public final class ChatMessageAttachedContentNode: ASDisplayNode {
|
|||||||
offsetY: actualSize.height
|
offsetY: actualSize.height
|
||||||
))
|
))
|
||||||
|
|
||||||
actualSize.height += contentFileSize.height
|
actualSize.height += contentFileSize.height + 9.0
|
||||||
}
|
}
|
||||||
case .actionButton:
|
case .actionButton:
|
||||||
if let (actionButtonSize, _) = actionButtonSizeAndApply {
|
if let (actionButtonSize, _) = actionButtonSizeAndApply {
|
||||||
|
@ -1329,10 +1329,16 @@ public final class ChatMessageInteractiveFileNode: ASDisplayNode {
|
|||||||
strongSelf.view.addSubview(audioTranscriptionButton)
|
strongSelf.view.addSubview(audioTranscriptionButton)
|
||||||
added = true
|
added = true
|
||||||
}
|
}
|
||||||
|
let buttonTheme: AudioTranscriptionButtonComponent.Theme
|
||||||
|
if let customTintColor = arguments.customTintColor {
|
||||||
|
buttonTheme = .custom(customTintColor.withMultipliedAlpha(0.1), customTintColor)
|
||||||
|
} else {
|
||||||
|
buttonTheme = .bubble(arguments.incoming ? arguments.presentationData.theme.theme.chat.message.incoming : arguments.presentationData.theme.theme.chat.message.outgoing)
|
||||||
|
}
|
||||||
let audioTranscriptionButtonSize = audioTranscriptionButton.update(
|
let audioTranscriptionButtonSize = audioTranscriptionButton.update(
|
||||||
transition: animation.isAnimated ? .easeInOut(duration: 0.3) : .immediate,
|
transition: animation.isAnimated ? .easeInOut(duration: 0.3) : .immediate,
|
||||||
component: AnyComponent(AudioTranscriptionButtonComponent(
|
component: AnyComponent(AudioTranscriptionButtonComponent(
|
||||||
theme: .bubble(arguments.incoming ? arguments.presentationData.theme.theme.chat.message.incoming : arguments.presentationData.theme.theme.chat.message.outgoing),
|
theme: buttonTheme,
|
||||||
transcriptionState: effectiveAudioTranscriptionState,
|
transcriptionState: effectiveAudioTranscriptionState,
|
||||||
pressed: {
|
pressed: {
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
|
@ -427,6 +427,10 @@ final class ShareWithPeersScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
|
||||||
|
self.endEditing(true)
|
||||||
|
}
|
||||||
|
|
||||||
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
|
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
|
||||||
guard let itemLayout = self.itemLayout, let topOffsetDistance = self.topOffsetDistance else {
|
guard let itemLayout = self.itemLayout, let topOffsetDistance = self.topOffsetDistance else {
|
||||||
return
|
return
|
||||||
@ -801,7 +805,7 @@ final class ShareWithPeersScreenComponent: Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updateModalOverlayTransition(transition: Transition) {
|
private func updateModalOverlayTransition(transition: Transition) {
|
||||||
guard let component = self.component, let environment = self.environment, let itemLayout = self.itemLayout else {
|
guard let component = self.component, let environment = self.environment, let itemLayout = self.itemLayout, !self.isDismissed else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2071,6 +2075,14 @@ final class ShareWithPeersScreenComponent: Component {
|
|||||||
self.selectedCategories.insert(.everyone)
|
self.selectedCategories.insert(.everyone)
|
||||||
}
|
}
|
||||||
self.state?.updated(transition: Transition(animation: .curve(duration: 0.35, curve: .spring)))
|
self.state?.updated(transition: Transition(animation: .curve(duration: 0.35, curve: .spring)))
|
||||||
|
},
|
||||||
|
isFocusedUpdated: { [weak self] isFocused in
|
||||||
|
guard let self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if isFocused {
|
||||||
|
self.scrollView.setContentOffset(CGPoint(x: 0.0, y: -self.scrollView.contentInset.top), animated: true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
)),
|
)),
|
||||||
environment: {},
|
environment: {},
|
||||||
@ -2122,11 +2134,11 @@ final class ShareWithPeersScreenComponent: Component {
|
|||||||
|
|
||||||
transition.setFrame(view: self.dimView, frame: CGRect(origin: CGPoint(), size: availableSize))
|
transition.setFrame(view: self.dimView, frame: CGRect(origin: CGPoint(), size: availableSize))
|
||||||
if case .members = component.stateContext.subject {
|
if case .members = component.stateContext.subject {
|
||||||
self.dimView .isHidden = true
|
self.dimView.isHidden = true
|
||||||
} else if case .channels = component.stateContext.subject {
|
} else if case .channels = component.stateContext.subject {
|
||||||
self.dimView .isHidden = true
|
self.dimView.isHidden = true
|
||||||
} else {
|
} else {
|
||||||
self.dimView .isHidden = false
|
self.dimView.isHidden = false
|
||||||
}
|
}
|
||||||
|
|
||||||
let categoryItemSize = self.categoryTemplateItem.update(
|
let categoryItemSize = self.categoryTemplateItem.update(
|
||||||
|
@ -88,6 +88,7 @@ public final class TokenListTextField: Component {
|
|||||||
public let tokens: [Token]
|
public let tokens: [Token]
|
||||||
public let sideInset: CGFloat
|
public let sideInset: CGFloat
|
||||||
public let deleteToken: (AnyHashable) -> Void
|
public let deleteToken: (AnyHashable) -> Void
|
||||||
|
public let isFocusedUpdated: (Bool) -> Void
|
||||||
|
|
||||||
public init(
|
public init(
|
||||||
externalState: ExternalState,
|
externalState: ExternalState,
|
||||||
@ -96,7 +97,8 @@ public final class TokenListTextField: Component {
|
|||||||
placeholder: String,
|
placeholder: String,
|
||||||
tokens: [Token],
|
tokens: [Token],
|
||||||
sideInset: CGFloat,
|
sideInset: CGFloat,
|
||||||
deleteToken: @escaping (AnyHashable) -> Void
|
deleteToken: @escaping (AnyHashable) -> Void,
|
||||||
|
isFocusedUpdated: @escaping (Bool) -> Void = { _ in }
|
||||||
) {
|
) {
|
||||||
self.externalState = externalState
|
self.externalState = externalState
|
||||||
self.context = context
|
self.context = context
|
||||||
@ -105,6 +107,7 @@ public final class TokenListTextField: Component {
|
|||||||
self.tokens = tokens
|
self.tokens = tokens
|
||||||
self.sideInset = sideInset
|
self.sideInset = sideInset
|
||||||
self.deleteToken = deleteToken
|
self.deleteToken = deleteToken
|
||||||
|
self.isFocusedUpdated = isFocusedUpdated
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func ==(lhs: TokenListTextField, rhs: TokenListTextField) -> Bool {
|
public static func ==(lhs: TokenListTextField, rhs: TokenListTextField) -> Bool {
|
||||||
@ -191,6 +194,7 @@ public final class TokenListTextField: Component {
|
|||||||
guard let self else {
|
guard let self else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
self.component?.isFocusedUpdated(self.tokenListNode?.isFocused ?? false)
|
||||||
self.componentState?.updated(transition: Transition(animation: .curve(duration: 0.35, curve: .spring)))
|
self.componentState?.updated(transition: Transition(animation: .curve(duration: 0.35, curve: .spring)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user