Glass debug

This commit is contained in:
Isaac 2025-09-30 01:53:14 +08:00
parent 724b4ccbdf
commit 5bbc75fc7c
6 changed files with 22 additions and 21 deletions

View File

@ -95,7 +95,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
case knockoutWallpaper(PresentationTheme, Bool) case knockoutWallpaper(PresentationTheme, Bool)
case experimentalCompatibility(Bool) case experimentalCompatibility(Bool)
case enableDebugDataDisplay(Bool) case enableDebugDataDisplay(Bool)
case rippleEffect(Bool) case fakeGlass(Bool)
case browserExperiment(Bool) case browserExperiment(Bool)
case allForumsHaveTabs(Bool) case allForumsHaveTabs(Bool)
case enableReactionOverrides(Bool) case enableReactionOverrides(Bool)
@ -135,7 +135,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
return DebugControllerSection.web.rawValue return DebugControllerSection.web.rawValue
case .keepChatNavigationStack, .skipReadHistory, .alwaysDisplayTyping, .debugRatingLayout, .crashOnSlowQueries, .crashOnMemoryPressure: case .keepChatNavigationStack, .skipReadHistory, .alwaysDisplayTyping, .debugRatingLayout, .crashOnSlowQueries, .crashOnMemoryPressure:
return DebugControllerSection.experiments.rawValue return DebugControllerSection.experiments.rawValue
case .clearTips, .resetNotifications, .crash, .fillLocalSavedMessageCache, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .resetTagHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .compressedEmojiCache, .storiesJpegExperiment, .checkSerializedData, .enableQuickReactionSwitch, .experimentalCompatibility, .enableDebugDataDisplay, .rippleEffect, .browserExperiment, .allForumsHaveTabs, .enableReactionOverrides, .restorePurchases, .disableReloginTokens, .liveStreamV2, .experimentalCallMute, .playerV2, .devRequests, .enableUpdates, .fakeAds, .enableLocalTranslation: case .clearTips, .resetNotifications, .crash, .fillLocalSavedMessageCache, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .resetTagHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .compressedEmojiCache, .storiesJpegExperiment, .checkSerializedData, .enableQuickReactionSwitch, .experimentalCompatibility, .enableDebugDataDisplay, .fakeGlass, .browserExperiment, .allForumsHaveTabs, .enableReactionOverrides, .restorePurchases, .disableReloginTokens, .liveStreamV2, .experimentalCallMute, .playerV2, .devRequests, .enableUpdates, .fakeAds, .enableLocalTranslation:
return DebugControllerSection.experiments.rawValue return DebugControllerSection.experiments.rawValue
case .logTranslationRecognition, .resetTranslationStates: case .logTranslationRecognition, .resetTranslationStates:
return DebugControllerSection.translation.rawValue return DebugControllerSection.translation.rawValue
@ -226,7 +226,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
return 37 return 37
case .enableDebugDataDisplay: case .enableDebugDataDisplay:
return 38 return 38
case .rippleEffect: case .fakeGlass:
return 39 return 39
case .browserExperiment: case .browserExperiment:
return 40 return 40
@ -1258,12 +1258,12 @@ private enum DebugControllerEntry: ItemListNodeEntry {
}) })
}).start() }).start()
}) })
case let .rippleEffect(value): case let .fakeGlass(value):
return ItemListSwitchItem(presentationData: presentationData, title: "Ripple", value: value, sectionId: self.section, style: .blocks, updated: { value in return ItemListSwitchItem(presentationData: presentationData, title: "Fake glass", value: value, sectionId: self.section, style: .blocks, updated: { value in
let _ = arguments.sharedContext.accountManager.transaction ({ transaction in let _ = arguments.sharedContext.accountManager.transaction ({ transaction in
transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in
var settings = settings?.get(ExperimentalUISettings.self) ?? ExperimentalUISettings.defaultSettings var settings = settings?.get(ExperimentalUISettings.self) ?? ExperimentalUISettings.defaultSettings
settings.rippleEffect = value settings.fakeGlass = value
return PreferencesEntry(settings) return PreferencesEntry(settings)
}) })
}).start() }).start()
@ -1543,7 +1543,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present
entries.append(.knockoutWallpaper(presentationData.theme, experimentalSettings.knockoutWallpaper)) entries.append(.knockoutWallpaper(presentationData.theme, experimentalSettings.knockoutWallpaper))
entries.append(.experimentalCompatibility(experimentalSettings.experimentalCompatibility)) entries.append(.experimentalCompatibility(experimentalSettings.experimentalCompatibility))
entries.append(.enableDebugDataDisplay(experimentalSettings.enableDebugDataDisplay)) entries.append(.enableDebugDataDisplay(experimentalSettings.enableDebugDataDisplay))
entries.append(.rippleEffect(experimentalSettings.rippleEffect)) entries.append(.fakeGlass(experimentalSettings.fakeGlass))
#if DEBUG #if DEBUG
entries.append(.browserExperiment(experimentalSettings.browserExperiment)) entries.append(.browserExperiment(experimentalSettings.browserExperiment))
#else #else

