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.
		
		
		
		
		
			
		
			
				
	
	
		
			122 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Swift
		
	
| //
 | |
| //  Copyright (c) 2019 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| import Foundation
 | |
| import SessionUIKit
 | |
| 
 | |
| class ReminderView: UIView {
 | |
| 
 | |
|     let label = UILabel()
 | |
| 
 | |
|     typealias Action = () -> Void
 | |
| 
 | |
|     var tapAction: Action?
 | |
| 
 | |
|     var text: String? {
 | |
|         get {
 | |
|             return label.text
 | |
|         }
 | |
| 
 | |
|         set(newText) {
 | |
|             label.text = newText
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     enum ReminderViewMode {
 | |
|         // Nags are urgent interactive prompts, bidding for the user's attention.
 | |
|         case nag
 | |
|         // Explanations are not interactive or urgent.
 | |
|         case explanation
 | |
|     }
 | |
|     let mode: ReminderViewMode
 | |
| 
 | |
|     @available(*, unavailable, message:"use other constructor instead.")
 | |
|     required init?(coder aDecoder: NSCoder) {
 | |
|         notImplemented()
 | |
|     }
 | |
| 
 | |
|     @available(*, unavailable, message:"use other constructor instead.")
 | |
|     override init(frame: CGRect) {
 | |
|         notImplemented()
 | |
|     }
 | |
| 
 | |
|     private init(mode: ReminderViewMode,
 | |
|          text: String, tapAction: Action?) {
 | |
|         self.mode = mode
 | |
|         self.tapAction = tapAction
 | |
| 
 | |
|         super.init(frame: .zero)
 | |
| 
 | |
|         self.text = text
 | |
| 
 | |
|         setupSubviews()
 | |
|     }
 | |
| 
 | |
|     @objc public class func nag(text: String, tapAction: Action?) -> ReminderView {
 | |
|         return ReminderView(mode: .nag, text: text, tapAction: tapAction)
 | |
|     }
 | |
| 
 | |
|     @objc public class func explanation(text: String) -> ReminderView {
 | |
|         return ReminderView(mode: .explanation, text: text, tapAction: nil)
 | |
|     }
 | |
| 
 | |
|     func setupSubviews() {
 | |
|         let textColor: UIColor
 | |
|         let iconColor: UIColor
 | |
|         switch mode {
 | |
|         case .nag:
 | |
|             self.backgroundColor = UIColor.ows_reminderYellow
 | |
|             textColor = UIColor.ows_gray90
 | |
|             iconColor = UIColor.ows_gray60
 | |
|         case .explanation:
 | |
|             // TODO: Theme, review with design.
 | |
|             self.backgroundColor = Colors.unimportant
 | |
|             textColor = Colors.text
 | |
|             iconColor = Colors.separator
 | |
|         }
 | |
|         self.clipsToBounds = true
 | |
| 
 | |
|         let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(gestureRecognizer:)))
 | |
|         self.addGestureRecognizer(tapGesture)
 | |
| 
 | |
|         let container = UIStackView()
 | |
|         container.axis = .horizontal
 | |
|         container.alignment = .center
 | |
|         container.isLayoutMarginsRelativeArrangement = true
 | |
| 
 | |
|         self.addSubview(container)
 | |
|         container.layoutMargins = UIEdgeInsets(top: 12, left: 16, bottom: 12, right: 16)
 | |
|         container.ows_autoPinToSuperviewEdges()
 | |
| 
 | |
|         // Label
 | |
|         label.font = UIFont.ows_dynamicTypeSubheadline
 | |
|         container.addArrangedSubview(label)
 | |
|         label.textColor = textColor
 | |
|         label.numberOfLines = 0
 | |
|         label.lineBreakMode = .byWordWrapping
 | |
| 
 | |
|         // Show the disclosure indicator if this reminder has a tap action.
 | |
|         if tapAction != nil {
 | |
|             // Icon
 | |
|             let iconName = (CurrentAppContext().isRTL ? "system_disclosure_indicator_rtl" : "system_disclosure_indicator")
 | |
|             guard let iconImage = UIImage(named: iconName) else {
 | |
|                 owsFailDebug("missing icon.")
 | |
|                 return
 | |
|             }
 | |
|             let iconView = UIImageView(image: iconImage.withRenderingMode(.alwaysTemplate))
 | |
|             iconView.contentMode = .scaleAspectFit
 | |
|             iconView.tintColor = iconColor
 | |
|             iconView.autoSetDimension(.width, toSize: 13)
 | |
|             container.addArrangedSubview(iconView)
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @objc func handleTap(gestureRecognizer: UIGestureRecognizer) {
 | |
|         guard gestureRecognizer.state == .recognized else {
 | |
|             return
 | |
|         }
 | |
|         tapAction?()
 | |
|     }
 | |
| }
 |