Adjust timeout for testing environment

This commit is contained in:
Ali 2021-02-10 16:47:26 +04:00
parent ad4c8dbb9f
commit b2ce6c0b05
2 changed files with 58 additions and 60 deletions

View File

@ -30,7 +30,7 @@ private enum PeerAutoremoveSetupSection: Int32 {
private enum PeerAutoremoveSetupEntry: ItemListNodeEntry { private enum PeerAutoremoveSetupEntry: ItemListNodeEntry {
case header case header
case timeHeader(String) case timeHeader(String)
case timeValue(Int32, Int32) case timeValue(Int32, Int32, [Int32])
case timeComment(String) case timeComment(String)
case globalSwitch(String, Bool) case globalSwitch(String, Bool)
@ -74,8 +74,8 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry {
} else { } else {
return false return false
} }
case let .timeValue(lhsValue, lhsMaxValue): case let .timeValue(lhsValue, lhsMaxValue, lhsAvailableValues):
if case let .timeValue(rhsValue, rhsMaxValue) = rhs, lhsValue == rhsValue, lhsMaxValue == rhsMaxValue { if case let .timeValue(rhsValue, rhsMaxValue, rhsAvailableValues) = rhs, lhsValue == rhsValue, lhsMaxValue == rhsMaxValue, lhsAvailableValues == rhsAvailableValues {
return true return true
} else { } else {
return false return false
@ -106,8 +106,8 @@ private enum PeerAutoremoveSetupEntry: ItemListNodeEntry {
return ChatListFilterSettingsHeaderItem(theme: presentationData.theme, text: "", animation: .autoRemove, sectionId: self.section) return ChatListFilterSettingsHeaderItem(theme: presentationData.theme, text: "", animation: .autoRemove, sectionId: self.section)
case let .timeHeader(text): case let .timeHeader(text):
return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section) return ItemListSectionHeaderItem(presentationData: presentationData, text: text, sectionId: self.section)
case let .timeValue(value, maxValue): case let .timeValue(value, maxValue, availableValues):
return PeerRemoveTimeoutItem(theme: presentationData.theme, value: value, maxValue: maxValue, enabled: true, sectionId: self.section, updated: { value in return PeerRemoveTimeoutItem(presentationData: presentationData, value: value, maxValue: maxValue, availableValues: availableValues, enabled: true, sectionId: self.section, updated: { value in
arguments.updateValue(value) arguments.updateValue(value)
}, tag: nil) }, tag: nil)
case let .timeComment(text): case let .timeComment(text):
@ -126,7 +126,7 @@ private struct PeerAutoremoveSetupState: Equatable {
var applyingSetting: Bool = false 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] = [] var entries: [PeerAutoremoveSetupEntry] = []
let globalValue = state.changedGlobalValue ?? defaultGlobalValue let globalValue = state.changedGlobalValue ?? defaultGlobalValue
@ -144,7 +144,17 @@ private func peerAutoremoveSetupEntries(peer: Peer?, presentationData: Presentat
//TODO:localize //TODO:localize
entries.append(.header) entries.append(.header)
entries.append(.timeHeader("AUTO-DELETE MESSAGES")) 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 { 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.")) entries.append(.timeComment("Automatically delete messages sent in this channel after a certain period of time."))
} else { } else {
@ -298,9 +308,11 @@ public func peerAutoremoveSetupScreen(context: AccountContext, peerId: PeerId, c
}) })
} }
let isDebug = context.account.testingEnvironment
//TODO:localize //TODO:localize
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text("Auto-Deletion"), leftNavigationButton: leftNavigationButton, rightNavigationButton: rightNavigationButton, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back)) 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)) return (controllerState, (listState, arguments))
} }

View File

