Various Fixes

This commit is contained in:
Ilya Laktyushin 2021-03-02 22:10:23 +04:00
parent 5f0a33e414
commit fed6d34f53
10 changed files with 367 additions and 335 deletions

View File

@ -600,7 +600,7 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController
|> take(1)
|> deliverOnMainQueue).start(next: { [weak self] greetingSticker in
if let strongSelf = self {
strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(peer.id), activateInput: activateInput, scrollToEndIfExists: scrollToEndIfExists, greetingData: greetingSticker.flatMap({ ChatGreetingData(sticker: $0) }), animated: !scrollToEndIfExists, options: strongSelf.groupId == PeerGroupId.root ? [.removeOnMasterDetails] : [], parentGroupId: strongSelf.groupId, completion: { [weak self] controller in
strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(peer.id), activateInput: activateInput && !peer.isDeleted, scrollToEndIfExists: scrollToEndIfExists, greetingData: greetingSticker.flatMap({ ChatGreetingData(sticker: $0) }), animated: !scrollToEndIfExists, options: strongSelf.groupId == PeerGroupId.root ? [.removeOnMasterDetails] : [], parentGroupId: strongSelf.groupId, completion: { [weak self] controller in
self?.chatListDisplayNode.containerNode.currentItemNode.clearHighlightAnimated(true)
if let promoInfo = promoInfo {
switch promoInfo {

View File

@ -217,7 +217,6 @@ private final class NavigationButtonItemNode: ImmediateTextNode {
override func updateLayout(_ constrainedSize: CGSize) -> CGSize {
var superSize = super.updateLayout(constrainedSize)
superSize.height = max(44.0, superSize.height)
if let node = self.node {
let nodeSize = node.measure(constrainedSize)
@ -231,6 +230,8 @@ private final class NavigationButtonItemNode: ImmediateTextNode {
imageNode.frame = imageFrame
self.imageRippleNode.frame = imageFrame
return size
} else {
superSize.height = max(44.0, superSize.height)
}
return superSize
}

View File

@ -128,6 +128,8 @@ final class PasscodeEntryControllerNode: ASDisplayNode {
override func didLoad() {
super.didLoad()
self.view.disablesInteractiveKeyboardGestureRecognizer = true
self.view.insertSubview(self.effectView, at: 0)
if self.arguments.cancel != nil {

View File

@ -161,6 +161,11 @@ final class PasscodeSetupControllerNode: ASDisplayNode {
transition.updateFrame(node: self.modeButtonNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - insets.bottom - 53.0), size: CGSize(width: layout.size.width, height: 44.0)))
}
override func didLoad() {
super.didLoad()
self.view.disablesInteractiveKeyboardGestureRecognizer = true
}
func updateMode(_ mode: PasscodeSetupControllerMode) {
self.mode = mode
self.inputFieldNode.reset()

View File

@ -1039,6 +1039,10 @@ public func channelAdminController(context: AccountContext, peerId: PeerId, admi
return current.withUpdatedUpdating(true)
}
updateRightsDisposable.set((context.peerChannelMemberCategoriesContextsManager.updateMemberAdminRights(account: context.account, peerId: peerId, memberId: adminId, adminRights: TelegramChatAdminRights(rights: updateFlags ?? []), rank: effectiveRank) |> deliverOnMainQueue).start(error: { error in
updateState { current in
return current.withUpdatedUpdating(false)
}
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
var text = presentationData.strings.Login_UnknownError
switch error {

View File

@ -1382,6 +1382,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
}, openInstantPage: { [weak self] message, associatedData in
if let strongSelf = self, strongSelf.isNodeLoaded, let navigationController = strongSelf.effectiveNavigationController, let message = strongSelf.chatDisplayNode.historyNode.messageInCurrentHistoryView(message.id) {
strongSelf.chatDisplayNode.dismissInput()
openChatInstantPage(context: strongSelf.context, message: message, sourcePeerType: associatedData?.automaticDownloadPeerType, navigationController: navigationController)
if case .overlay = strongSelf.presentationInterfaceState.mode {
@ -11642,6 +11643,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
var latestNode: (Int32, ASDisplayNode)?
self.chatDisplayNode.historyNode.forEachVisibleItemNode { itemNode in
if let itemNode = itemNode as? ChatMessageItemView, let item = itemNode.item, let statusNode = itemNode.getStatusNode() {
if !item.content.effectivelyIncoming(self.context.account.peerId) {
if let (latestTimestamp, _) = latestNode {
if item.message.timestamp > latestTimestamp {
latestNode = (item.message.timestamp, statusNode)
@ -11651,6 +11653,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
}
}
}
}
if let (_, latestStatusNode) = latestNode {
let bounds = latestStatusNode.view.convert(latestStatusNode.view.bounds, to: self.chatDisplayNode.view)

View File

@ -184,8 +184,6 @@ final class ChatMessageAccessibilityData {
let singleUrl: String?
init(item: ChatMessageItem, isSelected: Bool?) {
var label: String = ""
let value: String
var hint: String?
var traits: UIAccessibilityTraits = []
var singleUrl: String?
@ -202,14 +200,18 @@ final class ChatMessageAccessibilityData {
}
}
let authorName = item.message.author?.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder)
let dataForMessage: (Message, Bool) -> (String, String) = { message, isReply -> (String, String) in
var label: String = ""
var value: String = ""
if let chatPeer = item.message.peers[item.message.id.peerId] {
let (_, _, messageText) = chatListItemStrings(strings: item.presentationData.strings, nameDisplayOrder: item.presentationData.nameDisplayOrder, messages: [item.message], chatPeer: RenderedPeer(peer: chatPeer), accountPeerId: item.context.account.peerId)
if let chatPeer = message.peers[item.message.id.peerId] {
let authorName = message.author?.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder)
let (_, _, messageText) = chatListItemStrings(strings: item.presentationData.strings, nameDisplayOrder: item.presentationData.nameDisplayOrder, messages: [message], chatPeer: RenderedPeer(peer: chatPeer), accountPeerId: item.context.account.peerId)
var text = messageText
loop: for media in item.message.media {
loop: for media in message.media {
if let _ = media as? TelegramMediaImage {
if isIncoming {
if announceIncomingAuthors, let authorName = authorName {
@ -221,10 +223,10 @@ final class ChatMessageAccessibilityData {
label = item.presentationData.strings.VoiceOver_Chat_YourPhoto
}
text = ""
if !item.message.text.isEmpty {
if !message.text.isEmpty {
text.append("\n")
text.append(item.presentationData.strings.VoiceOver_Chat_Caption(item.message.text).0)
text.append(item.presentationData.strings.VoiceOver_Chat_Caption(message.text).0)
}
} else if let file = media as? TelegramMediaFile {
var isSpecialFile = false
@ -339,9 +341,9 @@ final class ChatMessageAccessibilityData {
text = "\(file.fileName ?? ""). "
text.append(item.presentationData.strings.VoiceOver_Chat_Size(sizeString).0)
}
if !item.message.text.isEmpty {
if !message.text.isEmpty {
text.append("\n")
text.append(item.presentationData.strings.VoiceOver_Chat_Caption(item.message.text).0)
text.append(item.presentationData.strings.VoiceOver_Chat_Caption(message.text).0)
}
break loop
} else if let webpage = media as? TelegramMediaWebpage, case let .Loaded(content) = webpage.content {
@ -353,7 +355,7 @@ final class ChatMessageAccessibilityData {
if let text = content.text, !text.isEmpty {
contentText.append(text)
}
text = "\(item.message.text)\n\(contentText)"
text = "\(message.text)\n\(contentText)"
} else if let contact = media as? TelegramMediaContact {
if isIncoming {
if announceIncomingAuthors, let authorName = authorName {
@ -537,10 +539,10 @@ final class ChatMessageAccessibilityData {
result += "\(text)"
let dateString = DateFormatter.localizedString(from: Date(timeIntervalSince1970: Double(item.message.timestamp)), dateStyle: .medium, timeStyle: .short)
let dateString = DateFormatter.localizedString(from: Date(timeIntervalSince1970: Double(message.timestamp)), dateStyle: .medium, timeStyle: .short)
result += "\n\(dateString)"
if !isIncoming && item.read {
if !isIncoming && item.read && !isReply {
result += "\n"
if announceIncomingAuthors {
result += item.presentationData.strings.VoiceOver_Chat_SeenByRecipients
@ -554,7 +556,7 @@ final class ChatMessageAccessibilityData {
}
if label.isEmpty {
if let author = item.message.author {
if let author = message.author {
if isIncoming {
label = author.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder)
} else {
@ -565,6 +567,11 @@ final class ChatMessageAccessibilityData {
}
}
return (label, value)
}
var (label, value) = dataForMessage(item.message, false)
for attribute in item.message.attributes {
if let attribute = attribute as? TextEntitiesMessageAttribute {
var hasUrls = false
@ -593,7 +600,7 @@ final class ChatMessageAccessibilityData {
}
}
} else if let attribute = attribute as? ReplyMessageAttribute, let replyMessage = item.message.associatedMessages[attribute.messageId] {
let replyLabel: String
var replyLabel: String
if replyMessage.flags.contains(.Incoming) {
if let author = replyMessage.author {
replyLabel = item.presentationData.strings.VoiceOver_Chat_ReplyFrom(author.displayTitle(strings: item.presentationData.strings, displayOrder: item.presentationData.nameDisplayOrder)).0
@ -603,6 +610,10 @@ final class ChatMessageAccessibilityData {
} else {
replyLabel = item.presentationData.strings.VoiceOver_Chat_ReplyToYourMessage
}
let (replyMessageLabel, replyMessageValue) = dataForMessage(replyMessage, true)
replyLabel += "\(replyLabel): \(replyMessageLabel), \(replyMessageValue)"
label = "\(replyLabel) . \(label)"
}
}

View File

@ -378,7 +378,9 @@ final class ChatTitleView: UIView, NavigationBarTitleView {
let string = NSAttributedString(string: "", font: Font.regular(13.0), textColor: titleTheme.rootController.navigationBar.secondaryTextColor)
state = .info(string, .generic)
} else if let user = peer as? TelegramUser {
if servicePeer {
if user.isDeleted {
state = .none
} else if servicePeer {
let string = NSAttributedString(string: "", font: Font.regular(13.0), textColor: titleTheme.rootController.navigationBar.secondaryTextColor)
state = .info(string, .generic)
} else if user.flags.contains(.isSupport) {

View File

@ -826,7 +826,7 @@ final class PeerInfoVisualMediaPaneNode: ASDisplayNode, PeerInfoPaneNode, UIScro
self.scrollNode.view.delaysContentTouches = false
self.scrollNode.view.canCancelContentTouches = true
self.scrollNode.view.showsVerticalScrollIndicator = true
self.scrollNode.view.showsVerticalScrollIndicator = false
if #available(iOS 11.0, *) {
self.scrollNode.view.contentInsetAdjustmentBehavior = .never
}

View File

@ -993,6 +993,7 @@ func peerInfoHeaderButtons(peer: Peer?, cachedData: CachedPeerData?, isOpenedFro
var canViewStats = false
var hasDiscussion = false
var hasVoiceChat = false
var canStartVoiceChat = false
if let cachedChannelData = cachedData as? CachedChannelData {
canViewStats = cachedChannelData.flags.contains(.canViewStats)
}
@ -1012,6 +1013,9 @@ func peerInfoHeaderButtons(peer: Peer?, cachedData: CachedPeerData?, isOpenedFro
if channel.flags.contains(.hasVoiceChat) {
hasVoiceChat = true
}
if !hasVoiceChat && (channel.flags.contains(.isCreator) || channel.hasPermission(.manageCalls)) {
canStartVoiceChat = true
}
}
switch channel.participationStatus {
case .member:
@ -1043,7 +1047,7 @@ func peerInfoHeaderButtons(peer: Peer?, cachedData: CachedPeerData?, isOpenedFro
if channel.isVerified || channel.adminRights != nil || channel.flags.contains(.isCreator) {
canReport = false
}
if !canReport && !canViewStats {
if !canReport && !canViewStats && !canStartVoiceChat {
displayMore = false
}
if displayMore {