From a188b485f21db064b90021704ad4451cca4f7241 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Sun, 25 Dec 2022 20:10:32 +0400 Subject: [PATCH] Add a debug option for disabling quick reactions (by utsavDave97) --- .../Telegram-iOS/en.lproj/Localizable.strings | 4 ++-- .../Sources/DebugController.swift | 20 ++++++++++++++++--- .../TelegramUI/Sources/ChatController.swift | 5 +++++ .../Sources/ExperimentalUISettings.swift | 10 ++++++++-- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index e946ef607d..24ef23a9ce 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -8569,8 +8569,8 @@ Sorry for the inconvenience."; "StorageManagement.TitleCleared" = "Storage Cleared"; "StorageManagement.DescriptionCleared" = "All media can be re-downloaded from the Telegram cloud if you need it again."; -"StorageManagement.DescriptionChatUsage" = "This chat uses %1$@%% of your Telegram cache."; -"StorageManagement.DescriptionAppUsage" = "Telegram uses %1$@%% of your free disk space."; +"StorageManagement.DescriptionChatUsage" = "This chat uses %1$@% of your Telegram cache."; +"StorageManagement.DescriptionAppUsage" = "Telegram uses %1$@% of your free disk space."; "StorageManagement.ClearAll" = "Clear All Cache"; "StorageManagement.ClearSelected" = "Clear Selected"; diff --git a/submodules/DebugSettingsUI/Sources/DebugController.swift b/submodules/DebugSettingsUI/Sources/DebugController.swift index f59c799aad..f8c6c5f4d5 100644 --- a/submodules/DebugSettingsUI/Sources/DebugController.swift +++ b/submodules/DebugSettingsUI/Sources/DebugController.swift @@ -93,6 +93,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { case enableReactionOverrides(Bool) case playerEmbedding(Bool) case playlistPlayback(Bool) + case enableQuickReactionSwitch(Bool) case voiceConference case preferredVideoCodec(Int, String, String?, Bool) case disableVideoAspectScaling(Bool) @@ -113,7 +114,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { return DebugControllerSection.logging.rawValue case .enableRaiseToSpeak, .keepChatNavigationStack, .skipReadHistory, .crashOnSlowQueries: return DebugControllerSection.experiments.rawValue - case .clearTips, .crash, .resetData, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .resetWebViewCache, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .playerEmbedding, .playlistPlayback, .voiceConference, .experimentalCompatibility, .enableDebugDataDisplay, .acceleratedStickers, .experimentalBackground, .inlineForums, .localTranscription, . enableReactionOverrides, .restorePurchases: + case .clearTips, .crash, .resetData, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .resetWebViewCache, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .playerEmbedding, .playlistPlayback, .enableQuickReactionSwitch, .voiceConference, .experimentalCompatibility, .enableDebugDataDisplay, .acceleratedStickers, .experimentalBackground, .inlineForums, .localTranscription, . enableReactionOverrides, .restorePurchases: return DebugControllerSection.experiments.rawValue case .preferredVideoCodec: return DebugControllerSection.videoExperiments.rawValue @@ -206,10 +207,12 @@ private enum DebugControllerEntry: ItemListNodeEntry { return 38 case .playlistPlayback: return 39 - case .voiceConference: + case .enableQuickReactionSwitch: return 40 + case .voiceConference: + return 41 case let .preferredVideoCodec(index, _, _, _): - return 41 + index + return 42 + index case .disableVideoAspectScaling: return 100 case .enableVoipTcp: @@ -1161,6 +1164,16 @@ private enum DebugControllerEntry: ItemListNodeEntry { }) }).start() }) + case let .enableQuickReactionSwitch(value): + return ItemListSwitchItem(presentationData: presentationData, title: "Enable Quick Reaction", value: value, sectionId: self.section, style: .blocks, updated: { value in + let _ = arguments.sharedContext.accountManager.transaction ({ transaction in + transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in + var settings = settings?.get(ExperimentalUISettings.self) ?? ExperimentalUISettings.defaultSettings + settings.disableQuickReaction = !value + return PreferencesEntry(settings) + }) + }).start() + }) case .voiceConference: return ItemListDisclosureItem(presentationData: presentationData, title: "Voice Conference (Test)", label: "", sectionId: self.section, style: .blocks, action: { guard let _ = arguments.context else { @@ -1283,6 +1296,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present entries.append(.restorePurchases(presentationData.theme)) entries.append(.playerEmbedding(experimentalSettings.playerEmbedding)) entries.append(.playlistPlayback(experimentalSettings.playlistPlayback)) + entries.append(.enableQuickReactionSwitch(!experimentalSettings.disableQuickReaction)) } let codecs: [(String, String?)] = [ diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index eb4507953c..334b8b739f 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -1647,6 +1647,11 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G return } + if strongSelf.context.sharedContext.immediateExperimentalUISettings.disableQuickReaction { + itemNode.openMessageContextMenu() + return + } + let chosenReaction: MessageReaction.Reaction? switch reaction { diff --git a/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift b/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift index 5bda3a0f4a..761909501a 100644 --- a/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift +++ b/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift @@ -48,6 +48,7 @@ public struct ExperimentalUISettings: Codable, Equatable { public var inlineForums: Bool public var accountReactionEffectOverrides: [AccountReactionOverrides] public var accountStickerEffectOverrides: [AccountReactionOverrides] + public var disableQuickReaction: Bool public static var defaultSettings: ExperimentalUISettings { return ExperimentalUISettings( @@ -72,7 +73,8 @@ public struct ExperimentalUISettings: Codable, Equatable { enableReactionOverrides: false, inlineForums: false, accountReactionEffectOverrides: [], - accountStickerEffectOverrides: [] + accountStickerEffectOverrides: [], + disableQuickReaction: false ) } @@ -98,7 +100,8 @@ public struct ExperimentalUISettings: Codable, Equatable { enableReactionOverrides: Bool, inlineForums: Bool, accountReactionEffectOverrides: [AccountReactionOverrides], - accountStickerEffectOverrides: [AccountReactionOverrides] + accountStickerEffectOverrides: [AccountReactionOverrides], + disableQuickReaction: Bool ) { self.keepChatNavigationStack = keepChatNavigationStack self.skipReadHistory = skipReadHistory @@ -122,6 +125,7 @@ public struct ExperimentalUISettings: Codable, Equatable { self.inlineForums = inlineForums self.accountReactionEffectOverrides = accountReactionEffectOverrides self.accountStickerEffectOverrides = accountStickerEffectOverrides + self.disableQuickReaction = disableQuickReaction } public init(from decoder: Decoder) throws { @@ -149,6 +153,7 @@ public struct ExperimentalUISettings: Codable, Equatable { self.inlineForums = try container.decodeIfPresent(Bool.self, forKey: "inlineForums") ?? false self.accountReactionEffectOverrides = (try? container.decodeIfPresent([AccountReactionOverrides].self, forKey: "accountReactionEffectOverrides")) ?? [] self.accountStickerEffectOverrides = (try? container.decodeIfPresent([AccountReactionOverrides].self, forKey: "accountStickerEffectOverrides")) ?? [] + self.disableQuickReaction = try container.decodeIfPresent(Bool.self, forKey: "disableQuickReaction") ?? false } public func encode(to encoder: Encoder) throws { @@ -176,6 +181,7 @@ public struct ExperimentalUISettings: Codable, Equatable { try container.encode(self.inlineForums, forKey: "inlineForums") try container.encode(self.accountReactionEffectOverrides, forKey: "accountReactionEffectOverrides") try container.encode(self.accountStickerEffectOverrides, forKey: "accountStickerEffectOverrides") + try container.encode(self.disableQuickReaction, forKey: "disableQuickReaction") } }