Add pin list edge setting

This commit is contained in:
Ali 2020-10-20 01:33:16 +04:00
parent 2db6f17597
commit 767b0603a6
3 changed files with 43 additions and 10 deletions

View File

@ -74,6 +74,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
case photoPreview(PresentationTheme, Bool)
case knockoutWallpaper(PresentationTheme, Bool)
case alternativeFolderTabs(Bool)
case snapPinListToTop(Bool)
case playerEmbedding(Bool)
case playlistPlayback(Bool)
case voiceConference
@ -93,7 +94,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
return DebugControllerSection.logging.rawValue
case .enableRaiseToSpeak, .keepChatNavigationStack, .skipReadHistory, .crashOnSlowQueries:
return DebugControllerSection.experiments.rawValue
case .clearTips, .reimport, .resetData, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .reindexUnread, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .alternativeFolderTabs, .playerEmbedding, .playlistPlayback, .voiceConference:
case .clearTips, .reimport, .resetData, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .reindexUnread, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .alternativeFolderTabs, .snapPinListToTop, .playerEmbedding, .playlistPlayback, .voiceConference:
return DebugControllerSection.experiments.rawValue
case .preferredVideoCodec:
return DebugControllerSection.videoExperiments.rawValue
@ -156,14 +157,16 @@ private enum DebugControllerEntry: ItemListNodeEntry {
return 23
case .alternativeFolderTabs:
return 24
case .playerEmbedding:
case .snapPinListToTop:
return 25
case .playlistPlayback:
case .playerEmbedding:
return 26
case .voiceConference:
case .playlistPlayback:
return 27
case .voiceConference:
return 28
case let .preferredVideoCodec(index, _, _, _):
return 28 + index
return 29 + index
case .disableVideoAspectScaling:
return 100
case .enableVoipTcp:
@ -703,6 +706,16 @@ private enum DebugControllerEntry: ItemListNodeEntry {
})
}).start()
})
case let .snapPinListToTop(value):
return ItemListSwitchItem(presentationData: presentationData, title: "Pin List Top Edge", 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 as? ExperimentalUISettings ?? ExperimentalUISettings.defaultSettings
settings.snapPinListToTop = value
return settings
})
}).start()
})
case let .playerEmbedding(value):
return ItemListSwitchItem(presentationData: presentationData, title: "Player Embedding", value: value, sectionId: self.section, style: .blocks, updated: { value in
let _ = arguments.sharedContext.accountManager.transaction ({ transaction in
@ -807,6 +820,7 @@ private func debugControllerEntries(presentationData: PresentationData, loggingS
//entries.append(.photoPreview(presentationData.theme, experimentalSettings.chatListPhotos))
entries.append(.knockoutWallpaper(presentationData.theme, experimentalSettings.knockoutWallpaper))
entries.append(.alternativeFolderTabs(experimentalSettings.foldersTabAtBottom))
entries.append(.snapPinListToTop(experimentalSettings.snapPinListToTop))
entries.append(.playerEmbedding(experimentalSettings.playerEmbedding))
entries.append(.playlistPlayback(experimentalSettings.playlistPlayback))

View File

@ -3269,6 +3269,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
var isScrolled: Bool
}
let messageRangeEdge: Signal<Bool, NoError> = self.context.sharedContext.accountManager.sharedData(keys: Set([ApplicationSpecificSharedDataKeys.experimentalUISettings]))
|> map { sharedData -> Bool in
let experimentalSettings: ExperimentalUISettings = (sharedData.entries[ApplicationSpecificSharedDataKeys.experimentalUISettings] as? ExperimentalUISettings) ?? ExperimentalUISettings.defaultSettings
return experimentalSettings.snapPinListToTop
}
|> distinctUntilChanged
let referenceMessage: Signal<ReferenceMessage?, NoError>
if latest {
referenceMessage = .single(nil)
@ -3276,10 +3283,16 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
referenceMessage = combineLatest(
queue: Queue.mainQueue(),
self.scrolledToMessageId.get(),
self.chatDisplayNode.historyNode.topVisibleMessageRange.get()
self.chatDisplayNode.historyNode.topVisibleMessageRange.get(),
messageRangeEdge
)
|> map { scrolledToMessageId, topVisibleMessageRange -> ReferenceMessage? in
let topVisibleMessage = topVisibleMessageRange?.upperBound
|> map { scrolledToMessageId, topVisibleMessageRange, messageRangeEdge -> ReferenceMessage? in
let topVisibleMessage: MessageId?
if messageRangeEdge {
topVisibleMessage = topVisibleMessageRange?.lowerBound
} else {
topVisibleMessage = topVisibleMessageRange?.upperBound
}
if let scrolledToMessageId = scrolledToMessageId {
if let topVisibleMessage = topVisibleMessage {

View File

@ -14,6 +14,7 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
public var preferredVideoCodec: String?
public var disableVideoAspectScaling: Bool
public var enableVoipTcp: Bool
public var snapPinListToTop: Bool
public static var defaultSettings: ExperimentalUISettings {
return ExperimentalUISettings(
@ -27,7 +28,8 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
playlistPlayback: false,
preferredVideoCodec: nil,
disableVideoAspectScaling: false,
enableVoipTcp: false
enableVoipTcp: false,
snapPinListToTop: false
)
}
@ -42,7 +44,8 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
playlistPlayback: Bool,
preferredVideoCodec: String?,
disableVideoAspectScaling: Bool,
enableVoipTcp: Bool
enableVoipTcp: Bool,
snapPinListToTop: Bool
) {
self.keepChatNavigationStack = keepChatNavigationStack
self.skipReadHistory = skipReadHistory
@ -55,6 +58,7 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
self.preferredVideoCodec = preferredVideoCodec
self.disableVideoAspectScaling = disableVideoAspectScaling
self.enableVoipTcp = enableVoipTcp
self.snapPinListToTop = snapPinListToTop
}
public init(decoder: PostboxDecoder) {
@ -69,6 +73,7 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
self.preferredVideoCodec = decoder.decodeOptionalStringForKey("preferredVideoCodec")
self.disableVideoAspectScaling = decoder.decodeInt32ForKey("disableVideoAspectScaling", orElse: 0) != 0
self.enableVoipTcp = decoder.decodeInt32ForKey("enableVoipTcp", orElse: 0) != 0
self.snapPinListToTop = decoder.decodeInt32ForKey("snapPinListToTop", orElse: 0) != 0
}
public func encode(_ encoder: PostboxEncoder) {
@ -85,6 +90,7 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
}
encoder.encodeInt32(self.disableVideoAspectScaling ? 1 : 0, forKey: "disableVideoAspectScaling")
encoder.encodeInt32(self.enableVoipTcp ? 1 : 0, forKey: "enableVoipTcp")
encoder.encodeInt32(self.snapPinListToTop ? 1 : 0, forKey: "snapPinListToTop")
}
public func isEqual(to: PreferencesEntry) -> Bool {