Dactyloidae/mobile/ios/Extensions/SendTo/InstructionsViewController.swift
2026-06-26 21:04:09 -07:00

95 lines
4 KiB
Swift

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import UIKit
import SnapKit
struct InstructionsViewControllerUX {
static let TopPadding = CGFloat(20)
static let TextFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
static let TextColor = UIColor(rgb: 0x555555)
static let LinkColor = UIColor.blue
}
protocol InstructionsViewControllerDelegate: class {
func instructionsViewControllerDidClose(_ instructionsViewController: InstructionsViewController)
}
private func highlightLink(_ s: NSString, withColor color: UIColor) -> NSAttributedString {
let start = s.range(of: "<")
if start.location == NSNotFound {
return NSAttributedString(string: s as String)
}
var s: NSString = s.replacingCharacters(in: start, with: "") as NSString
let end = s.range(of: ">")
s = s.replacingCharacters(in: end, with: "") as NSString
let a = NSMutableAttributedString(string: s as String)
let r = NSRange(location: start.location, length: end.location-start.location)
a.addAttribute(NSForegroundColorAttributeName, value: color, range: r)
return a
}
func setupHelpView(_ view: UIView, introText: String, showMeText: String) {
let imageView = UIImageView()
imageView.image = UIImage(named: "emptySync")
view.addSubview(imageView)
imageView.snp.makeConstraints { (make) -> Void in
make.top.equalTo(view).offset(InstructionsViewControllerUX.TopPadding)
make.centerX.equalTo(view)
}
let label1 = UILabel()
view.addSubview(label1)
label1.text = introText
label1.numberOfLines = 0
label1.lineBreakMode = NSLineBreakMode.byWordWrapping
label1.font = InstructionsViewControllerUX.TextFont
label1.textColor = InstructionsViewControllerUX.TextColor
label1.textAlignment = NSTextAlignment.center
label1.snp.makeConstraints { (make) -> Void in
make.width.equalTo(250)
make.top.equalTo(imageView.snp.bottom).offset(InstructionsViewControllerUX.TopPadding)
make.centerX.equalTo(view)
}
let label2 = UILabel()
view.addSubview(label2)
label2.numberOfLines = 0
label2.lineBreakMode = NSLineBreakMode.byWordWrapping
label2.font = InstructionsViewControllerUX.TextFont
label2.textColor = InstructionsViewControllerUX.TextColor
label2.textAlignment = NSTextAlignment.center
label2.attributedText = highlightLink(showMeText as NSString, withColor: InstructionsViewControllerUX.LinkColor)
label2.snp.makeConstraints { (make) -> Void in
make.width.equalTo(250)
make.top.equalTo(label1.snp.bottom).offset(InstructionsViewControllerUX.TopPadding)
make.centerX.equalTo(view)
}
}
class InstructionsViewController: UIViewController {
weak var delegate: InstructionsViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
edgesForExtendedLayout = []
view.backgroundColor = UIColor.white
navigationItem.leftBarButtonItem = UIBarButtonItem(title: NSLocalizedString("Close", tableName: "SendTo", comment: "Close button in top navigation bar"), style: UIBarButtonItemStyle.done, target: self, action: #selector(InstructionsViewController.close))
navigationItem.leftBarButtonItem?.accessibilityIdentifier = "InstructionsViewController.navigationItem.leftBarButtonItem"
setupHelpView(view,
introText: NSLocalizedString("You are not signed in to your Firefox Account.", tableName: "SendTo", comment: "See http://mzl.la/1ISlXnU"),
showMeText: NSLocalizedString("Please open Firefox, go to Settings and sign in to continue.", tableName: "SendTo", comment: "See http://mzl.la/1ISlXnU"))
}
func close() {
delegate?.instructionsViewControllerDidClose(self)
}
func showMeHow() {
print("Show me how") // TODO Not sure what to do or if to keep this. Waiting for UX feedback.
}
}