mirror of https://github.com/oxen-io/session-ios
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.0 KiB
Swift
84 lines
3.0 KiB
Swift
//
|
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
protocol CallVideoHintViewDelegate: AnyObject {
|
|
func didTapCallVideoHintView(_ videoHintView: CallVideoHintView)
|
|
}
|
|
|
|
class CallVideoHintView: UIView {
|
|
let label = UILabel()
|
|
var tapGesture: UITapGestureRecognizer!
|
|
weak var delegate: CallVideoHintViewDelegate?
|
|
|
|
let kTailHMargin: CGFloat = 12
|
|
let kTailWidth: CGFloat = 16
|
|
let kTailHeight: CGFloat = 8
|
|
|
|
init() {
|
|
super.init(frame: .zero)
|
|
|
|
tapGesture = UITapGestureRecognizer(target: self, action: #selector(didTap(tapGesture:)))
|
|
addGestureRecognizer(tapGesture)
|
|
|
|
let layerView = OWSLayerView(frame: .zero) { _ in }
|
|
let shapeLayer = CAShapeLayer()
|
|
shapeLayer.fillColor = UIColor.ows_signalBlue.cgColor
|
|
layerView.layer.addSublayer(shapeLayer)
|
|
addSubview(layerView)
|
|
layerView.autoPinEdgesToSuperviewEdges()
|
|
|
|
let container = UIView()
|
|
addSubview(container)
|
|
container.autoSetDimension(.width, toSize: ScaleFromIPhone5(250), relation: .lessThanOrEqual)
|
|
container.layoutMargins = UIEdgeInsets(top: 7, leading: 12, bottom: 7, trailing: 12)
|
|
container.autoPinEdgesToSuperviewEdges(with: UIEdgeInsets(top: 0, leading: 0, bottom: kTailHeight, trailing: 0))
|
|
|
|
container.addSubview(label)
|
|
label.autoPinEdgesToSuperviewMargins()
|
|
label.setCompressionResistanceHigh()
|
|
label.setContentHuggingHigh()
|
|
label.font = UIFont.ows_dynamicTypeBody
|
|
label.textColor = .ows_white
|
|
label.numberOfLines = 0
|
|
label.text = NSLocalizedString("CALL_VIEW_ENABLE_VIDEO_HINT", comment: "tooltip label when remote party has enabled their video")
|
|
|
|
layerView.layoutCallback = { view in
|
|
let bezierPath = UIBezierPath()
|
|
|
|
// Bubble
|
|
let bubbleBounds = container.bounds
|
|
bezierPath.append(UIBezierPath(roundedRect: bubbleBounds, cornerRadius: 8))
|
|
|
|
// Tail
|
|
var tailBottom = CGPoint(x: self.kTailHMargin + self.kTailWidth * 0.5, y: view.height())
|
|
var tailLeft = CGPoint(x: self.kTailHMargin, y: view.height() - self.kTailHeight)
|
|
var tailRight = CGPoint(x: self.kTailHMargin + self.kTailWidth, y: view.height() - self.kTailHeight)
|
|
if (!CurrentAppContext().isRTL) {
|
|
tailBottom.x = view.width() - tailBottom.x
|
|
tailLeft.x = view.width() - tailLeft.x
|
|
tailRight.x = view.width() - tailRight.x
|
|
}
|
|
bezierPath.move(to: tailBottom)
|
|
bezierPath.addLine(to: tailLeft)
|
|
bezierPath.addLine(to: tailRight)
|
|
bezierPath.addLine(to: tailBottom)
|
|
shapeLayer.path = bezierPath.cgPath
|
|
shapeLayer.frame = view.bounds
|
|
}
|
|
}
|
|
|
|
required init?(coder aDecoder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
// MARK: -
|
|
|
|
@objc
|
|
func didTap(tapGesture: UITapGestureRecognizer) {
|
|
self.delegate?.didTapCallVideoHintView(self)
|
|
}
|
|
}
|