From b2ce6c0b0561974d167dac8302b8603163c0140c Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 10 Feb 2021 16:47:26 +0400 Subject: [PATCH] Adjust timeout for testing environment --- .../Sources/PeerAutoremoveSetupScreen.swift | 28 ++++-- .../Sources/PeerAutoremoveTimeoutItem.swift | 90 ++++++++----------- 2 files changed, 58 insertions(+), 60 deletions(-) diff --git a/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift b/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift index 54f0f96046..640e09279c 100644 --- a/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift +++ b/submodules/PeerInfoUI/Sources/PeerAutoremoveSetupScreen.swift @@ -30,7 +30,7 @@ private enum PeerAutoremoveSetupSection: Int32 { private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { case header case timeHeader(String) - case timeValue(Int32, Int32) + case timeValue(Int32, Int32, [Int32]) case timeComment(String) case globalSwitch(String, Bool) @@ -74,8 +74,8 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { } else { return false } - case let .timeValue(lhsValue, lhsMaxValue): - if case let .timeValue(rhsValue, rhsMaxValue) = rhs, lhsValue == rhsValue, lhsMaxValue == rhsMaxValue { + case let .timeValue(lhsValue, lhsMaxValue, lhsAvailableValues): + if case let .timeValue(rhsValue, rhsMaxValue, rhsAvailableValues) = rhs, lhsValue == rhsValue, lhsMaxValue == rhsMaxValue, lhsAvailableValues == rhsAvailableValues { return true } else { return false @@ -106,8 +106,8 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { return ChatListFilterSettingsHeaderItem(theme: presentationData.theme, text: "", animation: .autoRemove, sectionId: self.section) case let .timeHeader(text): return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) - case let .timeValue(value, maxValue): - return PeerRemoveTimeoutItem(theme: presentationData.theme, value: value, maxValue: maxValue, enabled: true, sectionId: self.section, updated: { value in + case let .timeValue(value, maxValue, availableValues): + return PeerRemoveTimeoutItem(presentationData: presentationData, value: value, maxValue: maxValue, availableValues: availableValues, enabled: true, sectionId: self.section, updated: { value in arguments.updateValue(value) }, tag: nil) case let .timeComment(text): @@ -126,7 +126,7 @@ private struct PeerAutoremoveSetupState: Equatable { var applyingSetting: Bool = false } -private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: PresentationData, defaultMyValue: Int32, peerValue: Int32, defaultGlobalValue: Bool, state: PeerAutoremoveSetupState) -> [PeerAutoremoveSetupEntry] { +private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: PresentationData, isDebug: Bool, defaultMyValue: Int32, peerValue: Int32, defaultGlobalValue: Bool, state: PeerAutoremoveSetupState) -> [PeerAutoremoveSetupEntry] { var entries: [PeerAutoremoveSetupEntry] = [] let globalValue = state.changedGlobalValue ?? defaultGlobalValue @@ -144,7 +144,17 @@ private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: Presentat //TODO:localize entries.append(.header) entries.append(.timeHeader("AUTO-DELETE MESSAGES")) - entries.append(.timeValue(resolvedValue, resolvedMaxValue)) + + var availableValues: [Int32] = [ + 24 * 60 * 60, + 24 * 60 * 60 * 7, + Int32.max + ] + if isDebug { + availableValues[0] = 5 + availableValues[1] = 60 + } + entries.append(.timeValue(resolvedValue, resolvedMaxValue, availableValues)) if let channel = peer as? TelegramChannel, case .broadcast = channel.info { entries.append(.timeComment("Automatically delete messages sent in this channel after a certain period of time.")) } else { @@ -298,9 +308,11 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c }) } + let isDebug = context.account.testingEnvironment + //TODO:localize let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text("Auto-Deletion"), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) - let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: peerAutoremoveSetupEntries(peer: peer, presentationData: presentationData, defaultMyValue: defaultMyValue, peerValue: peerValue, defaultGlobalValue: defaultGlobalValue, state: state), style: .blocks) + let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: peerAutoremoveSetupEntries(peer: peer, presentationData: presentationData, isDebug: isDebug, defaultMyValue: defaultMyValue, peerValue: peerValue, defaultGlobalValue: defaultGlobalValue, state: state), style: .blocks) return (controllerState, (listState, arguments)) } diff --git a/submodules/PeerInfoUI/Sources/PeerAutoremoveTimeoutItem.swift b/submodules/PeerInfoUI/Sources/PeerAutoremoveTimeoutItem.swift index 9f1776f579..fd0003d96c 100644 --- a/submodules/PeerInfoUI/Sources/PeerAutoremoveTimeoutItem.swift +++ b/submodules/PeerInfoUI/Sources/PeerAutoremoveTimeoutItem.swift @@ -12,41 +12,39 @@ import ItemListUI import PresentationDataUtils import AppBundle -private func mapTimeoutToSliderValue(_ value: Int32) -> CGFloat { - switch value { - case 24 * 60 * 60: - return 0.0 - case 7 * 24 * 60 * 60: - return 1.0 - default: - return 2.0 +private func mapTimeoutToSliderValue(_ value: Int32, availableValues: [Int32]) -> CGFloat { + for i in 0 ..< availableValues.count { + if value <= availableValues[i] { + return CGFloat(i) + } } + return CGFloat(availableValues.count - 1) } -private func mapSliderValueToTimeout(_ value: CGFloat) -> Int32 { - switch value { - case 0.0: - return 24 * 60 * 60 - case 1.0: - return 7 * 24 * 60 * 60 - default: - return Int32.max +private func mapSliderValueToTimeout(_ value: CGFloat, availableValues: [Int32]) -> Int32 { + let intValue = Int(round(value)) + if intValue >= 0 && intValue < availableValues.count { + return availableValues[intValue] + } else { + return availableValues[availableValues.count - 1] } } class PeerRemoveTimeoutItem: ListViewItem, ItemListItem { - let theme: PresentationTheme + let presentationData: ItemListPresentationData let value: Int32 let maxValue: Int32 + let availableValues: [Int32] let enabled: Bool let sectionId: ItemListSectionId let updated: (Int32) -> Void let tag: ItemListItemTag? - init(theme: PresentationTheme, value: Int32, maxValue: Int32, enabled: Bool = true, sectionId: ItemListSectionId, updated: @escaping (Int32) -> Void, tag: ItemListItemTag? = nil) { - self.theme = theme + init(presentationData: ItemListPresentationData, value: Int32, maxValue: Int32, availableValues: [Int32], enabled: Bool = true, sectionId: ItemListSectionId, updated: @escaping (Int32) -> Void, tag: ItemListItemTag? = nil) { + self.presentationData = presentationData self.value = value self.maxValue = maxValue + self.availableValues = availableValues self.enabled = enabled self.sectionId = sectionId self.updated = updated @@ -158,13 +156,13 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { sliderView.minimumUndottedValue = 0 - sliderView.value = mapTimeoutToSliderValue(item.value) + sliderView.value = mapTimeoutToSliderValue(item.value, availableValues: item.availableValues) - sliderView.minimumUndottedValue = Int32(mapTimeoutToSliderValue(item.maxValue)) + sliderView.minimumUndottedValue = Int32(mapTimeoutToSliderValue(item.maxValue, availableValues: item.availableValues)) - sliderView.backgroundColor = item.theme.list.itemBlocksBackgroundColor - sliderView.backColor = item.theme.list.disclosureArrowColor - sliderView.trackColor = item.enabled ? item.theme.list.itemAccentColor : item.theme.list.itemDisabledTextColor + sliderView.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor + sliderView.backColor = item.presentationData.theme.list.disclosureArrowColor + sliderView.trackColor = item.enabled ? item.presentationData.theme.list.itemAccentColor : item.presentationData.theme.list.itemDisabledTextColor sliderView.knobImage = generateKnobImage() let sliderInset: CGFloat = params.leftInset + 16.0 @@ -183,7 +181,7 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { return { item, params, neighbors in var themeUpdated = false - if currentItem?.theme !== item.theme { + if currentItem?.presentationData.theme !== item.presentationData.theme { themeUpdated = true } @@ -194,15 +192,12 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { let titleLayouts = zip(0 ..< makeTitleNodeLayouts.count, makeTitleNodeLayouts).map { index, makeLayout -> (TextNodeLayout, () -> TextNode) in let text: String //TODO:localize - switch index { - case 0: - text = "After 24 hours" - case 1: - text = "After 7 days" - default: + if item.availableValues[index] == Int32.max { text = "Never" + } else { + text = "After \(timeIntervalString(strings: item.presentationData.strings, value: item.availableValues[index]))" } - return makeLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: text, font: Font.regular(13.0), textColor: item.theme.list.itemSecondaryTextColor), maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: 100.0, height: 100.0))) + return makeLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: text, font: Font.regular(13.0), textColor: item.presentationData.theme.list.itemSecondaryTextColor), maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: 100.0, height: 100.0))) } contentSize = CGSize(width: params.width, height: 88.0) @@ -219,11 +214,11 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { let leftInset = 16.0 + params.leftInset - strongSelf.backgroundNode.backgroundColor = item.theme.list.itemBlocksBackgroundColor - strongSelf.topStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor - strongSelf.bottomStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor + strongSelf.backgroundNode.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor + strongSelf.topStripeNode.backgroundColor = item.presentationData.theme.list.itemBlocksSeparatorColor + strongSelf.bottomStripeNode.backgroundColor = item.presentationData.theme.list.itemBlocksSeparatorColor - strongSelf.disabledOverlayNode.backgroundColor = item.theme.list.itemBlocksBackgroundColor.withAlphaComponent(0.4) + strongSelf.disabledOverlayNode.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor.withAlphaComponent(0.4) strongSelf.disabledOverlayNode.isHidden = item.enabled strongSelf.disabledOverlayNode.frame = CGRect(origin: CGPoint(x: params.leftInset, y: 8.0), size: CGSize(width: params.width - params.leftInset - params.rightInset, height: 44.0)) @@ -263,7 +258,7 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { strongSelf.bottomStripeNode.isHidden = hasCorners } - strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil + strongSelf.maskNode.image = hasCorners ? PresentationResourcesItemList.cornersImage(item.presentationData.theme, top: hasTopCorners, bottom: hasBottomCorners) : nil strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: contentSize.height + min(insets.top, separatorHeight) + min(insets.bottom, separatorHeight))) strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0) @@ -286,12 +281,12 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { if let sliderView = strongSelf.sliderView { sliderView.isUserInteractionEnabled = item.enabled - sliderView.trackColor = item.enabled ? item.theme.list.itemAccentColor : item.theme.list.itemDisabledTextColor - sliderView.minimumUndottedValue = Int32(mapTimeoutToSliderValue(item.maxValue)) + sliderView.trackColor = item.enabled ? item.presentationData.theme.list.itemAccentColor : item.presentationData.theme.list.itemDisabledTextColor + sliderView.minimumUndottedValue = Int32(mapTimeoutToSliderValue(item.maxValue, availableValues: item.availableValues)) if themeUpdated { - sliderView.backgroundColor = item.theme.list.itemBlocksBackgroundColor - sliderView.backColor = item.theme.list.disclosureArrowColor + sliderView.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor + sliderView.backColor = item.presentationData.theme.list.disclosureArrowColor sliderView.knobImage = generateKnobImage() } @@ -325,19 +320,10 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode { } @objc func sliderValueChanged() { - guard let sliderView = self.sliderView else { + guard let sliderView = self.sliderView, let item = self.item else { return } - let value: Int32 - switch sliderView.value { - case 0.0: - value = 24 * 60 * 60 - case 1.0: - value = 7 * 24 * 60 * 60 - default: - value = Int32.max - } - self.item?.updated(value) + self.item?.updated(mapSliderValueToTimeout(sliderView.value, availableValues: item.availableValues)) } }