mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Various Improvements
This commit is contained in:
parent
18f5f3d0d3
commit
5dac5609cb
@ -6275,6 +6275,7 @@ Sorry for the inconvenience.";
|
|||||||
"Conversation.EmailCopied" = "Email copied to clipboard";
|
"Conversation.EmailCopied" = "Email copied to clipboard";
|
||||||
"Conversation.UsernameCopied" = "Username copied to clipboard";
|
"Conversation.UsernameCopied" = "Username copied to clipboard";
|
||||||
"Conversation.CardNumberCopied" = "Card number copied to clipboard";
|
"Conversation.CardNumberCopied" = "Card number copied to clipboard";
|
||||||
|
"Conversation.PrivateMessageLinkCopiedLong" = "Link copied to clipboard. This link will only work for members of this chat.";
|
||||||
|
|
||||||
"Conversation.StickerAddedToFavorites" = "Sticker was added to Favorites";
|
"Conversation.StickerAddedToFavorites" = "Sticker was added to Favorites";
|
||||||
"Conversation.StickerRemovedFromFavorites" = "Sticker was removed from Favorites";
|
"Conversation.StickerRemovedFromFavorites" = "Sticker was removed from Favorites";
|
||||||
|
@ -8,6 +8,7 @@ import Display
|
|||||||
import AsyncDisplayKit
|
import AsyncDisplayKit
|
||||||
import TelegramPresentationData
|
import TelegramPresentationData
|
||||||
import TextFormat
|
import TextFormat
|
||||||
|
import UndoUI
|
||||||
|
|
||||||
final class TermsOfServiceControllerNode: ViewControllerTracingNode {
|
final class TermsOfServiceControllerNode: ViewControllerTracingNode {
|
||||||
private let presentationData: PresentationData
|
private let presentationData: PresentationData
|
||||||
@ -177,9 +178,13 @@ final class TermsOfServiceControllerNode: ViewControllerTracingNode {
|
|||||||
actionSheet?.dismissAnimated()
|
actionSheet?.dismissAnimated()
|
||||||
self?.openUrl(url)
|
self?.openUrl(url)
|
||||||
}),
|
}),
|
||||||
ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_LinkDialogCopy, color: .accent, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_LinkDialogCopy, color: .accent, action: { [weak actionSheet, weak self] in
|
||||||
actionSheet?.dismissAnimated()
|
actionSheet?.dismissAnimated()
|
||||||
UIPasteboard.general.string = url
|
UIPasteboard.general.string = url
|
||||||
|
|
||||||
|
if let strongSelf = self {
|
||||||
|
strongSelf.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .linkCopied(text: strongSelf.presentationData.strings.Conversation_LinkCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), nil)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
]), ActionSheetItemGroup(items: [
|
]), ActionSheetItemGroup(items: [
|
||||||
ActionSheetButtonItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -806,9 +806,9 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState
|
|||||||
}
|
}
|
||||||
|
|
||||||
if warnAboutPrivate {
|
if warnAboutPrivate {
|
||||||
controllerInteraction.presentGlobalOverlayController(OverlayStatusController(theme: presentationData.theme, type: .genericSuccess(presentationData.strings.Conversation_PrivateMessageLinkCopied, true)), nil)
|
controllerInteraction.displayUndo(.linkCopied(text: presentationData.strings.Conversation_PrivateMessageLinkCopiedLong))
|
||||||
} else {
|
} else {
|
||||||
controllerInteraction.presentGlobalOverlayController(OverlayStatusController(theme: presentationData.theme, type: .genericSuccess(presentationData.strings.GroupInfo_InviteLink_CopyAlert_Success, false)), nil)
|
controllerInteraction.displayUndo(.linkCopied(text: presentationData.strings.Conversation_LinkCopied))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -38,6 +38,8 @@ final class ChatRecentActionsController: TelegramBaseController {
|
|||||||
|
|
||||||
super.init(context: context, navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData), mediaAccessoryPanelVisibility: .specific(size: .compact), locationBroadcastPanelSource: .none, groupCallPanelSource: .none)
|
super.init(context: context, navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData), mediaAccessoryPanelVisibility: .specific(size: .compact), locationBroadcastPanelSource: .none, groupCallPanelSource: .none)
|
||||||
|
|
||||||
|
self.automaticallyControlPresentationContextLayout = false
|
||||||
|
|
||||||
self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
|
self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style
|
||||||
|
|
||||||
self.interaction = ChatRecentActionsInteraction(displayInfoAlert: { [weak self] in
|
self.interaction = ChatRecentActionsInteraction(displayInfoAlert: { [weak self] in
|
||||||
@ -198,6 +200,10 @@ final class ChatRecentActionsController: TelegramBaseController {
|
|||||||
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
||||||
super.containerLayoutUpdated(layout, transition: transition)
|
super.containerLayoutUpdated(layout, transition: transition)
|
||||||
|
|
||||||
|
var childrenLayout = layout
|
||||||
|
childrenLayout.intrinsicInsets.bottom += 49.0
|
||||||
|
self.presentationContext.containerLayoutUpdated(childrenLayout, transition: transition)
|
||||||
|
|
||||||
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)
|
self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,9 +807,12 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode {
|
|||||||
|
|
||||||
private func openMessageContextMenu(message: Message, selectAll: Bool, node: ASDisplayNode, frame: CGRect) {
|
private func openMessageContextMenu(message: Message, selectAll: Bool, node: ASDisplayNode, frame: CGRect) {
|
||||||
var actions: [ContextMenuAction] = []
|
var actions: [ContextMenuAction] = []
|
||||||
if !message.text.isEmpty {
|
if !message.text.isEmpty {
|
||||||
actions.append(ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: {
|
actions.append(ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: {
|
||||||
UIPasteboard.general.string = message.text
|
UIPasteboard.general.string = message.text
|
||||||
|
|
||||||
|
let content: UndoOverlayContent = .copy(text: self.presentationData.strings.Conversation_TextCopied)
|
||||||
|
self.presentController(UndoOverlayController(presentationData: self.presentationData, content: content, elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), .current, nil)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1755,6 +1755,9 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.Conversation_ContextMenuCopyLink, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Copy"), color: theme.contextMenu.primaryColor) }, action: { c, _ in
|
items.append(.action(ContextMenuActionItem(text: strongSelf.presentationData.strings.Conversation_ContextMenuCopyLink, icon: { theme in generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Copy"), color: theme.contextMenu.primaryColor) }, action: { c, _ in
|
||||||
c.dismiss(completion: {})
|
c.dismiss(completion: {})
|
||||||
UIPasteboard.general.string = linkForCopying
|
UIPasteboard.general.string = linkForCopying
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
self?.controller?.present(UndoOverlayController(presentationData: presentationData, content: .linkCopied(text: presentationData.strings.Conversation_LinkCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .window(.root))
|
||||||
})))
|
})))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4571,6 +4574,7 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
guard let data = self.data, let peer = data.peer, let controller = self.controller else {
|
guard let data = self.data, let peer = data.peer, let controller = self.controller else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
let context = self.context
|
||||||
switch subject {
|
switch subject {
|
||||||
case .bio:
|
case .bio:
|
||||||
var text: String?
|
var text: String?
|
||||||
@ -4582,8 +4586,11 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
text = cachedData.about
|
text = cachedData.about
|
||||||
}
|
}
|
||||||
if let text = text, !text.isEmpty {
|
if let text = text, !text.isEmpty {
|
||||||
let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: {
|
let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: { [weak self] in
|
||||||
UIPasteboard.general.string = text
|
UIPasteboard.general.string = text
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
self?.controller?.present(UndoOverlayController(presentationData: presentationData, content: .copy(text: presentationData.strings.Conversation_TextCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .window(.root))
|
||||||
})])
|
})])
|
||||||
controller.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak self, weak sourceNode] in
|
controller.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak self, weak sourceNode] in
|
||||||
if let controller = self?.controller, let sourceNode = sourceNode {
|
if let controller = self?.controller, let sourceNode = sourceNode {
|
||||||
@ -4594,8 +4601,11 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
case let .phone(phone):
|
case let .phone(phone):
|
||||||
let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: {
|
let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: { [weak self] in
|
||||||
UIPasteboard.general.string = phone
|
UIPasteboard.general.string = phone
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
self?.controller?.present(UndoOverlayController(presentationData: presentationData, content: .copy(text: presentationData.strings.Conversation_PhoneCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .window(.root))
|
||||||
})])
|
})])
|
||||||
controller.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak self, weak sourceNode] in
|
controller.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak self, weak sourceNode] in
|
||||||
if let controller = self?.controller, let sourceNode = sourceNode {
|
if let controller = self?.controller, let sourceNode = sourceNode {
|
||||||
@ -4607,13 +4617,19 @@ private final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewD
|
|||||||
case .link:
|
case .link:
|
||||||
if let addressName = peer.addressName {
|
if let addressName = peer.addressName {
|
||||||
let text: String
|
let text: String
|
||||||
|
let content: UndoOverlayContent
|
||||||
if peer is TelegramChannel {
|
if peer is TelegramChannel {
|
||||||
text = "https://t.me/\(addressName)"
|
text = "https://t.me/\(addressName)"
|
||||||
|
content = .linkCopied(text: self.presentationData.strings.Conversation_LinkCopied)
|
||||||
} else {
|
} else {
|
||||||
text = "@" + addressName
|
text = "@" + addressName
|
||||||
|
content = .copy(text: self.presentationData.strings.Conversation_UsernameCopied)
|
||||||
}
|
}
|
||||||
let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: {
|
let contextMenuController = ContextMenuController(actions: [ContextMenuAction(content: .text(title: self.presentationData.strings.Conversation_ContextMenuCopy, accessibilityLabel: self.presentationData.strings.Conversation_ContextMenuCopy), action: { [weak self] in
|
||||||
UIPasteboard.general.string = text
|
UIPasteboard.general.string = text
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
self?.controller?.present(UndoOverlayController(presentationData: presentationData, content: content, elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .window(.root))
|
||||||
})])
|
})])
|
||||||
controller.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak self, weak sourceNode] in
|
controller.present(contextMenuController, in: .window(.root), with: ContextMenuControllerPresentationArguments(sourceNodeAndRect: { [weak self, weak sourceNode] in
|
||||||
if let controller = self?.controller, let sourceNode = sourceNode {
|
if let controller = self?.controller, let sourceNode = sourceNode {
|
||||||
|
@ -16,6 +16,7 @@ import StickerPackPreviewUI
|
|||||||
import JoinLinkPreviewUI
|
import JoinLinkPreviewUI
|
||||||
import PresentationDataUtils
|
import PresentationDataUtils
|
||||||
import UrlWhitelist
|
import UrlWhitelist
|
||||||
|
import UndoUI
|
||||||
|
|
||||||
func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigateDisposable: MetaDisposable, controller: ViewController, action: TextLinkItemActionType, itemLink: TextLinkItem) {
|
func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigateDisposable: MetaDisposable, controller: ViewController, action: TextLinkItemActionType, itemLink: TextLinkItem) {
|
||||||
let presentImpl: (ViewController, Any?) -> Void = { controllerToPresent, _ in
|
let presentImpl: (ViewController, Any?) -> Void = { controllerToPresent, _ in
|
||||||
@ -147,6 +148,18 @@ func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigate
|
|||||||
ActionSheetButtonItem(title: presentationData.strings.ShareMenu_CopyShareLink, color: .accent, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: presentationData.strings.ShareMenu_CopyShareLink, color: .accent, action: { [weak actionSheet] in
|
||||||
actionSheet?.dismissAnimated()
|
actionSheet?.dismissAnimated()
|
||||||
UIPasteboard.general.string = url
|
UIPasteboard.general.string = url
|
||||||
|
|
||||||
|
let content: UndoOverlayContent
|
||||||
|
if url.hasPrefix("tel:") {
|
||||||
|
content = .copy(text: presentationData.strings.Conversation_PhoneCopied)
|
||||||
|
} else if url.hasPrefix("mailto:") {
|
||||||
|
content = .copy(text: presentationData.strings.Conversation_EmailCopied)
|
||||||
|
} else {
|
||||||
|
content = .linkCopied(text: presentationData.strings.Conversation_LinkCopied)
|
||||||
|
}
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
controller.present(UndoOverlayController(presentationData: presentationData, content: content, elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .current)
|
||||||
}),
|
}),
|
||||||
ActionSheetButtonItem(title: presentationData.strings.Conversation_AddToReadingList, color: .accent, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: presentationData.strings.Conversation_AddToReadingList, color: .accent, action: { [weak actionSheet] in
|
||||||
actionSheet?.dismissAnimated()
|
actionSheet?.dismissAnimated()
|
||||||
@ -171,6 +184,9 @@ func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigate
|
|||||||
ActionSheetButtonItem(title: presentationData.strings.Conversation_LinkDialogCopy, color: .accent, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: presentationData.strings.Conversation_LinkDialogCopy, color: .accent, action: { [weak actionSheet] in
|
||||||
actionSheet?.dismissAnimated()
|
actionSheet?.dismissAnimated()
|
||||||
UIPasteboard.general.string = mention
|
UIPasteboard.general.string = mention
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
controller.present(UndoOverlayController(presentationData: presentationData, content: .copy(text: presentationData.strings.Conversation_UsernameCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .current)
|
||||||
})
|
})
|
||||||
]), ActionSheetItemGroup(items: [
|
]), ActionSheetItemGroup(items: [
|
||||||
ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
|
||||||
@ -190,6 +206,9 @@ func handleTextLinkActionImpl(context: AccountContext, peerId: PeerId?, navigate
|
|||||||
ActionSheetButtonItem(title: presentationData.strings.Conversation_LinkDialogCopy, color: .accent, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: presentationData.strings.Conversation_LinkDialogCopy, color: .accent, action: { [weak actionSheet] in
|
||||||
actionSheet?.dismissAnimated()
|
actionSheet?.dismissAnimated()
|
||||||
UIPasteboard.general.string = hashtag
|
UIPasteboard.general.string = hashtag
|
||||||
|
|
||||||
|
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
|
||||||
|
controller.present(UndoOverlayController(presentationData: presentationData, content: .copy(text: presentationData.strings.Conversation_HashtagCopied), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), in: .current)
|
||||||
})
|
})
|
||||||
]), ActionSheetItemGroup(items: [
|
]), ActionSheetItemGroup(items: [
|
||||||
ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
|
ActionSheetButtonItem(title: presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in
|
||||||
|
Loading…
x
Reference in New Issue
Block a user