@ -12,41 +12,39 @@ import ItemListUI
import PresentationDataUtils import PresentationDataUtils
import AppBundle import AppBundle
private func mapTimeoutToSliderValue(_ value: Int32) -> CGFloat { private func mapTimeoutToSliderValue(_ value: Int32, availableValues: [Int32]) -> CGFloat {
switch value { for i in 0 ..< availableValues.count {
case 24 * 60 * 60: if value <= availableValues[i] {
return 0.0 return CGFloat(i)
case 7 * 24 * 60 * 60: }
return 1.0
default:
return 2.0
} }
return CGFloat(availableValues.count - 1)
} }
private func mapSliderValueToTimeout(_ value: CGFloat) -> Int32 { private func mapSliderValueToTimeout(_ value: CGFloat, availableValues: [Int32]) -> Int32 {
switch value { let intValue = Int(round(value))
case 0.0: if intValue >= 0 && intValue < availableValues.count {
return 24 * 60 * 60 return availableValues[intValue]
case 1.0: } else {
return 7 * 24 * 60 * 60 return availableValues[availableValues.count - 1]
default:
return Int32.max
} }
} }
class PeerRemoveTimeoutItem: ListViewItem, ItemListItem { class PeerRemoveTimeoutItem: ListViewItem, ItemListItem {
let theme: PresentationTheme let presentationData: ItemListPresentationData
let value: Int32 let value: Int32
let maxValue: Int32 let maxValue: Int32
let availableValues: [Int32]
let enabled: Bool let enabled: Bool
let sectionId: ItemListSectionId let sectionId: ItemListSectionId
let updated: (Int32) -> Void let updated: (Int32) -> Void
let tag: ItemListItemTag? let tag: ItemListItemTag?
init(theme: PresentationTheme, value: Int32, maxValue: Int32, enabled: Bool = true, sectionId: ItemListSectionId, updated: @escaping (Int32) -> Void, tag: ItemListItemTag? = nil) { init(presentationData: ItemListPresentationData, value: Int32, maxValue: Int32, availableValues: [Int32], enabled: Bool = true, sectionId: ItemListSectionId, updated: @escaping (Int32) -> Void, tag: ItemListItemTag? = nil) {
self.theme = theme self.presentationData = presentationData
self.value = value self.value = value
self.maxValue = maxValue self.maxValue = maxValue
self.availableValues = availableValues
self.enabled = enabled self.enabled = enabled
self.sectionId = sectionId self.sectionId = sectionId
self.updated = updated self.updated = updated
@ -158,13 +156,13 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode {
sliderView.minimumUndottedValue = 0 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.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor
sliderView.backColor = item.theme.list.disclosureArrowColor sliderView.backColor = item.presentationData.theme.list.disclosureArrowColor
sliderView.trackColor = item.enabled ? item.theme.list.itemAccentColor : item.theme.list.itemDisabledTextColor sliderView.trackColor = item.enabled ? item.presentationData.theme.list.itemAccentColor : item.presentationData.theme.list.itemDisabledTextColor
sliderView.knobImage = generateKnobImage() sliderView.knobImage = generateKnobImage()
let sliderInset: CGFloat = params.leftInset + 16.0 let sliderInset: CGFloat = params.leftInset + 16.0
@ -183,7 +181,7 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode {
return { item, params, neighbors in return { item, params, neighbors in
var themeUpdated = false var themeUpdated = false
if currentItem?.theme !== item.theme { if currentItem?.presentationData.theme !== item.presentationData.theme {
themeUpdated = true themeUpdated = true
} }
@ -194,15 +192,12 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode {
let titleLayouts = zip(0 ..< makeTitleNodeLayouts.count, makeTitleNodeLayouts).map { index, makeLayout -> (TextNodeLayout, () -> TextNode) in let titleLayouts = zip(0 ..< makeTitleNodeLayouts.count, makeTitleNodeLayouts).map { index, makeLayout -> (TextNodeLayout, () -> TextNode) in
let text: String let text: String
//TODO:localize //TODO:localize
switch index { if item.availableValues[index] == Int32.max {
case 0:
text = "After 24 hours"
case 1:
text = "After 7 days"
default:
text = "Never" 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) contentSize = CGSize(width: params.width, height: 88.0)
@ -219,11 +214,11 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode {
let leftInset = 16.0 + params.leftInset let leftInset = 16.0 + params.leftInset
strongSelf.backgroundNode.backgroundColor = item.theme.list.itemBlocksBackgroundColor strongSelf.backgroundNode.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor
strongSelf.topStripeNode.backgroundColor = item.theme.list.itemBlocksSeparatorColor strongSelf.topStripeNode.backgroundColor = item.presentationData.theme.list.itemBlocksSeparatorColor
strongSelf.bottomStripeNode.backgroundColor = item.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.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)) 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.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.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) 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 { if let sliderView = strongSelf.sliderView {
sliderView.isUserInteractionEnabled = item.enabled sliderView.isUserInteractionEnabled = item.enabled
sliderView.trackColor = item.enabled ? item.theme.list.itemAccentColor : item.theme.list.itemDisabledTextColor sliderView.trackColor = item.enabled ? item.presentationData.theme.list.itemAccentColor : item.presentationData.theme.list.itemDisabledTextColor
sliderView.minimumUndottedValue = Int32(mapTimeoutToSliderValue(item.maxValue)) sliderView.minimumUndottedValue = Int32(mapTimeoutToSliderValue(item.maxValue, availableValues: item.availableValues))
if themeUpdated { if themeUpdated {
sliderView.backgroundColor = item.theme.list.itemBlocksBackgroundColor sliderView.backgroundColor = item.presentationData.theme.list.itemBlocksBackgroundColor
sliderView.backColor = item.theme.list.disclosureArrowColor sliderView.backColor = item.presentationData.theme.list.disclosureArrowColor
sliderView.knobImage = generateKnobImage() sliderView.knobImage = generateKnobImage()
} }
@ -325,19 +320,10 @@ class PeerRemoveTimeoutItemNode: ListViewItemNode, ItemListItemNode {
} }
@objc func sliderValueChanged() { @objc func sliderValueChanged() {
guard let sliderView = self.sliderView else { guard let sliderView = self.sliderView, let item = self.item else {
return return
} }
let value: Int32 self.item?.updated(mapSliderValueToTimeout(sliderView.value, availableValues: item.availableValues))
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)
} }
} }