View File

@ -294,8 +294,10 @@ public class GlassBackgroundView: UIView {
private var params: Params? private var params: Params?
public static var useCustomGlassImpl: Bool = false
public override init(frame: CGRect) { public override init(frame: CGRect) {
if #available(iOS 26.0, *) { if #available(iOS 26.0, *), !GlassBackgroundView.useCustomGlassImpl {
self.backgroundNode = nil self.backgroundNode = nil
let glassEffect = UIGlassEffect(style: .regular) let glassEffect = UIGlassEffect(style: .regular)

View File

@ -89,7 +89,7 @@ public final class TabBarComponent: Component {
private weak var state: EmptyComponentState? private weak var state: EmptyComponentState?
public override init(frame: CGRect) { public override init(frame: CGRect) {
self.backgroundView = GlassBackgroundView(frame: CGRect()) self.backgroundView = GlassBackgroundView()
self.selectionView = GlassBackgroundView.ContentImageView() self.selectionView = GlassBackgroundView.ContentImageView()
self.contextGestureContainerView = ContextControllerSourceView() self.contextGestureContainerView = ContextControllerSourceView()

View File

@ -3761,12 +3761,6 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
return return
} }
if let view, let location {
if context.sharedContext.immediateExperimentalUISettings.rippleEffect {
self.wrappingNode.triggerRipple(at: self.contentContainerNode.view.convert(location, from: view))
}
}
switch self.chatPresentationInterfaceState.inputMode { switch self.chatPresentationInterfaceState.inputMode {
case .none: case .none:
break break

View File

@ -86,6 +86,7 @@ import SendInviteLinkScreen
import PostSuggestionsSettingsScreen import PostSuggestionsSettingsScreen
import ForumSettingsScreen import ForumSettingsScreen
import ForumCreateTopicScreen import ForumCreateTopicScreen
import GlassBackgroundComponent
private final class AccountUserInterfaceInUseContext { private final class AccountUserInterfaceInUseContext {
let subscribers = Bag<(Bool) -> Void>() let subscribers = Bag<(Bool) -> Void>()
@ -477,12 +478,16 @@ public final class SharedAccountContextImpl: SharedAccountContext {
let immediateExperimentalUISettingsValue = self.immediateExperimentalUISettingsValue let immediateExperimentalUISettingsValue = self.immediateExperimentalUISettingsValue
let _ = immediateExperimentalUISettingsValue.swap(initialPresentationDataAndSettings.experimentalUISettings) let _ = immediateExperimentalUISettingsValue.swap(initialPresentationDataAndSettings.experimentalUISettings)
GlassBackgroundView.useCustomGlassImpl = immediateExperimentalUISettingsValue.with({ $0.fakeGlass })
self.experimentalUISettingsDisposable = (self.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.experimentalUISettings]) self.experimentalUISettingsDisposable = (self.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.experimentalUISettings])
|> deliverOnMainQueue).start(next: { sharedData in |> deliverOnMainQueue).start(next: { sharedData in
if let settings = sharedData.entries[ApplicationSpecificSharedDataKeys.experimentalUISettings]?.get(ExperimentalUISettings.self) { if let settings = sharedData.entries[ApplicationSpecificSharedDataKeys.experimentalUISettings]?.get(ExperimentalUISettings.self) {
let _ = immediateExperimentalUISettingsValue.swap(settings) let _ = immediateExperimentalUISettingsValue.swap(settings)
flatBuffers_checkedGet = settings.checkSerializedData flatBuffers_checkedGet = settings.checkSerializedData
GlassBackgroundView.useCustomGlassImpl = settings.fakeGlass
} }
}) })

View File

@ -38,7 +38,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
public var enableVoipTcp: Bool public var enableVoipTcp: Bool
public var experimentalCompatibility: Bool public var experimentalCompatibility: Bool
public var enableDebugDataDisplay: Bool public var enableDebugDataDisplay: Bool
public var rippleEffect: Bool public var fakeGlass: Bool
public var compressedEmojiCache: Bool public var compressedEmojiCache: Bool
public var localTranscription: Bool public var localTranscription: Bool
public var enableReactionOverrides: Bool public var enableReactionOverrides: Bool
@ -86,7 +86,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
enableVoipTcp: false, enableVoipTcp: false,
experimentalCompatibility: false, experimentalCompatibility: false,
enableDebugDataDisplay: false, enableDebugDataDisplay: false,
rippleEffect: false, fakeGlass: false,
compressedEmojiCache: false, compressedEmojiCache: false,
localTranscription: false, localTranscription: false,
enableReactionOverrides: false, enableReactionOverrides: false,
@ -135,7 +135,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
enableVoipTcp: Bool, enableVoipTcp: Bool,
experimentalCompatibility: Bool, experimentalCompatibility: Bool,
enableDebugDataDisplay: Bool, enableDebugDataDisplay: Bool,
rippleEffect: Bool, fakeGlass: Bool,
compressedEmojiCache: Bool, compressedEmojiCache: Bool,
localTranscription: Bool, localTranscription: Bool,
enableReactionOverrides: Bool, enableReactionOverrides: Bool,
@ -181,7 +181,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
self.enableVoipTcp = enableVoipTcp self.enableVoipTcp = enableVoipTcp
self.experimentalCompatibility = experimentalCompatibility self.experimentalCompatibility = experimentalCompatibility
self.enableDebugDataDisplay = enableDebugDataDisplay self.enableDebugDataDisplay = enableDebugDataDisplay
self.rippleEffect = rippleEffect self.fakeGlass = fakeGlass
self.compressedEmojiCache = compressedEmojiCache self.compressedEmojiCache = compressedEmojiCache
self.localTranscription = localTranscription self.localTranscription = localTranscription
self.enableReactionOverrides = enableReactionOverrides self.enableReactionOverrides = enableReactionOverrides
@ -231,7 +231,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
self.enableVoipTcp = (try container.decodeIfPresent(Int32.self, forKey: "enableVoipTcp") ?? 0) != 0 self.enableVoipTcp = (try container.decodeIfPresent(Int32.self, forKey: "enableVoipTcp") ?? 0) != 0
self.experimentalCompatibility = (try container.decodeIfPresent(Int32.self, forKey: "experimentalCompatibility") ?? 0) != 0 self.experimentalCompatibility = (try container.decodeIfPresent(Int32.self, forKey: "experimentalCompatibility") ?? 0) != 0
self.enableDebugDataDisplay = (try container.decodeIfPresent(Int32.self, forKey: "enableDebugDataDisplay") ?? 0) != 0 self.enableDebugDataDisplay = (try container.decodeIfPresent(Int32.self, forKey: "enableDebugDataDisplay") ?? 0) != 0
self.rippleEffect = (try container.decodeIfPresent(Int32.self, forKey: "rippleEffect") ?? 0) != 0 self.fakeGlass = (try container.decodeIfPresent(Int32.self, forKey: "fakeGlass") ?? 0) != 0
self.compressedEmojiCache = (try container.decodeIfPresent(Int32.self, forKey: "compressedEmojiCache") ?? 0) != 0 self.compressedEmojiCache = (try container.decodeIfPresent(Int32.self, forKey: "compressedEmojiCache") ?? 0) != 0
self.localTranscription = (try container.decodeIfPresent(Int32.self, forKey: "localTranscription") ?? 0) != 0 self.localTranscription = (try container.decodeIfPresent(Int32.self, forKey: "localTranscription") ?? 0) != 0
self.enableReactionOverrides = try container.decodeIfPresent(Bool.self, forKey: "enableReactionOverrides") ?? false self.enableReactionOverrides = try container.decodeIfPresent(Bool.self, forKey: "enableReactionOverrides") ?? false
@ -281,7 +281,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
try container.encode((self.enableVoipTcp ? 1 : 0) as Int32, forKey: "enableVoipTcp") try container.encode((self.enableVoipTcp ? 1 : 0) as Int32, forKey: "enableVoipTcp")
try container.encode((self.experimentalCompatibility ? 1 : 0) as Int32, forKey: "experimentalCompatibility") try container.encode((self.experimentalCompatibility ? 1 : 0) as Int32, forKey: "experimentalCompatibility")
try container.encode((self.enableDebugDataDisplay ? 1 : 0) as Int32, forKey: "enableDebugDataDisplay") try container.encode((self.enableDebugDataDisplay ? 1 : 0) as Int32, forKey: "enableDebugDataDisplay")
try container.encode((self.rippleEffect ? 1 : 0) as Int32, forKey: "rippleEffect") try container.encode((self.fakeGlass ? 1 : 0) as Int32, forKey: "fakeGlass")
try container.encode((self.compressedEmojiCache ? 1 : 0) as Int32, forKey: "compressedEmojiCache") try container.encode((self.compressedEmojiCache ? 1 : 0) as Int32, forKey: "compressedEmojiCache")
try container.encode((self.localTranscription ? 1 : 0) as Int32, forKey: "localTranscription") try container.encode((self.localTranscription ? 1 : 0) as Int32, forKey: "localTranscription")
try container.encode(self.enableReactionOverrides, forKey: "enableReactionOverrides") try container.encode(self.enableReactionOverrides, forKey: "enableReactionOverrides")