diff --git a/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift b/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift index da487fa1c9..c6c783c119 100644 --- a/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift +++ b/Swiftgram/SGSettingsUI/Sources/SGSettingsController.swift @@ -116,6 +116,7 @@ private enum SGOneFromManySetting: String { // case allChatsFolderPositionOverride case translationBackend case transcriptionBackend + case businessBotTitlePanelPlacement } private enum SGSliderSetting: String { @@ -308,6 +309,7 @@ private func SGControllerEntries(presentationData: PresentationData, callListSet entries.append(.toggle(id: id.count, section: .other, settingName: .swipeForVideoPIP, value: SGSimpleSettings.shared.videoPIPSwipeDirection == SGSimpleSettings.VideoPIPSwipeDirection.up.rawValue, text: i18n("Settings.swipeForVideoPIP", lang), enabled: true)) entries.append(.notice(id: id.count, section: .other, text: i18n("Settings.swipeForVideoPIP.Notice", lang))) entries.append(.toggle(id: id.count, section: .other, settingName: .hideChannelBottomButton, value: !SGSimpleSettings.shared.hideChannelBottomButton, text: i18n("Settings.showChannelBottomButton", lang), enabled: true)) + entries.append(.oneFromManySelector(id: id.count, section: .other, settingName: .businessBotTitlePanelPlacement, text: i18n("Settings.BusinessBotPanelPlacement", lang), value: i18n("Settings.BusinessBotPanelPlacement.\(SGSimpleSettings.shared.businessBotTitlePanelPlacement)", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .wideChannelPosts, value: SGSimpleSettings.shared.wideChannelPosts, text: i18n("Settings.wideChannelPosts", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .secondsInMessages, value: SGSimpleSettings.shared.secondsInMessages, text: i18n("Settings.secondsInMessages", lang), enabled: true)) entries.append(.toggle(id: id.count, section: .other, settingName: .messageDoubleTapActionOutgoingEdit, value: SGSimpleSettings.shared.messageDoubleTapActionOutgoing == SGSimpleSettings.MessageDoubleTapAction.edit.rawValue, text: i18n("Settings.messageDoubleTapActionOutgoingEdit", lang), enabled: true)) @@ -660,6 +662,18 @@ public func sgSettingsController(context: AccountContext/*, focusOnItemTag: Int? setAction(value.rawValue) })) } + case .businessBotTitlePanelPlacement: + let setAction: (String) -> Void = { value in + SGSimpleSettings.shared.businessBotTitlePanelPlacement = value + simplePromise.set(true) + } + + for value in SGSimpleSettings.BusinessBotTitlePanelPlacement.allCases { + items.append(ActionSheetButtonItem(title: i18n("Settings.BusinessBotPanelPlacement.\(value.rawValue)", presentationData.strings.baseLanguageCode), color: .accent, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + setAction(value.rawValue) + })) + } case .nyStyle: let setAction: (String) -> Void = { value in SGSimpleSettings.shared.nyStyle = value diff --git a/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift b/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift index 2db47deb51..81a4aeae30 100644 --- a/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift +++ b/Swiftgram/SGSimpleSettings/Sources/SimpleSettings.swift @@ -153,6 +153,7 @@ public class SGSimpleSettings { case forceBuiltInMic case secondsInMessages case hideChannelBottomButton + case businessBotTitlePanelPlacement case forceSystemSharing case confirmCalls case videoPIPSwipeDirection @@ -214,6 +215,12 @@ public class SGSimpleSettings { case none case edit } + + public enum BusinessBotTitlePanelPlacement: String, CaseIterable { + case telegram + case swiftgram + case hidden + } public enum VideoPIPSwipeDirection: String, CaseIterable { case up @@ -309,6 +316,7 @@ public class SGSimpleSettings { Keys.wideChannelPosts.rawValue: false, Keys.forceEmojiTab.rawValue: false, Keys.hideChannelBottomButton.rawValue: false, + Keys.businessBotTitlePanelPlacement.rawValue: BusinessBotTitlePanelPlacement.swiftgram.rawValue, Keys.secondsInMessages.rawValue: false, Keys.forceSystemSharing.rawValue: false, Keys.confirmCalls.rawValue: true, @@ -531,6 +539,9 @@ public class SGSimpleSettings { @UserDefault(key: Keys.hideChannelBottomButton.rawValue) public var hideChannelBottomButton: Bool + @UserDefault(key: Keys.businessBotTitlePanelPlacement.rawValue) + public var businessBotTitlePanelPlacement: String + @UserDefault(key: Keys.forceSystemSharing.rawValue) public var forceSystemSharing: Bool diff --git a/Swiftgram/SGStrings/Strings/af.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/af.lproj/SGLocalizable.strings index 5acfe970d5..87544559e9 100644 --- a/Swiftgram/SGStrings/Strings/af.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/af.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP met Veeg"; "Settings.swipeForVideoPIP.Notice" = "As geaktiveer, sal die veeg van die video dit in Prent-in-Prent modus oopmaak."; + +"Settings.BusinessBotPanelPlacement" = "Besigheidsbot-paneel"; +"Settings.BusinessBotPanelPlacement.telegram" = "In plaas van vasgespeld"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Onder vasgespeld"; +"Settings.BusinessBotPanelPlacement.hidden" = "Versteek"; diff --git a/Swiftgram/SGStrings/Strings/ar.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ar.lproj/SGLocalizable.strings index 41f1168454..e305733942 100644 --- a/Swiftgram/SGStrings/Strings/ar.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ar.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "فيديو PIP مع السحب"; "Settings.swipeForVideoPIP.Notice" = "إذا تم تمكينه، سيفتح سحب الفيديو في وضع الصورة في الصورة."; + +"Settings.BusinessBotPanelPlacement" = "لوحة بوت الأعمال"; +"Settings.BusinessBotPanelPlacement.telegram" = "بدلاً من المثبتة"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "أسفل المثبتة"; +"Settings.BusinessBotPanelPlacement.hidden" = "مخفية"; diff --git a/Swiftgram/SGStrings/Strings/ca.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ca.lproj/SGLocalizable.strings index a48c45fa92..f6f7a2c7d1 100644 --- a/Swiftgram/SGStrings/Strings/ca.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ca.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Vídeo PIP amb desplaçament"; "Settings.swipeForVideoPIP.Notice" = "Si està habilitat, desplaçar el vídeo l'obrirà en mode Imatge en Imatge."; + +"Settings.BusinessBotPanelPlacement" = "Panell del bot empresarial"; +"Settings.BusinessBotPanelPlacement.telegram" = "En lloc dels fixats"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Sota els fixats"; +"Settings.BusinessBotPanelPlacement.hidden" = "Amagat"; diff --git a/Swiftgram/SGStrings/Strings/cs.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/cs.lproj/SGLocalizable.strings index 05cf6ed482..d2e14da022 100644 --- a/Swiftgram/SGStrings/Strings/cs.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/cs.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP s přetahováním"; "Settings.swipeForVideoPIP.Notice" = "Pokud je povoleno, poslání videa jej otevře v režimu Obraz v obraze."; + +"Settings.BusinessBotPanelPlacement" = "Panel firemního bota"; +"Settings.BusinessBotPanelPlacement.telegram" = "Místo připnutých"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Pod připnutými"; +"Settings.BusinessBotPanelPlacement.hidden" = "Skryté"; diff --git a/Swiftgram/SGStrings/Strings/da.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/da.lproj/SGLocalizable.strings index cb0c4174db..e9e79313ff 100644 --- a/Swiftgram/SGStrings/Strings/da.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/da.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP med Swipe"; "Settings.swipeForVideoPIP.Notice" = "Hvis aktiveret, vil sletning af video åbne den i billede-i-billede-tilstand."; + +"Settings.BusinessBotPanelPlacement" = "Erhvervsbotpanel"; +"Settings.BusinessBotPanelPlacement.telegram" = "I stedet for fastgjorte"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Under fastgjorte"; +"Settings.BusinessBotPanelPlacement.hidden" = "Skjult"; diff --git a/Swiftgram/SGStrings/Strings/de.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/de.lproj/SGLocalizable.strings index 726e485dcf..1f1ee0551d 100644 --- a/Swiftgram/SGStrings/Strings/de.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/de.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP mit Wischen"; "Settings.swipeForVideoPIP.Notice" = "Wenn aktiviert, öffnet das Wischen des Videos es im Bild-in-Bild-Modus."; + +"Settings.BusinessBotPanelPlacement" = "Business-Bot-Leiste"; +"Settings.BusinessBotPanelPlacement.telegram" = "Statt angeheftet"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Unter angeheftet"; +"Settings.BusinessBotPanelPlacement.hidden" = "Ausgeblendet"; diff --git a/Swiftgram/SGStrings/Strings/el.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/el.lproj/SGLocalizable.strings index 010c2fd7ed..4d401eda82 100644 --- a/Swiftgram/SGStrings/Strings/el.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/el.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Βίντεο PIP με Swipe"; "Settings.swipeForVideoPIP.Notice" = "Αν είναι ενεργοποιημένο, το σ swipe video θα το ανοίξει σε λειτουργία Εικόνα μέσα στην Εικόνα."; + +"Settings.BusinessBotPanelPlacement" = "Πλαίσιο business bot"; +"Settings.BusinessBotPanelPlacement.telegram" = "Αντί καρφιτσωμένων"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Κάτω από καρφιτσωμένα"; +"Settings.BusinessBotPanelPlacement.hidden" = "Κρυφό"; diff --git a/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings index 0383460b65..03e31a85c1 100644 --- a/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/en.lproj/SGLocalizable.strings @@ -163,6 +163,11 @@ "Settings.showChannelBottomButton" = "Channel Bottom Panel"; +"Settings.BusinessBotPanelPlacement" = "Business bot panel"; +"Settings.BusinessBotPanelPlacement.telegram" = "Instead of pinned"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Below pinned"; +"Settings.BusinessBotPanelPlacement.hidden" = "Hidden"; + "Settings.secondsInMessages" = "Seconds in Messages"; "Settings.CallConfirmation" = "Call Confirmation"; diff --git a/Swiftgram/SGStrings/Strings/es.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/es.lproj/SGLocalizable.strings index 4fcb6aee08..5beacfb79b 100644 --- a/Swiftgram/SGStrings/Strings/es.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/es.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP con deslizamiento"; "Settings.swipeForVideoPIP.Notice" = "Si está habilitado, deslizar el video lo abrirá en modo imagen en imagen."; + +"Settings.BusinessBotPanelPlacement" = "Panel del bot empresarial"; +"Settings.BusinessBotPanelPlacement.telegram" = "En lugar de fijados"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Debajo de fijados"; +"Settings.BusinessBotPanelPlacement.hidden" = "Oculto"; diff --git a/Swiftgram/SGStrings/Strings/fa.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/fa.lproj/SGLocalizable.strings index 1581d63536..0f6fd3d4c3 100644 --- a/Swiftgram/SGStrings/Strings/fa.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/fa.lproj/SGLocalizable.strings @@ -7,3 +7,8 @@ "Settings.ShowProfileID" = "نمایش ایدی پروفایل"; "Settings.Translation.QuickTranslateButton" = "دکمه ترجمه سریع"; "ContextMenu.SaveToCloud" = "ذخیره در فضای ابری"; + +"Settings.BusinessBotPanelPlacement" = "پنل ربات تجاری"; +"Settings.BusinessBotPanelPlacement.telegram" = "به‌جای سنجاق‌شده‌ها"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "زیر سنجاق‌شده‌ها"; +"Settings.BusinessBotPanelPlacement.hidden" = "پنهان"; diff --git a/Swiftgram/SGStrings/Strings/fi.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/fi.lproj/SGLocalizable.strings index 3e7ea96fbf..6906f76849 100644 --- a/Swiftgram/SGStrings/Strings/fi.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/fi.lproj/SGLocalizable.strings @@ -228,3 +228,8 @@ "Paywall.Error.Title" = "Virhe"; "PayWall.ValidationError" = "Vahvistusvirhe"; "PayWall.ValidationError.TryAgain" = "Ostovahvistuksessa tapahtui jokin virhe. Ei hätää! Yritä palauttaa ostot hieman myöhemmin."; + +"Settings.BusinessBotPanelPlacement" = "Yritysbottipaneeli"; +"Settings.BusinessBotPanelPlacement.telegram" = "Kiinnitettyjen sijaan"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Kiinnitettyjen alla"; +"Settings.BusinessBotPanelPlacement.hidden" = "Piilotettu"; diff --git a/Swiftgram/SGStrings/Strings/fr.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/fr.lproj/SGLocalizable.strings index adc9a1b3d3..a0c0fe2215 100644 --- a/Swiftgram/SGStrings/Strings/fr.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/fr.lproj/SGLocalizable.strings @@ -135,3 +135,8 @@ "Settings.forceBuiltInMic.Notice" = "Si activé, l'application utilisera uniquement le microphone de l'appareil même si des écouteurs sont connectés."; "Settings.hideChannelBottomButton" = "Masquer le panneau inférieur du canal"; + +"Settings.BusinessBotPanelPlacement" = "Panneau du bot pro"; +"Settings.BusinessBotPanelPlacement.telegram" = "À la place des épinglés"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Sous les épinglés"; +"Settings.BusinessBotPanelPlacement.hidden" = "Masqué"; diff --git a/Swiftgram/SGStrings/Strings/he.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/he.lproj/SGLocalizable.strings index eb4562b7c8..058d0e33e7 100644 --- a/Swiftgram/SGStrings/Strings/he.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/he.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "וידאו PIP עם החלקה"; "Settings.swipeForVideoPIP.Notice" = "אם מופעל, החלקת הווידאו תפתח אותו במצב תמונה בתוך תמונה."; + +"Settings.BusinessBotPanelPlacement" = "לוח בוט עסקי"; +"Settings.BusinessBotPanelPlacement.telegram" = "במקום נעוצים"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "מתחת לנעוצים"; +"Settings.BusinessBotPanelPlacement.hidden" = "מוסתר"; diff --git a/Swiftgram/SGStrings/Strings/hi.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/hi.lproj/SGLocalizable.strings index 6adc148a1d..f7198f6ea7 100644 --- a/Swiftgram/SGStrings/Strings/hi.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/hi.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "वीडियो PIP स्वाइप के साथ"; "Settings.swipeForVideoPIP.Notice" = "यदि सक्षम है, तो वीडियो को स्वाइप करने से यह चित्र-इन-चित्र मोड में खोला जाएगा।"; + +"Settings.BusinessBotPanelPlacement" = "बिज़नेस बॉट पैनल"; +"Settings.BusinessBotPanelPlacement.telegram" = "पिन किए गए की जगह"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "पिन किए गए के नीचे"; +"Settings.BusinessBotPanelPlacement.hidden" = "छिपा हुआ"; diff --git a/Swiftgram/SGStrings/Strings/hu.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/hu.lproj/SGLocalizable.strings index d357bb69b6..45ffb8fd9a 100644 --- a/Swiftgram/SGStrings/Strings/hu.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/hu.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Videó PIP a húzással"; "Settings.swipeForVideoPIP.Notice" = "Ha engedélyezve van, a videó húzása képet-képben üzemmódban nyitja meg."; + +"Settings.BusinessBotPanelPlacement" = "Üzleti bot panel"; +"Settings.BusinessBotPanelPlacement.telegram" = "Rögzítettek helyett"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Rögzítettek alatt"; +"Settings.BusinessBotPanelPlacement.hidden" = "Rejtett"; diff --git a/Swiftgram/SGStrings/Strings/id.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/id.lproj/SGLocalizable.strings index 44ba7a11a2..5d30ed96fb 100644 --- a/Swiftgram/SGStrings/Strings/id.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/id.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP dengan Geser"; "Settings.swipeForVideoPIP.Notice" = "Jika diaktifkan, menggeser video akan membukanya dalam mode Gambar-dalam-Gambar."; + +"Settings.BusinessBotPanelPlacement" = "Panel bot bisnis"; +"Settings.BusinessBotPanelPlacement.telegram" = "Alih-alih tersemat"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Di bawah tersemat"; +"Settings.BusinessBotPanelPlacement.hidden" = "Tersembunyi"; diff --git a/Swiftgram/SGStrings/Strings/it.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/it.lproj/SGLocalizable.strings index ca32eafb8c..ef80936f46 100644 --- a/Swiftgram/SGStrings/Strings/it.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/it.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP con scorrimento"; "Settings.swipeForVideoPIP.Notice" = "Se abilitato, scorrendo il video si aprirà in modalità Picture-in-Picture."; + +"Settings.BusinessBotPanelPlacement" = "Pannello bot business"; +"Settings.BusinessBotPanelPlacement.telegram" = "Al posto dei fissati"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Sotto i fissati"; +"Settings.BusinessBotPanelPlacement.hidden" = "Nascosto"; diff --git a/Swiftgram/SGStrings/Strings/ja.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ja.lproj/SGLocalizable.strings index afe45d6566..5c4e59cbd4 100644 --- a/Swiftgram/SGStrings/Strings/ja.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ja.lproj/SGLocalizable.strings @@ -244,3 +244,8 @@ "PayWall.ValidationError" = "検証エラー"; "PayWall.ValidationError.TryAgain" = "購入の検証中に問題が発生しました。心配しないでください!後で購入を復元してみてください。"; "PayWall.ValidationError.Expired" = "サブスクリプションの有効期限が切れました。Pro機能へのアクセスを取り戻すには、再度サブスクリプションを登録してください。"; + +"Settings.BusinessBotPanelPlacement" = "ビジネスボットパネル"; +"Settings.BusinessBotPanelPlacement.telegram" = "固定の代わり"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "固定の下"; +"Settings.BusinessBotPanelPlacement.hidden" = "非表示"; diff --git a/Swiftgram/SGStrings/Strings/km.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/km.lproj/SGLocalizable.strings index 928cf393a6..dea6996611 100644 --- a/Swiftgram/SGStrings/Strings/km.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/km.lproj/SGLocalizable.strings @@ -6,3 +6,8 @@ "Settings.HidePhoneInSettingsUI" = "លាក់លេខទូរសព្ទក្នុងការកំណត់"; "Settings.Folders.BottomTab" = "ថតឯបាត"; "ContextMenu.SaveToCloud" = "រក្សាទុកទៅពពក"; + +"Settings.BusinessBotPanelPlacement" = "ផ្ទាំងបូតអាជីវកម្ម"; +"Settings.BusinessBotPanelPlacement.telegram" = "ជំនួសសារខ្ទាស់"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "ក្រោមសារខ្ទាស់"; +"Settings.BusinessBotPanelPlacement.hidden" = "បានលាក់"; diff --git a/Swiftgram/SGStrings/Strings/ko.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ko.lproj/SGLocalizable.strings index 501a5f64b4..b2bc95c909 100644 --- a/Swiftgram/SGStrings/Strings/ko.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ko.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "비디오 PIP 스와이프"; "Settings.swipeForVideoPIP.Notice" = "설정이 활성화되면 비디오를 스와이프하면 화면 속 화면 모드로 열립니다."; + +"Settings.BusinessBotPanelPlacement" = "비즈니스 봇 패널"; +"Settings.BusinessBotPanelPlacement.telegram" = "고정 대신"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "고정 아래"; +"Settings.BusinessBotPanelPlacement.hidden" = "숨김"; diff --git a/Swiftgram/SGStrings/Strings/ku.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ku.lproj/SGLocalizable.strings index 62ac20a89c..8050f8e6fa 100644 --- a/Swiftgram/SGStrings/Strings/ku.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ku.lproj/SGLocalizable.strings @@ -8,3 +8,8 @@ "Settings.Translation.QuickTranslateButton" = "دوگمەی وەرگێڕانی خێرا"; "Settings.Folders.BottomTab" = "بوخچەکان لە خوارەوە"; "ContextMenu.SaveToCloud" = "هەڵگرتن لە کڵاود"; + +"Settings.BusinessBotPanelPlacement" = "پانێڵی بۆتی بازرگانی"; +"Settings.BusinessBotPanelPlacement.telegram" = "لەبری پینکراوەکان"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "لەژێر پینکراوەکان"; +"Settings.BusinessBotPanelPlacement.hidden" = "شاردراوە"; diff --git a/Swiftgram/SGStrings/Strings/nl.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/nl.lproj/SGLocalizable.strings index d80e6ca49e..f3766094c2 100644 --- a/Swiftgram/SGStrings/Strings/nl.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/nl.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP met veeg"; "Settings.swipeForVideoPIP.Notice" = "Als ingeschakeld, opent het swipen van video het in de modus Beeld-in-Beeld."; + +"Settings.BusinessBotPanelPlacement" = "Zakelijke botbalk"; +"Settings.BusinessBotPanelPlacement.telegram" = "In plaats van vastgezet"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Onder vastgezet"; +"Settings.BusinessBotPanelPlacement.hidden" = "Verborgen"; diff --git a/Swiftgram/SGStrings/Strings/no.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/no.lproj/SGLocalizable.strings index 5fd16d5c62..dc9e9be6e8 100644 --- a/Swiftgram/SGStrings/Strings/no.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/no.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP med sveip"; "Settings.swipeForVideoPIP.Notice" = "Hvis aktivert, vil sveipingen av video åpne den i bilde-i-bilde-modus."; + +"Settings.BusinessBotPanelPlacement" = "Bedriftsbotpanel"; +"Settings.BusinessBotPanelPlacement.telegram" = "I stedet for festet"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Under festet"; +"Settings.BusinessBotPanelPlacement.hidden" = "Skjult"; diff --git a/Swiftgram/SGStrings/Strings/pl.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/pl.lproj/SGLocalizable.strings index 9efb5c2247..ef048f3a52 100644 --- a/Swiftgram/SGStrings/Strings/pl.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/pl.lproj/SGLocalizable.strings @@ -243,3 +243,8 @@ "PayWall.ValidationError" = "Błąd weryfikacji"; "PayWall.ValidationError.TryAgain" = "Coś poszło nie tak podczas weryfikacji zakupu. Nie martw się! Spróbuj przywrócić zakupy trochę później."; "PayWall.ValidationError.Expired" = "Twoja subskrypcja wygasła. Subskrybuj ponownie, aby odzyskać dostęp do funkcji Pro."; + +"Settings.BusinessBotPanelPlacement" = "Panel bota firmowego"; +"Settings.BusinessBotPanelPlacement.telegram" = "Zamiast przypiętych"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Pod przypiętymi"; +"Settings.BusinessBotPanelPlacement.hidden" = "Ukryte"; diff --git a/Swiftgram/SGStrings/Strings/pt.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/pt.lproj/SGLocalizable.strings index a45973f988..2b163751b4 100644 --- a/Swiftgram/SGStrings/Strings/pt.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/pt.lproj/SGLocalizable.strings @@ -271,4 +271,9 @@ "Settings.NY.Style.default" = "Desativado"; "Settings.NY.Style.snow" = "Neve"; "Settings.NY.Style.lightning" = "Raio"; -"Settings.NY.Notice" = "Disponível por tempo limitado!"; \ No newline at end of file +"Settings.NY.Notice" = "Disponível por tempo limitado!"; + +"Settings.BusinessBotPanelPlacement" = "Painel do bot empresarial"; +"Settings.BusinessBotPanelPlacement.telegram" = "No lugar dos fixados"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Abaixo dos fixados"; +"Settings.BusinessBotPanelPlacement.hidden" = "Oculto"; diff --git a/Swiftgram/SGStrings/Strings/ro.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ro.lproj/SGLocalizable.strings index ccb2ad1e46..2c00f40dbb 100644 --- a/Swiftgram/SGStrings/Strings/ro.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ro.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP cu gestul de glisare"; "Settings.swipeForVideoPIP.Notice" = "Dacă este activat, glisarea video va deschide în modul imagine în imagine."; + +"Settings.BusinessBotPanelPlacement" = "Panou bot business"; +"Settings.BusinessBotPanelPlacement.telegram" = "În locul celor fixate"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Sub cele fixate"; +"Settings.BusinessBotPanelPlacement.hidden" = "Ascuns"; diff --git a/Swiftgram/SGStrings/Strings/ru.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/ru.lproj/SGLocalizable.strings index 0488ecf5f3..aace774662 100644 --- a/Swiftgram/SGStrings/Strings/ru.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/ru.lproj/SGLocalizable.strings @@ -158,6 +158,11 @@ "Settings.showChannelBottomButton" = "Нижняя панель канала"; +"Settings.BusinessBotPanelPlacement" = "Плашка бизнес-бота"; +"Settings.BusinessBotPanelPlacement.telegram" = "Вместо закреплённых"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Под закреплёнными"; +"Settings.BusinessBotPanelPlacement.hidden" = "Скрыта"; + "Settings.secondsInMessages" = "Секунды в Сообщениях"; "Settings.CallConfirmation" = "Подтверждение вызова"; diff --git a/Swiftgram/SGStrings/Strings/si.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/si.lproj/SGLocalizable.strings index 869c70ba7e..d6f9a23bb7 100644 --- a/Swiftgram/SGStrings/Strings/si.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/si.lproj/SGLocalizable.strings @@ -1,2 +1,7 @@ "Settings.Tabs.Header" = "පටිති"; "ContextMenu.SaveToCloud" = "මේඝයට සුරකින්න"; + +"Settings.BusinessBotPanelPlacement" = "ව්‍යාපාර බොට් පැනලය"; +"Settings.BusinessBotPanelPlacement.telegram" = "ඇලවූව වෙනුවට"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "ඇලවූවට පහළින්"; +"Settings.BusinessBotPanelPlacement.hidden" = "සඟවා ඇත"; diff --git a/Swiftgram/SGStrings/Strings/sk.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/sk.lproj/SGLocalizable.strings index 77376339e3..e30a8f3d16 100644 --- a/Swiftgram/SGStrings/Strings/sk.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/sk.lproj/SGLocalizable.strings @@ -2,3 +2,8 @@ "Settings.Tabs.ShowContacts" = "Zobraziť kontakty"; "Settings.Tabs.ShowNames" = "Zobraziť názvy záložiek"; "ContextMenu.SaveToCloud" = "Uložiť na Cloud"; + +"Settings.BusinessBotPanelPlacement" = "Panel firemného bota"; +"Settings.BusinessBotPanelPlacement.telegram" = "Namiesto pripnutých"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Pod pripnutými"; +"Settings.BusinessBotPanelPlacement.hidden" = "Skryté"; diff --git a/Swiftgram/SGStrings/Strings/sr.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/sr.lproj/SGLocalizable.strings index c71efa9f16..61e1e9121e 100644 --- a/Swiftgram/SGStrings/Strings/sr.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/sr.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Видео PIP са свлачење"; "Settings.swipeForVideoPIP.Notice" = "Ако је омогућено, померање видеа ће га отворити у режиму слике у слици."; + +"Settings.BusinessBotPanelPlacement" = "Панел пословног бота"; +"Settings.BusinessBotPanelPlacement.telegram" = "Уместо закачених"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Испод закачених"; +"Settings.BusinessBotPanelPlacement.hidden" = "Сакривено"; diff --git a/Swiftgram/SGStrings/Strings/sv.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/sv.lproj/SGLocalizable.strings index de9ed08295..63bd4d7235 100644 --- a/Swiftgram/SGStrings/Strings/sv.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/sv.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP med svep"; "Settings.swipeForVideoPIP.Notice" = "Om aktiverat, kommer svepning av video att öppna det i bild-i-bild-läge."; + +"Settings.BusinessBotPanelPlacement" = "Företagsbotpanel"; +"Settings.BusinessBotPanelPlacement.telegram" = "I stället för fästa"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Under fästa"; +"Settings.BusinessBotPanelPlacement.hidden" = "Dold"; diff --git a/Swiftgram/SGStrings/Strings/tr.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/tr.lproj/SGLocalizable.strings index 7f1b643ec7..f0421fafa3 100644 --- a/Swiftgram/SGStrings/Strings/tr.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/tr.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Videoyu kaydırarak PIP"; "Settings.swipeForVideoPIP.Notice" = "Eğer etkinleştirildi ise videoyu kaydırmak, Piksel içinde Piksel modunda açılacaktır."; + +"Settings.BusinessBotPanelPlacement" = "İş botu paneli"; +"Settings.BusinessBotPanelPlacement.telegram" = "Sabitlenen yerine"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Sabitlenen altında"; +"Settings.BusinessBotPanelPlacement.hidden" = "Gizli"; diff --git a/Swiftgram/SGStrings/Strings/uk.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/uk.lproj/SGLocalizable.strings index 405fcfb869..9a4b2aaa10 100644 --- a/Swiftgram/SGStrings/Strings/uk.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/uk.lproj/SGLocalizable.strings @@ -243,3 +243,8 @@ "PayWall.ValidationError" = "Помилка валідації"; "PayWall.ValidationError.TryAgain" = "Щось пішло не так під час перевірки покупки. Не хвилюйтеся! Спробуйте відновити покупки трохи пізніше."; "PayWall.ValidationError.Expired" = "Ваша підписка застаріла. Підпишіться, щоб відновити доступ до Pro-можливостей."; + +"Settings.BusinessBotPanelPlacement" = "Панель бізнес-бота"; +"Settings.BusinessBotPanelPlacement.telegram" = "Замість закріплених"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Під закріпленими"; +"Settings.BusinessBotPanelPlacement.hidden" = "Приховано"; diff --git a/Swiftgram/SGStrings/Strings/uz.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/uz.lproj/SGLocalizable.strings index cfab47bc31..6c025d6a9b 100644 --- a/Swiftgram/SGStrings/Strings/uz.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/uz.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP bilan Surish"; "Settings.swipeForVideoPIP.Notice" = "Agar yoqilgan bo'lsa, videoni surish uni Tasvir ichida Tasvir rejimida ochadi."; + +"Settings.BusinessBotPanelPlacement" = "Biznes bot paneli"; +"Settings.BusinessBotPanelPlacement.telegram" = "Mahkamlangan o'rniga"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Mahkamlangan ostida"; +"Settings.BusinessBotPanelPlacement.hidden" = "Yashirin"; diff --git a/Swiftgram/SGStrings/Strings/vi.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/vi.lproj/SGLocalizable.strings index 8878463be8..6a1e5c1fb1 100644 --- a/Swiftgram/SGStrings/Strings/vi.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/vi.lproj/SGLocalizable.strings @@ -150,3 +150,8 @@ "Settings.swipeForVideoPIP" = "Video PIP với Vuốt"; "Settings.swipeForVideoPIP.Notice" = "Nếu được kích hoạt, việc vuốt video sẽ mở nó ở chế độ Hình trong hình."; + +"Settings.BusinessBotPanelPlacement" = "Bảng bot doanh nghiệp"; +"Settings.BusinessBotPanelPlacement.telegram" = "Thay mục đã ghim"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "Dưới mục đã ghim"; +"Settings.BusinessBotPanelPlacement.hidden" = "Ẩn"; diff --git a/Swiftgram/SGStrings/Strings/zh-hans.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/zh-hans.lproj/SGLocalizable.strings index 460aabbfaa..842d300455 100644 --- a/Swiftgram/SGStrings/Strings/zh-hans.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/zh-hans.lproj/SGLocalizable.strings @@ -247,3 +247,8 @@ "PayWall.ValidationError" = "验证错误"; "PayWall.ValidationError.TryAgain" = "购买验证过程中出现问题。不用担心!稍后再试恢复购买。"; "PayWall.ValidationError.Expired" = "您的订阅已过期。再次订阅以重新获得专业版功能。"; + +"Settings.BusinessBotPanelPlacement" = "商务机器人面板"; +"Settings.BusinessBotPanelPlacement.telegram" = "代替置顶"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "置顶下方"; +"Settings.BusinessBotPanelPlacement.hidden" = "隐藏"; diff --git a/Swiftgram/SGStrings/Strings/zh-hant.lproj/SGLocalizable.strings b/Swiftgram/SGStrings/Strings/zh-hant.lproj/SGLocalizable.strings index cc3963ac1f..a5395120f1 100644 --- a/Swiftgram/SGStrings/Strings/zh-hant.lproj/SGLocalizable.strings +++ b/Swiftgram/SGStrings/Strings/zh-hant.lproj/SGLocalizable.strings @@ -247,3 +247,8 @@ "PayWall.ValidationError" = "驗證錯誤"; "PayWall.ValidationError.TryAgain" = "在購買驗證過程中出錯。別擔心!稍後再試恢復購買。"; "PayWall.ValidationError.Expired" = "您的訂閱已過期。請重新訂閱以恢復訪問 Pro 功能。"; + +"Settings.BusinessBotPanelPlacement" = "商務機器人面板"; +"Settings.BusinessBotPanelPlacement.telegram" = "取代置頂"; +"Settings.BusinessBotPanelPlacement.swiftgram" = "置頂下方"; +"Settings.BusinessBotPanelPlacement.hidden" = "隱藏"; diff --git a/submodules/TelegramUI/Components/Chat/ChatAvatarNavigationNode/Sources/ChatAvatarNavigationNode.swift b/submodules/TelegramUI/Components/Chat/ChatAvatarNavigationNode/Sources/ChatAvatarNavigationNode.swift index 27b644ffa8..a9bac8b62c 100644 --- a/submodules/TelegramUI/Components/Chat/ChatAvatarNavigationNode/Sources/ChatAvatarNavigationNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatAvatarNavigationNode/Sources/ChatAvatarNavigationNode.swift @@ -26,6 +26,9 @@ public final class ChatAvatarNavigationNode: ASDisplayNode { private let containerNode: ContextControllerSourceNode public var avatarNode: AvatarNode + // MARK: Swiftgram + private var businessBotAvatarNode: AvatarNode? + private var businessBotPeer: EnginePeer? private var avatarVideoNode: AvatarVideoNode? public private(set) var avatarStoryView: ComponentView? @@ -55,6 +58,15 @@ public final class ChatAvatarNavigationNode: ASDisplayNode { } } } + // MARK: Swiftgram + public func updateNavigationBarStyle(_ style: NavigationBarStyle) { + if case .glass = style { + self.containerNode.animateScale = false + } else { + self.containerNode.animateScale = true + } + } + public var businessBotAction: ((EnginePeer) -> Void)? // MARK: Swiftgram override public init() { self.containerNode = ContextControllerSourceNode() @@ -110,6 +122,52 @@ public final class ChatAvatarNavigationNode: ASDisplayNode { } self.avatarNode.isHidden = true + self.setBusinessBotIndicator(context: context, theme: nil, peer: nil) // MARK: Swiftgram + } + + // MARK: Swiftgram + public func setBusinessBotIndicator(context: AccountContext, theme: PresentationTheme?, peer: EnginePeer?) { + guard let peer, let theme else { + self.businessBotPeer = nil + if let businessBotAvatarNode = self.businessBotAvatarNode { + self.businessBotAvatarNode = nil + businessBotAvatarNode.removeFromSupernode() + } + return + } + self.businessBotPeer = peer + + let avatarNode: AvatarNode + if let current = self.businessBotAvatarNode { + avatarNode = current + } else { + avatarNode = AvatarNode(font: avatarPlaceholderFont(size: 8.0)) + avatarNode.view.isUserInteractionEnabled = true + self.businessBotAvatarNode = avatarNode + self.containerNode.addSubnode(avatarNode) + + let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.businessBotTapGesture(_:))) + avatarNode.view.addGestureRecognizer(tapRecognizer) + } + + let avatarSize = CGSize(width: 18.0, height: 18.0) + let avatarFrame = CGRect(origin: CGPoint(x: self.containerNode.bounds.width - avatarSize.width, y: self.containerNode.bounds.height - avatarSize.height), size: avatarSize) + + avatarNode.frame = avatarFrame + avatarNode.view.layer.cornerRadius = avatarSize.width / 2.0 + avatarNode.view.layer.borderWidth = 1.0 + avatarNode.view.layer.borderColor = theme.rootController.navigationBar.opaqueBackgroundColor.cgColor + avatarNode.updateSize(size: avatarSize) + avatarNode.setPeer(context: context, theme: theme, peer: peer, displayDimensions: avatarSize) + + self.containerNode.view.bringSubviewToFront(avatarNode.view) + } + + @objc private func businessBotTapGesture(_ recognizer: UITapGestureRecognizer) { + guard recognizer.state == .ended, let businessBotPeer = self.businessBotPeer else { + return + } + self.businessBotAction?(businessBotPeer) } public func setPeer( @@ -122,7 +180,8 @@ public final class ChatAvatarNavigationNode: ASDisplayNode { clipStyle: AvatarNodeClipStyle = .round, synchronousLoad: Bool = false, displayDimensions: CGSize = CGSize(width: 60.0, height: 60.0), - storeUnrounded: Bool = false + storeUnrounded: Bool = false, + businessBotPeer: EnginePeer? = nil // MARK: Swiftgram ) { self.context = context @@ -152,6 +211,7 @@ public final class ChatAvatarNavigationNode: ASDisplayNode { self.starView = nil starView.removeFromSuperview() } + self.setBusinessBotIndicator(context: context, theme: theme, peer: businessBotPeer) // MARK: Swiftgram if let peer = peer, peer.isPremium { self.cachedDataDisposable.set((context.account.postbox.peerView(id: peer.id) diff --git a/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift b/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift index 9bb31f2bbe..f0c3f40d45 100644 --- a/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift +++ b/submodules/TelegramUI/Sources/Chat/ChatControllerLoadDisplayNode.swift @@ -128,6 +128,9 @@ import GlobalControlPanelsContext import ComponentFlow import ComponentDisplayAdapters +// MARK: Swiftgram +import SGSimpleSettings + extension ChatControllerImpl { func reloadChatLocation(chatLocation: ChatLocation, chatLocationContextHolder: Atomic, historyNode: ChatHistoryListNodeImpl, apply: @escaping ((ContainedViewLayoutTransition?) -> Void) -> Void) { self.contentDataReady.set(false) @@ -225,16 +228,35 @@ extension ChatControllerImpl { }) } + // MARK: Swiftgram + private func hiddenBusinessBotAvatarPeer() -> EnginePeer? { + let businessBotPanelPlacement = SGSimpleSettings.BusinessBotTitlePanelPlacement(rawValue: SGSimpleSettings.shared.businessBotTitlePanelPlacement) ?? .swiftgram + guard businessBotPanelPlacement == .hidden else { + return nil + } + return self.contentData?.state.contactStatus?.managingBot?.bot + } + + // MARK: Swiftgram + func updateBusinessBotAvatarIndicator() { + (self.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.setBusinessBotIndicator( + context: self.context, + theme: self.presentationData.theme, + peer: self.hiddenBusinessBotAvatarPeer() + ) + } + func contentDataUpdated(synchronous: Bool, forceAnimationTransition: ContainedViewLayoutTransition?, previousState: ContentData.State) { guard let contentData = self.contentData else { return } + let businessBotAvatarPeer = self.hiddenBusinessBotAvatarPeer() // MARK: Swiftgram self.navigationBar?.userInfo = contentData.state.navigationUserInfo if let infoAvatar = contentData.state.infoAvatar { switch infoAvatar { case let .peer(peer, imageOverride, contextActionIsEnabled, accessibilityLabel): - (self.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.setPeer(context: self.context, theme: self.presentationData.theme, peer: peer, overrideImage: imageOverride, synchronousLoad: synchronous) + (self.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.setPeer(context: self.context, theme: self.presentationData.theme, peer: peer, overrideImage: imageOverride, synchronousLoad: synchronous, businessBotPeer: businessBotAvatarPeer) // MARK: Swiftgram (self.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.contextActionIsEnabled = contextActionIsEnabled self.chatInfoNavigationButton?.buttonItem.accessibilityLabel = accessibilityLabel case let .emojiStatus(content, contextActionIsEnabled): @@ -243,6 +265,7 @@ extension ChatControllerImpl { self.chatInfoNavigationButton?.buttonItem.accessibilityLabel = self.presentationData.strings.Conversation_ContextMenuOpenProfile } } else { + (self.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.setBusinessBotIndicator(context: self.context, theme: self.presentationData.theme, peer: nil) // MARK: Swiftgram (self.chatInfoNavigationButton?.buttonItem.customDisplayNode as? ChatAvatarNavigationNode)?.contextActionIsEnabled = false } diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 3c9355e123..472a02a0d9 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -5866,6 +5866,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G switch chatLocation { case .peer, .replyThread: let avatarNode = ChatAvatarNavigationNode() + avatarNode.updateNavigationBarStyle(.glass) // MARK: Swiftgram avatarNode.contextAction = { [weak self] node, gesture in guard let strongSelf = self, let peer = strongSelf.presentationInterfaceState.renderedPeer?.chatMainPeer else { return @@ -6208,6 +6209,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } strongSelf.presentInGlobalOverlay(contextController) } + // MARK: Swiftgram + avatarNode.businessBotAction = { [weak self] peer in + guard let strongSelf = self, let navigationController = strongSelf.navigationController as? NavigationController else { + return + } + strongSelf.context.sharedContext.navigateToChatController(NavigateToChatControllerParams(navigationController: navigationController, context: strongSelf.context, chatLocation: .peer(peer), keepStack: .always, purposefulAction: {}, peekData: nil)) + } chatInfoButtonItem = UIBarButtonItem(customDisplayNode: avatarNode)! self.avatarNode = avatarNode @@ -7082,6 +7090,7 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G } self.navigationBar?.updatePresentationData(NavigationBarPresentationData(theme: navigationBarTheme, strings: NavigationBarStrings(presentationStrings: self.presentationData.strings)), transition: .immediate) + self.avatarNode?.updateNavigationBarStyle(navigationBarTheme.style) // MARK: Swiftgram self.moreBarButton.updateColor(color: presentationTheme.chat.inputPanel.panelControlColor) } diff --git a/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift b/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift index 0c2d3c2591..cdb6eb5576 100644 --- a/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift +++ b/submodules/TelegramUI/Sources/ChatInterfaceTitlePanelNodes.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import Display import TelegramCore import AccountContext import ChatPresentationInterfaceState @@ -7,6 +8,44 @@ import ChatControllerInteraction import ComponentFlow import ChatSideTopicsPanel import LegacyChatHeaderPanelComponent +import SGSimpleSettings + +// MARK: Swiftgram +private final class ChatStackedTitlePanelNode: ChatTitleAccessoryPanelNode { + let topPanel: ChatTitleAccessoryPanelNode + let bottomPanel: ChatTitleAccessoryPanelNode + + init(topPanel: ChatTitleAccessoryPanelNode, bottomPanel: ChatTitleAccessoryPanelNode) { + self.topPanel = topPanel + self.bottomPanel = bottomPanel + + super.init() + + self.addSubnode(self.topPanel) + self.addSubnode(self.bottomPanel) + } + + override var interfaceInteraction: ChatPanelInterfaceInteraction? { + didSet { + self.topPanel.interfaceInteraction = self.interfaceInteraction + self.bottomPanel.interfaceInteraction = self.interfaceInteraction + } + } + + override func updateLayout(width: CGFloat, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition, interfaceState: ChatPresentationInterfaceState) -> LayoutResult { + let topResult = self.topPanel.updateLayout(width: width, leftInset: leftInset, rightInset: rightInset, transition: transition, interfaceState: interfaceState) + transition.updateFrame(node: self.topPanel, frame: CGRect(origin: CGPoint(), size: CGSize(width: width, height: topResult.backgroundHeight))) + + let bottomResult = self.bottomPanel.updateLayout(width: width, leftInset: leftInset, rightInset: rightInset, transition: transition, interfaceState: interfaceState) + transition.updateFrame(node: self.bottomPanel, frame: CGRect(origin: CGPoint(x: 0.0, y: topResult.backgroundHeight), size: CGSize(width: width, height: bottomResult.backgroundHeight))) + + return LayoutResult( + backgroundHeight: topResult.backgroundHeight + bottomResult.backgroundHeight, + insetHeight: topResult.insetHeight + bottomResult.insetHeight, + hitTestSlop: max(topResult.hitTestSlop, bottomResult.hitTestSlop) + ) + } +} func titlePanelForChatPresentationInterfaceState(_ chatPresentationInterfaceState: ChatPresentationInterfaceState, context: AccountContext, currentPanel: ChatTitleAccessoryPanelNode?, controllerInteraction: ChatControllerInteraction?, interfaceInteraction: ChatPanelInterfaceInteraction?, force: Bool) -> ChatTitleAccessoryPanelNode? { if !force, case .standard(.embedded) = chatPresentationInterfaceState.mode { @@ -182,7 +221,31 @@ func titlePanelForChatPresentationInterfaceState(_ chatPresentationInterfaceStat return panel } } else if !chatPresentationInterfaceState.peerIsBlocked && !inhibitTitlePanelDisplay, let contactStatus = chatPresentationInterfaceState.contactStatus, contactStatus.managingBot != nil { - if let currentPanel = currentPanel as? ChatManagingBotTitlePanelNode { + // MARK: Swiftgram + let businessBotPanelPlacement = SGSimpleSettings.BusinessBotTitlePanelPlacement(rawValue: SGSimpleSettings.shared.businessBotTitlePanelPlacement) ?? .swiftgram + if businessBotPanelPlacement == .hidden { + } else if businessBotPanelPlacement == .swiftgram, selectedContext == .pinnedMessage { + if let currentPanel = currentPanel as? ChatStackedTitlePanelNode { + currentPanel.interfaceInteraction = interfaceInteraction + return currentPanel + } else { + let pinnedPanel: ChatPinnedMessageTitlePanelNode + if let currentPanel = currentPanel as? ChatPinnedMessageTitlePanelNode { + pinnedPanel = currentPanel + } else { + pinnedPanel = ChatPinnedMessageTitlePanelNode(context: context, animationCache: controllerInteraction?.presentationContext.animationCache, animationRenderer: controllerInteraction?.presentationContext.animationRenderer) + } + let managingBotPanel: ChatManagingBotTitlePanelNode + if let currentPanel = currentPanel as? ChatManagingBotTitlePanelNode { + managingBotPanel = currentPanel + } else { + managingBotPanel = ChatManagingBotTitlePanelNode(context: context) + } + let panel = ChatStackedTitlePanelNode(topPanel: pinnedPanel, bottomPanel: managingBotPanel) + panel.interfaceInteraction = interfaceInteraction + return panel + } + } else if let currentPanel = currentPanel as? ChatManagingBotTitlePanelNode { return currentPanel } else { let panel = ChatManagingBotTitlePanelNode(context: context) diff --git a/submodules/TelegramUI/Sources/ChatManagingBotTitlePanelNode.swift b/submodules/TelegramUI/Sources/ChatManagingBotTitlePanelNode.swift index 1467fa6d33..f6b2067c34 100644 --- a/submodules/TelegramUI/Sources/ChatManagingBotTitlePanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatManagingBotTitlePanelNode.swift @@ -15,6 +15,7 @@ import BundleIconComponent import ContextUI import SwiftSignalKit import LegacyChatHeaderPanelComponent +import SGSimpleSettings private final class ChatManagingBotTitlePanelComponent: Component { let context: AccountContext @@ -293,6 +294,17 @@ final class ChatManagingBotTitlePanelNode: ChatTitleAccessoryPanelNode { let strings = self.context.sharedContext.currentPresentationData.with { $0 }.strings var items: [ContextMenuItem] = [] + + // MARK: Swiftgram + items.append(.action(ContextMenuActionItem(text: strings.SponsoredMessageMenu_Hide, icon: { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Eye"), color: theme.contextMenu.primaryColor) + }, action: { [weak self] _, a in + a(.default) + + SGSimpleSettings.shared.businessBotTitlePanelPlacement = SGSimpleSettings.BusinessBotTitlePanelPlacement.hidden.rawValue + (self?.interfaceInteraction?.chatController() as? ChatControllerImpl)?.updateBusinessBotAvatarIndicator() // MARK: Swiftgram + self?.interfaceInteraction?.requestLayout(.animated(duration: 0.2, curve: .easeInOut)) + }))) items.append(.action(ContextMenuActionItem(text: strings.Chat_BusinessBotPanel_Menu_RemoveBot, textColor: .destructive, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Clear"), color: theme.contextMenu.destructiveColor) diff --git a/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift b/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift index 008d1853d3..e5e5e2d634 100644 --- a/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatPinnedMessageTitlePanelNode.swift @@ -403,7 +403,7 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { } } - let rightInset: CGFloat = 18.0 + rightInset + let rightInset: CGFloat = 14.0 + rightInset // MARK: Swiftgram var tapButtonRightInset: CGFloat = rightInset @@ -608,7 +608,7 @@ final class ChatPinnedMessageTitlePanelNode: ChatTitleAccessoryPanelNode { let previousMediaReference = self.previousMediaReference let context = self.context - let contentLeftInset: CGFloat = leftInset + 18.0 + let contentLeftInset: CGFloat = leftInset + 14.0 // MARK: Swiftgram var textLineInset: CGFloat = 10.0 var rightInset: CGFloat = 14.0 + rightInset