Peer sound and message removal update

This commit is contained in:
Ali
2022-03-30 01:22:44 +04:00
parent 0e55dd7db7
commit 235302c7c4
63 changed files with 3906 additions and 1934 deletions

View File

@@ -273,6 +273,10 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
private let cancelButton: HighlightableButtonNode
private let doneButton: SolidRoundedButtonNode
private let disableButton: HighlightableButtonNode
private let disableButtonTitle: ImmediateTextNode
private var initialTime: Int32?
private var pickerView: TimerPickerView?
private var containerLayout: (ContainerViewLayout, CGFloat)?
@@ -287,6 +291,7 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
self.presentationData = presentationData
self.dismissByTapOutside = dismissByTapOutside
self.mode = mode
self.initialTime = currentTime
self.wrappingScrollNode = ASScrollNode()
self.wrappingScrollNode.view.alwaysBounceVertical = true
@@ -349,6 +354,22 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
self.doneButton = SolidRoundedButtonNode(theme: SolidRoundedButtonTheme(theme: self.presentationData.theme), height: 52.0, cornerRadius: 11.0, gloss: false)
self.doneButton.title = self.presentationData.strings.Conversation_Timer_Send
self.disableButton = HighlightableButtonNode()
self.disableButtonTitle = ImmediateTextNode()
self.disableButton.addSubnode(self.disableButtonTitle)
//TODO:localize
self.disableButtonTitle.attributedText = NSAttributedString(string: "Disable Auto-Delete", font: Font.regular(17.0), textColor: self.presentationData.theme.list.itemAccentColor)
self.disableButton.isHidden = true
switch self.mode {
case .autoremove:
if self.initialTime != nil {
self.disableButton.isHidden = false
}
default:
break
}
super.init()
self.backgroundColor = nil
@@ -369,17 +390,24 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
self.contentContainerNode.addSubnode(self.textNode)
self.contentContainerNode.addSubnode(self.cancelButton)
self.contentContainerNode.addSubnode(self.doneButton)
self.contentContainerNode.addSubnode(self.disableButton)
self.cancelButton.addTarget(self, action: #selector(self.cancelButtonPressed), forControlEvents: .touchUpInside)
self.doneButton.pressed = { [weak self] in
if let strongSelf = self, let pickerView = strongSelf.pickerView {
strongSelf.doneButton.isUserInteractionEnabled = false
if let pickerView = pickerView as? TimerCustomPickerView {
strongSelf.completion?(timerValues[pickerView.selectedRow(inComponent: 0)])
switch strongSelf.mode {
case .sendTimer:
strongSelf.completion?(timerValues[pickerView.selectedRow(inComponent: 0)])
case .autoremove:
let timeInterval = pickerView.selectedRow(inComponent: 0) * 24 * 60 * 60 + pickerView.selectedRow(inComponent: 1) * 60 * 60 + pickerView.selectedRow(inComponent: 2) * 60
strongSelf.completion?(Int32(timeInterval))
case .mute:
break
}
} else if let pickerView = pickerView as? TimerDatePickerView {
switch strongSelf.mode {
case .autoremove:
strongSelf.completion?(Int32(pickerView.countDownDuration))
case .mute:
let timeInterval = max(0, Int32(pickerView.date.timeIntervalSince1970) - Int32(Date().timeIntervalSince1970))
strongSelf.completion?(timeInterval)
@@ -390,9 +418,15 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
}
}
self.disableButton.addTarget(self, action: #selector(self.disableButtonPressed), forControlEvents: .touchUpInside)
self.setupPickerView(currentTime: currentTime)
}
@objc private func disableButtonPressed() {
self.completion?(0)
}
func setupPickerView(currentTime: Int32? = nil) {
if let pickerView = self.pickerView {
pickerView.removeFromSuperview()
@@ -408,17 +442,24 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
self.contentContainerNode.view.addSubview(pickerView)
self.pickerView = pickerView
case .autoremove:
let pickerView = TimerDatePickerView()
pickerView.locale = localeWithStrings(self.presentationData.strings)
pickerView.datePickerMode = .countDownTimer
if #available(iOS 13.4, *) {
pickerView.preferredDatePickerStyle = .wheels
}
pickerView.selectorColor = UIColor(rgb: 0xffffff, alpha: 0.18)
pickerView.addTarget(self, action: #selector(self.dataPickerChanged), for: .valueChanged)
let pickerView = TimerCustomPickerView()
pickerView.dataSource = self
pickerView.delegate = self
pickerView.selectorColor = self.presentationData.theme.list.itemPrimaryTextColor.withMultipliedAlpha(0.18)
self.contentContainerNode.view.addSubview(pickerView)
self.pickerView = pickerView
if let value = self.initialTime {
let days = value / (24 * 60 * 60)
let hours = (value % (24 * 60 * 60)) / (60 * 60)
let minutes = (value % (60 * 60)) / 60
pickerView.selectRow(Int(days), inComponent: 0, animated: false)
pickerView.selectRow(Int(hours), inComponent: 1, animated: false)
pickerView.selectRow(Int(minutes), inComponent: 2, animated: false)
}
case .mute:
let pickerView = TimerDatePickerView()
pickerView.locale = localeWithStrings(self.presentationData.strings)
@@ -436,35 +477,87 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
}
@objc private func dataPickerChanged() {
guard let _ = self.pickerView as? TimerDatePickerView else {
return
}
if let (layout, navigationBarHeight) = self.containerLayout {
self.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: .immediate)
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
switch self.mode {
case .sendTimer:
return 1
case .autoremove:
return 3
case .mute:
return 0
}
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return timerValues.count
switch self.mode {
case .sendTimer:
return timerValues.count
case .autoremove:
switch component {
case 0:
return 365
case 1:
return 24
case 2:
return 60
default:
return 0
}
case .mute:
return 0
}
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let value = timerValues[row]
let string = timeIntervalString(strings: self.presentationData.strings, value: value)
if let view = view as? TimerPickerItemView {
switch self.mode {
case .sendTimer:
let value = timerValues[row]
let string = timeIntervalString(strings: self.presentationData.strings, value: value)
if let view = view as? TimerPickerItemView {
view.value = (value, string)
return view
}
let view = TimerPickerItemView()
view.value = (value, string)
view.textColor = .white
return view
case .autoremove:
let itemView: TimerPickerItemView
if let current = view as? TimerPickerItemView {
itemView = current
} else {
itemView = TimerPickerItemView()
itemView.textColor = self.presentationData.theme.list.itemPrimaryTextColor
}
let string: String
switch component {
case 0:
string = dayIntervalString(strings: self.presentationData.strings, days: Int32(row))
case 1:
string = hoursIntervalString(strings: self.presentationData.strings, hours: Int32(row))
case 2:
string = minutesIntervalString(strings: self.presentationData.strings, minutes: Int32(row))
default:
preconditionFailure()
}
itemView.value = (Int32(row), string)
return itemView
case .mute:
preconditionFailure()
}
let view = TimerPickerItemView()
view.value = (value, string)
view.textColor = .white
return view
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.dataPickerChanged()
}
func updatePresentationData(_ presentationData: PresentationData) {
@@ -575,11 +668,16 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
let cleanInsets = layout.insets(options: [.statusBar])
insets.top = max(10.0, insets.top)
let buttonOffset: CGFloat = 0.0
var buttonOffset: CGFloat = 0.0
let bottomInset: CGFloat = 10.0 + cleanInsets.bottom
let titleHeight: CGFloat = 54.0
var contentHeight = titleHeight + bottomInset + 52.0 + 17.0
let pickerHeight: CGFloat = min(216.0, layout.size.height - contentHeight)
if !self.disableButton.isHidden {
buttonOffset += 52.0
}
contentHeight = titleHeight + bottomInset + 52.0 + 17.0 + pickerHeight + buttonOffset
let width = horizontalContainerFillingSizeForLayout(layout: layout, sideInset: 0.0)
@@ -612,11 +710,8 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
case .sendTimer:
break
case .autoremove:
if let pickerView = self.pickerView as? TimerDatePickerView, pickerView.countDownDuration > 0.0 {
self.doneButton.title = "Auto-Delete after \(timeIntervalString(strings: self.presentationData.strings, value: Int32(pickerView.countDownDuration)))"
} else {
self.doneButton.title = self.presentationData.strings.Common_Close
}
//TODO:localize
self.doneButton.title = "Set Auto-Delete"
case .mute:
if let pickerView = self.pickerView as? TimerDatePickerView {
let timeInterval = max(0, Int32(pickerView.date.timeIntervalSince1970) - Int32(Date().timeIntervalSince1970))
@@ -635,7 +730,13 @@ class ChatTimerScreenNode: ViewControllerTracingNode, UIScrollViewDelegate, UIPi
}
let doneButtonHeight = self.doneButton.updateLayout(width: contentFrame.width - buttonInset * 2.0, transition: transition)
transition.updateFrame(node: self.doneButton, frame: CGRect(x: buttonInset, y: contentHeight - doneButtonHeight - insets.bottom - 16.0 - buttonOffset, width: contentFrame.width, height: doneButtonHeight))
let doneButtonFrame = CGRect(x: buttonInset, y: contentHeight - doneButtonHeight - insets.bottom - 16.0 - buttonOffset, width: contentFrame.width, height: doneButtonHeight)
transition.updateFrame(node: self.doneButton, frame: doneButtonFrame)
let disableButtonTitleSize = self.disableButtonTitle.updateLayout(CGSize(width: contentFrame.width, height: doneButtonHeight))
let disableButtonFrame = CGRect(origin: CGPoint(x: doneButtonFrame.minX, y: doneButtonFrame.maxY), size: CGSize(width: contentFrame.width - buttonInset * 2.0, height: doneButtonHeight))
transition.updateFrame(node: self.disableButton, frame: disableButtonFrame)
transition.updateFrame(node: self.disableButtonTitle, frame: CGRect(origin: CGPoint(x: floor((disableButtonFrame.width - disableButtonTitleSize.width) / 2.0), y: floor((disableButtonFrame.height - disableButtonTitleSize.height) / 2.0)), size: disableButtonTitleSize))
self.pickerView?.frame = CGRect(origin: CGPoint(x: 0.0, y: 54.0), size: CGSize(width: contentFrame.width, height: pickerHeight))