Always show Translate in public channels for some languages

This commit is contained in:
Ilya Laktyushin
2022-04-03 21:36:00 +04:00
parent 6724ac9402
commit 9426bd5060
4 changed files with 25 additions and 5 deletions

View File

@@ -2940,7 +2940,12 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
translationSettings = TranslationSettings.defaultSettings translationSettings = TranslationSettings.defaultSettings
} }
let (_, language) = canTranslateText(context: context, text: text.string, showTranslate: translationSettings.showTranslate, ignoredLanguages: translationSettings.ignoredLanguages) var showTranslateIfTopical = false
if let peer = strongSelf.presentationInterfaceState.renderedPeer?.chatMainPeer as? TelegramChannel, case .broadcast = peer.info, !(peer.addressName ?? "").isEmpty {
showTranslateIfTopical = true
}
let (_, language) = canTranslateText(context: context, text: text.string, showTranslate: translationSettings.showTranslate, showTranslateIfTopical: showTranslateIfTopical, ignoredLanguages: translationSettings.ignoredLanguages)
let controller = TranslateScreen(context: context, text: text.string, fromLanguage: language) let controller = TranslateScreen(context: context, text: text.string, fromLanguage: language)
controller.pushController = { [weak self] c in controller.pushController = { [weak self] c in

View File

@@ -883,7 +883,12 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState
}))) })))
} }
let (canTranslate, _) = canTranslateText(context: context, text: messageText, showTranslate: translationSettings.showTranslate, ignoredLanguages: translationSettings.ignoredLanguages) var showTranslateIfTopical = false
if let peer = chatPresentationInterfaceState.renderedPeer?.chatMainPeer as? TelegramChannel, case .broadcast = peer.info, !(peer.addressName ?? "").isEmpty {
showTranslateIfTopical = true
}
let (canTranslate, _) = canTranslateText(context: context, text: messageText, showTranslate: translationSettings.showTranslate, showTranslateIfTopical: showTranslateIfTopical, ignoredLanguages: translationSettings.ignoredLanguages)
if canTranslate { if canTranslate {
actions.append(.action(ContextMenuActionItem(text: chatPresentationInterfaceState.strings.Conversation_ContextMenuTranslate, icon: { theme in actions.append(.action(ContextMenuActionItem(text: chatPresentationInterfaceState.strings.Conversation_ContextMenuTranslate, icon: { theme in
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Translate"), color: theme.actionSheet.primaryTextColor) return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Translate"), color: theme.actionSheet.primaryTextColor)

View File

@@ -141,11 +141,11 @@ public var popularTranslationLanguages = [
@available(iOS 12.0, *) @available(iOS 12.0, *)
private let languageRecognizer = NLLanguageRecognizer() private let languageRecognizer = NLLanguageRecognizer()
public func canTranslateText(context: AccountContext, text: String, showTranslate: Bool, ignoredLanguages: [String]?) -> (canTranslate: Bool, language: String?) { public func canTranslateText(context: AccountContext, text: String, showTranslate: Bool, showTranslateIfTopical: Bool = false, ignoredLanguages: [String]?) -> (canTranslate: Bool, language: String?) {
guard showTranslate, text.count > 0 else { guard showTranslate || showTranslateIfTopical, text.count > 0 else {
return (false, nil) return (false, nil)
} }
if #available(iOS 15.0, *) { if #available(iOS 15.0, *) {
var dontTranslateLanguages: [String] = [] var dontTranslateLanguages: [String] = []
if let ignoredLanguages = ignoredLanguages { if let ignoredLanguages = ignoredLanguages {
@@ -159,6 +159,11 @@ public func canTranslateText(context: AccountContext, text: String, showTranslat
let hypotheses = languageRecognizer.languageHypotheses(withMaximum: 3) let hypotheses = languageRecognizer.languageHypotheses(withMaximum: 3)
languageRecognizer.reset() languageRecognizer.reset()
var supportedTranslationLanguages = supportedTranslationLanguages
if !showTranslate && showTranslateIfTopical {
supportedTranslationLanguages = ["uk", "ru"]
}
let filteredLanguages = hypotheses.filter { supportedTranslationLanguages.contains($0.key.rawValue) }.sorted(by: { $0.value > $1.value }) let filteredLanguages = hypotheses.filter { supportedTranslationLanguages.contains($0.key.rawValue) }.sorted(by: { $0.value > $1.value })
if let language = filteredLanguages.first(where: { supportedTranslationLanguages.contains($0.key.rawValue) }) { if let language = filteredLanguages.first(where: { supportedTranslationLanguages.contains($0.key.rawValue) }) {
return (!dontTranslateLanguages.contains(language.key.rawValue), language.key.rawValue) return (!dontTranslateLanguages.contains(language.key.rawValue), language.key.rawValue)

View File

@@ -502,6 +502,7 @@ public final class WebAppController: ViewController, AttachmentContainable {
}) })
self.navigationBar?.updateBackgroundAlpha(0.0, transition: .immediate) self.navigationBar?.updateBackgroundAlpha(0.0, transition: .immediate)
self.updateTabBarAlpha(1.0, .immediate)
} }
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
@@ -520,6 +521,10 @@ public final class WebAppController: ViewController, AttachmentContainable {
public var mediaPickerContext: AttachmentMediaPickerContext? { public var mediaPickerContext: AttachmentMediaPickerContext? {
return WebAppPickerContext(controller: self) return WebAppPickerContext(controller: self)
} }
public func prepareForReuse() {
self.updateTabBarAlpha(1.0, .immediate)
}
} }
final class WebAppPickerContext: AttachmentMediaPickerContext { final class WebAppPickerContext: AttachmentMediaPickerContext {