diff --git a/iphone/Maps/UI/PlacePage/Components/PlacePageEditBookmarkOrTrackViewController.swift b/iphone/Maps/UI/PlacePage/Components/PlacePageEditBookmarkOrTrackViewController.swift
index 4f06cf7ee..cd121edc7 100644
--- a/iphone/Maps/UI/PlacePage/Components/PlacePageEditBookmarkOrTrackViewController.swift
+++ b/iphone/Maps/UI/PlacePage/Components/PlacePageEditBookmarkOrTrackViewController.swift
@@ -10,8 +10,7 @@ enum PlacePageEditData {
final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
@IBOutlet var stackView: UIStackView!
- @IBOutlet var spinner: UIImageView!
- @IBOutlet var editButton: UIButton!
+ @IBOutlet var editView: InfoItemView!
@IBOutlet var topConstraint: NSLayoutConstraint!
@IBOutlet var expandableLabel: ExpandableLabel! {
didSet {
@@ -44,10 +43,21 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
private func updateViews() {
guard let data else { return }
- editButton.isEnabled = true
switch data {
case .bookmark(let bookmark):
- editButton.setTitle(L("placepage_edit_bookmark_button"), for: .normal)
+
+ editView.isHidden = false
+ editView.imageView.image = UIImage(resource: .icFolder)
+ editView.infoLabel.text = bookmark.bookmarkCategory
+ editView.setStyle(.link)
+ editView.tapHandler = {
+ print("Edit bookmark tapped")
+ }
+ let accessoryImage = circleImageForColor(bookmark.color.color, frameSize: 28, diameter: 22, iconName: "ic_bm_none")
+ editView.setAccessory(image: accessoryImage, tapHandler: {
+ print("Accessory tapped")
+ })
+
if let description = bookmark.bookmarkDescription {
if bookmark.isHtmlDescription {
setHtmlDescription(description)
@@ -60,7 +70,9 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
topConstraint.constant = 0
}
case .track:
- editButton.setTitle(L("edit_track"), for: .normal)
+
+ // TODO: implement track editing
+
expandableLabel.isHidden = true
topConstraint.constant = 0
}
@@ -92,20 +104,6 @@ final class PlacePageEditBookmarkOrTrackViewController: UIViewController {
}
}
- private func startSpinner() {
- editButton.isHidden = true
- let postfix = UIColor.isNightMode() ? "dark" : "light"
- spinner.image = UIImage(named: "Spinner_" + postfix)
- spinner.isHidden = false
- spinner.startRotation()
- }
-
- private func stopSpinner() {
- editButton.isHidden = false
- spinner.isHidden = true
- spinner.stopRotation()
- }
-
// MARK: - Actions
@IBAction func onEdit(_ sender: UIButton) {
diff --git a/iphone/Maps/UI/PlacePage/Components/PlacePageInfoViewController.swift b/iphone/Maps/UI/PlacePage/Components/PlacePageInfoViewController.swift
index f4043b30e..87c623ac2 100644
--- a/iphone/Maps/UI/PlacePage/Components/PlacePageInfoViewController.swift
+++ b/iphone/Maps/UI/PlacePage/Components/PlacePageInfoViewController.swift
@@ -1,4 +1,14 @@
-class InfoItemViewController: UIViewController {
+final class InfoItemView: UIView {
+ private enum Constants {
+ static let imageViewWidth: CGFloat = 56
+ static let imageViewHeight: CGFloat = 28
+ static let accessoryButtonSize: CGFloat = 44
+ static let infoLabelFontSize: CGFloat = 16
+ static let infoLabelTopBottomSpacing: CGFloat = 10
+ static let stackViewSpacing: CGFloat = 0
+ static let viewHeight: CGFloat = 44
+ }
+
enum Style {
case regular
case link
@@ -6,9 +16,9 @@ class InfoItemViewController: UIViewController {
typealias TapHandler = () -> Void
- @IBOutlet var imageView: UIImageView!
- @IBOutlet var infoLabel: UILabel!
- @IBOutlet var accessoryButton: UIButton!
+ let imageView = UIImageView()
+ let infoLabel = UILabel()
+ let accessoryButton = UIButton()
private var tapGestureRecognizer: UITapGestureRecognizer!
private var longPressGestureRecognizer: UILongPressGestureRecognizer!
@@ -19,19 +29,51 @@ class InfoItemViewController: UIViewController {
private var style: Style = .regular
- override func viewDidLoad() {
- super.viewDidLoad()
+ override init(frame: CGRect) {
+ super.init(frame: frame)
+ setupView()
+ }
+
+ required init?(coder: NSCoder) {
+ super.init(coder: coder)
setupView()
}
private func setupView() {
tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(onTap))
longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(onLongPress(_:)))
- view.addGestureRecognizer(tapGestureRecognizer)
- view.addGestureRecognizer(longPressGestureRecognizer)
-
+ addGestureRecognizer(tapGestureRecognizer)
+ addGestureRecognizer(longPressGestureRecognizer)
+
+ imageView.contentMode = .scaleAspectFit
accessoryButton.addTarget(self, action: #selector(onAccessoryButtonTap), for: .touchUpInside)
- setStyle(style)
+
+ addSubview(imageView)
+ addSubview(infoLabel)
+ addSubview(accessoryButton)
+
+ translatesAutoresizingMaskIntoConstraints = false
+ imageView.translatesAutoresizingMaskIntoConstraints = false
+ infoLabel.translatesAutoresizingMaskIntoConstraints = false
+ accessoryButton.translatesAutoresizingMaskIntoConstraints = false
+
+ NSLayoutConstraint.activate([
+ heightAnchor.constraint(equalToConstant: Constants.viewHeight),
+
+ imageView.leadingAnchor.constraint(equalTo: leadingAnchor),
+ imageView.centerYAnchor.constraint(equalTo: centerYAnchor),
+ imageView.widthAnchor.constraint(equalToConstant: Constants.imageViewWidth),
+ imageView.heightAnchor.constraint(equalToConstant: Constants.imageViewHeight),
+
+ infoLabel.leadingAnchor.constraint(equalTo: imageView.trailingAnchor),
+ infoLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
+ infoLabel.trailingAnchor.constraint(equalTo: accessoryButton.leadingAnchor),
+
+ accessoryButton.trailingAnchor.constraint(equalTo: trailingAnchor),
+ accessoryButton.centerYAnchor.constraint(equalTo: centerYAnchor),
+ accessoryButton.widthAnchor.constraint(equalToConstant: Constants.accessoryButtonSize),
+ accessoryButton.heightAnchor.constraint(equalToConstant: Constants.accessoryButtonSize)
+ ])
}
@objc
@@ -53,11 +95,11 @@ class InfoItemViewController: UIViewController {
func setStyle(_ style: Style) {
switch style {
case .regular:
- imageView?.setStyleAndApply(.black)
- infoLabel?.setFontStyleAndApply(.blackPrimary)
+ imageView.setStyleAndApply(.black)
+ infoLabel.setFontStyleAndApply(.regular16, color: .blackPrimary)
case .link:
- imageView?.setStyleAndApply(.blue)
- infoLabel?.setFontStyleAndApply(.linkBlue)
+ imageView.setStyleAndApply(.blue)
+ infoLabel.setFontStyleAndApply(.regular16, color: .linkBlue)
}
accessoryButton.setStyleAndApply(.black)
self.style = style
@@ -96,44 +138,45 @@ class PlacePageInfoViewController: UIViewController {
private struct Constants {
static let coordFormatIdKey = "PlacePageInfoViewController_coordFormatIdKey"
}
- private typealias TapHandler = InfoItemViewController.TapHandler
- private typealias Style = InfoItemViewController.Style
+
+ private typealias TapHandler = InfoItemView.TapHandler
+ private typealias Style = InfoItemView.Style
@IBOutlet var stackView: UIStackView!
- private lazy var openingHoursView: OpeningHoursViewController = {
+ private lazy var openingHoursViewController: OpeningHoursViewController = {
storyboard!.instantiateViewController(ofType: OpeningHoursViewController.self)
}()
- private var rawOpeningHoursView: InfoItemViewController?
- private var phoneViews: [InfoItemViewController] = []
- private var websiteView: InfoItemViewController?
- private var websiteMenuView: InfoItemViewController?
- private var wikipediaView: InfoItemViewController?
- private var wikimediaCommonsView: InfoItemViewController?
- private var emailView: InfoItemViewController?
- private var fediverseView: InfoItemViewController?
- private var facebookView: InfoItemViewController?
- private var instagramView: InfoItemViewController?
- private var twitterView: InfoItemViewController?
- private var vkView: InfoItemViewController?
- private var lineView: InfoItemViewController?
- private var blueskyView: InfoItemViewController?
- private var panoramaxView: InfoItemViewController?
- private var cuisineView: InfoItemViewController?
- private var operatorView: InfoItemViewController?
- private var wifiView: InfoItemViewController?
- private var atmView: InfoItemViewController?
- private var addressView: InfoItemViewController?
- private var levelView: InfoItemViewController?
- private var coordinatesView: InfoItemViewController?
- private var openWithAppView: InfoItemViewController?
- private var capacityView: InfoItemViewController?
- private var wheelchairView: InfoItemViewController?
- private var selfServiceView: InfoItemViewController?
- private var outdoorSeatingView: InfoItemViewController?
- private var driveThroughView: InfoItemViewController?
- private var networkView: InfoItemViewController?
+ private var rawOpeningHoursView: InfoItemView?
+ private var phoneViews: [InfoItemView] = []
+ private var websiteView: InfoItemView?
+ private var websiteMenuView: InfoItemView?
+ private var wikipediaView: InfoItemView?
+ private var wikimediaCommonsView: InfoItemView?
+ private var emailView: InfoItemView?
+ private var fediverseView: InfoItemView?
+ private var facebookView: InfoItemView?
+ private var instagramView: InfoItemView?
+ private var twitterView: InfoItemView?
+ private var vkView: InfoItemView?
+ private var lineView: InfoItemView?
+ private var blueskyView: InfoItemView?
+ private var panoramaxView: InfoItemView?
+ private var cuisineView: InfoItemView?
+ private var operatorView: InfoItemView?
+ private var wifiView: InfoItemView?
+ private var atmView: InfoItemView?
+ private var addressView: InfoItemView?
+ private var levelView: InfoItemView?
+ private var coordinatesView: InfoItemView?
+ private var openWithAppView: InfoItemView?
+ private var capacityView: InfoItemView?
+ private var wheelchairView: InfoItemView?
+ private var selfServiceView: InfoItemView?
+ private var outdoorSeatingView: InfoItemView?
+ private var driveThroughView: InfoItemView?
+ private var networkView: InfoItemView?
weak var placePageInfoData: PlacePageInfoData!
weak var delegate: PlacePageInfoViewControllerDelegate?
@@ -144,14 +187,27 @@ class PlacePageInfoViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
+ stackView.axis = .vertical
+ stackView.alignment = .fill
+ stackView.spacing = 0
+ stackView.translatesAutoresizingMaskIntoConstraints = false
+ view.addSubview(stackView)
+ NSLayoutConstraint.activate([
+ stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
+ stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
+ stackView.topAnchor.constraint(equalTo: view.topAnchor),
+ stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
+ ])
setupViews()
}
// MARK: private
private func setupViews() {
if let openingHours = placePageInfoData.openingHours {
- openingHoursView.openingHours = openingHours
- addToStack(openingHoursView)
+ openingHoursViewController.openingHours = openingHours
+ addChild(openingHoursViewController)
+ addToStack(openingHoursViewController.view)
+ openingHoursViewController.didMove(toParent: self)
} else if let openingHoursString = placePageInfoData.openingHoursString {
rawOpeningHoursView = createInfoItem(openingHoursString, icon: UIImage(named: "ic_placepage_open_hours"))
rawOpeningHoursView?.infoLabel.numberOfLines = 0
@@ -182,7 +238,7 @@ class PlacePageInfoViewController: UIViewController {
if let ppOperator = placePageInfoData.ppOperator {
operatorView = createInfoItem(ppOperator, icon: UIImage(named: "ic_placepage_operator"))
}
-
+
if let network = placePageInfoData.network {
networkView = createInfoItem(network, icon: UIImage(named: "ic_placepage_network"))
}
@@ -437,7 +493,7 @@ class PlacePageInfoViewController: UIViewController {
style: .link,
tapHandler: { [weak self] in
guard let self, let openWithAppView else { return }
- self.delegate?.didPressOpenInApp(from: openWithAppView.view)
+ self.delegate?.didPressOpenInApp(from: openWithAppView)
})
}
@@ -447,22 +503,20 @@ class PlacePageInfoViewController: UIViewController {
accessoryImage: UIImage? = nil,
tapHandler: TapHandler? = nil,
longPressHandler: TapHandler? = nil,
- accessoryImageTapHandler: TapHandler? = nil) -> InfoItemViewController {
- let vc = storyboard!.instantiateViewController(ofType: InfoItemViewController.self)
- addToStack(vc)
- vc.imageView.image = icon
- vc.infoLabel.text = info
- vc.setStyle(style)
- vc.tapHandler = tapHandler
- vc.longPressHandler = longPressHandler
- vc.setAccessory(image: accessoryImage, tapHandler: accessoryImageTapHandler)
- return vc;
+ accessoryImageTapHandler: TapHandler? = nil) -> InfoItemView {
+ let view = InfoItemView()
+ addToStack(view)
+ view.imageView.image = icon?.withRenderingMode(.alwaysTemplate)
+ view.infoLabel.text = info
+ view.setStyle(style)
+ view.tapHandler = tapHandler
+ view.longPressHandler = longPressHandler
+ view.setAccessory(image: accessoryImage, tapHandler: accessoryImageTapHandler)
+ return view
}
- private func addToStack(_ viewController: UIViewController) {
- addChild(viewController)
- stackView.addArrangedSubviewWithSeparator(viewController.view, insets: UIEdgeInsets(top: 0, left: 56, bottom: 0, right: 0))
- viewController.didMove(toParent: self)
+ private func addToStack(_ view: UIView) {
+ stackView.addArrangedSubviewWithSeparator(view, insets: UIEdgeInsets(top: 0, left: 56, bottom: 0, right: 0))
}
private static let kHttp = "http://"
diff --git a/iphone/Maps/UI/PlacePage/PlacePage.storyboard b/iphone/Maps/UI/PlacePage/PlacePage.storyboard
index 613671100..3bde486f9 100644
--- a/iphone/Maps/UI/PlacePage/PlacePage.storyboard
+++ b/iphone/Maps/UI/PlacePage/PlacePage.storyboard
@@ -515,80 +515,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1202,45 +1128,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
@@ -1262,9 +1159,8 @@
-
+
-
@@ -1495,16 +1391,15 @@
-
-
+
-
+