diff --git a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h
index 62120c882c..bd8ffa5632 100644
--- a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h
+++ b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.h
@@ -102,6 +102,9 @@ NS_SWIFT_NAME(BookmarksManager)
color:(MWMBookmarkColor)color
description:(NSString *)description;
+- (void)updateBookmark:(MWMMarkID)bookmarkId
+ setColor:(MWMBookmarkColor)color;
+
- (void)moveBookmark:(MWMMarkID)bookmarkId
toGroupId:(MWMMarkGroupID)groupId;
@@ -110,6 +113,9 @@ NS_SWIFT_NAME(BookmarksManager)
color:(UIColor *)color
title:(NSString *)title;
+- (void)updateTrack:(MWMTrackID)trackId
+ setColor:(UIColor *)color;
+
- (void)moveTrack:(MWMTrackID)trackId
toGroupId:(MWMMarkGroupID)groupId;
diff --git a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm
index e1194dda6c..b5da7a2caa 100644
--- a/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm
+++ b/iphone/CoreApi/CoreApi/Bookmarks/MWMBookmarksManager.mm
@@ -680,6 +680,21 @@ static BookmarkManager::SortingType convertSortingTypeToCore(MWMBookmarksSorting
bookmark->SetCustomName(title.UTF8String);
}
+- (void)updateBookmark:(MWMMarkID)bookmarkId
+ setColor:(MWMBookmarkColor)color {
+ auto editSession = self.bm.GetEditSession();
+
+ auto bookmark = editSession.GetBookmarkForEdit(bookmarkId);
+ if (!bookmark)
+ return;
+
+ auto kmlColor = convertBookmarkColor(color);
+ if (kmlColor != bookmark->GetColor())
+ self.bm.SetLastEditedBmColor(kmlColor);
+
+ bookmark->SetColor(kmlColor);
+}
+
- (void)moveBookmark:(MWMMarkID)bookmarkId
toGroupId:(MWMMarkGroupID)groupId {
auto const currentGroupId = self.bm.GetBookmark(bookmarkId)->GetGroupId();
@@ -710,6 +725,21 @@ static BookmarkManager::SortingType convertSortingTypeToCore(MWMBookmarksSorting
track->SetName(title.UTF8String);
}
+- (void)updateTrack:(MWMTrackID)trackId
+ setColor:(UIColor *)color {
+ auto editSession = self.bm.GetEditSession();
+
+ auto track = editSession.GetTrackForEdit(trackId);
+ if (!track)
+ return;
+
+ auto const currentColor = track->GetColor(0);
+ auto const newColor = [MWMBookmarksManager getColorFromUIColor:color];
+
+ if (newColor != currentColor)
+ track->SetColor(newColor);
+}
+
- (void)moveTrack:(MWMTrackID)trackId
toGroupId:(MWMMarkGroupID)groupId {
auto const currentGroupId = self.bm.GetTrack(trackId)->GetGroupId();
diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift
index 58fbed0172..981ff17b89 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift
+++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListInterfaces.swift
@@ -30,12 +30,14 @@ protocol IBookmarkViewModel {
var bookmarkName: String { get }
var subtitle: String { get }
var image: UIImage { get }
+ var colorDidTapAction: (() -> Void)? { get }
}
protocol ITrackViewModel {
var trackName: String { get }
var subtitle: String { get }
var image: UIImage { get }
+ var colorDidTapAction: (() -> Void)? { get }
}
protocol ISubgroupViewModel {
@@ -57,6 +59,7 @@ protocol IBookmarksListView: AnyObject {
func setSections(_ sections: [IBookmarksListSectionViewModel])
func setMoreItemTitle(_ itemTitle: String)
func showMenu(_ items: [IBookmarksListMenuItem])
+ func showColorPicker(with pickerType: ColorPickerType, _ completion: ((UIColor) -> Void)?)
func enableEditing(_ enable: Bool)
func share(_ url: URL, completion: @escaping () -> Void)
func showError(title: String, message: String)
diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift
index 94ba759c9a..0f982513ad 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift
+++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListPresenter.swift
@@ -45,7 +45,12 @@ final class BookmarksListPresenter {
interactor.resetSort()
var sections: [IBookmarksListSectionViewModel] = []
let tracks = bookmarkGroup.tracks.map { track in
- TrackViewModel(track, formattedDistance: formatDistance(Double(track.trackLengthMeters)))
+ TrackViewModel(track, formattedDistance: formatDistance(Double(track.trackLengthMeters)), colorDidTap: {
+ self.view.showColorPicker(with: .defaultColorPicker(track.trackColor)) { color in
+ BookmarksManager.shared().updateTrack(track.trackId, setColor: color)
+ self.reload()
+ }
+ })
}
if !tracks.isEmpty {
sections.append(TracksSectionViewModel(tracks: tracks))
@@ -70,16 +75,22 @@ final class BookmarksListPresenter {
private func mapBookmarks(_ bookmarks: [Bookmark]) -> [BookmarkViewModel] {
let location = LocationManager.lastLocation()
- return bookmarks.map {
+ return bookmarks.map { bookmark in
let formattedDistance: String?
if let location = location {
- let distance = location.distance(from: CLLocation(latitude: $0.locationCoordinate.latitude,
- longitude: $0.locationCoordinate.longitude))
+ let distance = location.distance(from: CLLocation(latitude: bookmark.locationCoordinate.latitude,
+ longitude: bookmark.locationCoordinate.longitude))
formattedDistance = formatDistance(distance)
} else {
formattedDistance = nil
}
- return BookmarkViewModel($0, formattedDistance: formattedDistance)
+ return BookmarkViewModel(bookmark, formattedDistance: formattedDistance, colorDidTap: { [weak self] in
+ self?.view.showColorPicker(with: .bookmarkColorPicker(bookmark.bookmarkColor)) { color in
+ guard let bookmarkColor = BookmarkColor.bookmarkColor(from: color) else { return }
+ BookmarksManager.shared().updateBookmark(bookmark.bookmarkId, setColor: bookmarkColor)
+ self?.reload()
+ }
+ })
}
}
@@ -163,7 +174,12 @@ final class BookmarksListPresenter {
}
if let tracks = bookmarksSection.tracks, let self = self {
return TracksSectionViewModel(tracks: tracks.map { track in
- TrackViewModel(track, formattedDistance: self.formatDistance(Double(track.trackLengthMeters)))
+ TrackViewModel(track, formattedDistance: self.formatDistance(Double(track.trackLengthMeters)), colorDidTap: {
+ self.view.showColorPicker(with: .defaultColorPicker(track.trackColor)) { color in
+ BookmarksManager.shared().updateTrack(track.trackId, setColor: color)
+ self.reload()
+ }
+ })
})
}
fatalError()
@@ -409,16 +425,18 @@ fileprivate struct BookmarkViewModel: IBookmarkViewModel {
var image: UIImage {
bookmarkColor.image(bookmarkIconName)
}
+ var colorDidTapAction: (() -> Void)?
private let bookmarkColor: BookmarkColor
private let bookmarkIconName: String
- init(_ bookmark: Bookmark, formattedDistance: String?) {
+ init(_ bookmark: Bookmark, formattedDistance: String?, colorDidTap: (() -> Void)?) {
bookmarkId = bookmark.bookmarkId
bookmarkName = bookmark.bookmarkName
bookmarkColor = bookmark.bookmarkColor
bookmarkIconName = bookmark.bookmarkIconName
subtitle = [formattedDistance, bookmark.bookmarkType].compactMap { $0 }.joined(separator: " • ")
+ colorDidTapAction = colorDidTap
}
}
@@ -429,14 +447,16 @@ fileprivate struct TrackViewModel: ITrackViewModel {
var image: UIImage {
circleImageForColor(trackColor, frameSize: 22)
}
+ var colorDidTapAction: (() -> Void)?
private let trackColor: UIColor
- init(_ track: Track, formattedDistance: String) {
+ init(_ track: Track, formattedDistance: String, colorDidTap: (() -> Void)?) {
trackId = track.trackId
trackName = track.trackName
subtitle = "\(L("length")) \(formattedDistance)"
trackColor = track.trackColor
+ colorDidTapAction = colorDidTap
}
}
diff --git a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListViewController.swift b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListViewController.swift
index 3d857496f8..d59ab65f2c 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/BookmarksListViewController.swift
+++ b/iphone/Maps/Bookmarks/BookmarksList/BookmarksListViewController.swift
@@ -223,6 +223,10 @@ extension BookmarksListViewController: IBookmarksListView {
present(actionSheet, animated: true)
}
+ func showColorPicker(with pickerType: ColorPickerType, _ completionHandler: ((UIColor) -> Void)?) {
+ ColorPicker.shared.present(from: self, pickerType: pickerType, completionHandler: completionHandler)
+ }
+
func enableEditing(_ enable: Bool) {
canEdit = enable
navigationItem.rightBarButtonItem = enable ? editButtonItem : nil
diff --git a/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.swift b/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.swift
index d8e3663c22..170f03d871 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.swift
+++ b/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.swift
@@ -3,9 +3,22 @@ final class BookmarkCell: UITableViewCell {
@IBOutlet private var bookmarkTitleLabel: UILabel!
@IBOutlet private var bookmarkSubtitleLabel: UILabel!
+ private var bookmarkColorDidTapAction: (() -> Void)?
+
+ override func awakeFromNib() {
+ super.awakeFromNib()
+ let tapGesture = UITapGestureRecognizer(target: self, action: #selector(colorDidTapAction(_:)))
+ bookmarkImageView.addGestureRecognizer(tapGesture)
+ }
+
func config(_ bookmark: IBookmarkViewModel) {
bookmarkImageView.image = bookmark.image
bookmarkTitleLabel.text = bookmark.bookmarkName
bookmarkSubtitleLabel.text = bookmark.subtitle
+ bookmarkColorDidTapAction = bookmark.colorDidTapAction
+ }
+
+ @objc private func colorDidTapAction(_ sender: UITapGestureRecognizer) {
+ bookmarkColorDidTapAction?()
}
}
diff --git a/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.xib b/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.xib
index b68439e91b..98066cc6f9 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.xib
+++ b/iphone/Maps/Bookmarks/BookmarksList/Cells/BookmarkCell.xib
@@ -17,8 +17,9 @@
-
+
+
@@ -56,6 +57,7 @@
+
diff --git a/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.swift b/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.swift
index cd77c09d81..87684a2d08 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.swift
+++ b/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.swift
@@ -3,9 +3,22 @@ final class TrackCell: UITableViewCell {
@IBOutlet private var trackTitleLabel: UILabel!
@IBOutlet private var trackSubtitleLabel: UILabel!
+ private var trackColorDidTapAction: (() -> Void)?
+
+ override func awakeFromNib() {
+ super.awakeFromNib()
+ let tapGesture = UITapGestureRecognizer(target: self, action: #selector(colorDidTapAction(_:)))
+ trackImageView.addGestureRecognizer(tapGesture)
+ }
+
func config(_ track: ITrackViewModel) {
trackImageView.image = track.image
trackTitleLabel.text = track.trackName
trackSubtitleLabel.text = track.subtitle
+ trackColorDidTapAction = track.colorDidTapAction
+ }
+
+ @objc private func colorDidTapAction(_ sender: UITapGestureRecognizer) {
+ trackColorDidTapAction?()
}
}
diff --git a/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.xib b/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.xib
index 327917f703..763a4d2d7a 100644
--- a/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.xib
+++ b/iphone/Maps/Bookmarks/BookmarksList/Cells/TrackCell.xib
@@ -17,7 +17,7 @@
-
+
diff --git a/iphone/Maps/UI/EditBookmark/BookmarkColorViewController.swift b/iphone/Maps/UI/EditBookmark/BookmarkColorViewController.swift
index e804098ca6..9520bc2efb 100644
--- a/iphone/Maps/UI/EditBookmark/BookmarkColorViewController.swift
+++ b/iphone/Maps/UI/EditBookmark/BookmarkColorViewController.swift
@@ -22,6 +22,11 @@ final class BookmarkColorViewController: MWMTableViewController {
override func viewDidLoad() {
super.viewDidLoad()
title = L("change_color")
+ navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelButtonDidTap))
+ }
+
+ @objc private func cancelButtonDidTap() {
+ dismiss(animated: true, completion: nil)
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
diff --git a/iphone/Maps/UI/EditBookmark/EditBookmarkViewController.swift b/iphone/Maps/UI/EditBookmark/EditBookmarkViewController.swift
index 82c6c1c11a..f95484b662 100644
--- a/iphone/Maps/UI/EditBookmark/EditBookmarkViewController.swift
+++ b/iphone/Maps/UI/EditBookmark/EditBookmarkViewController.swift
@@ -139,11 +139,10 @@ final class EditBookmarkViewController: MWMTableViewController {
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+ tableView.deselectRow(at: indexPath, animated: true)
switch InfoSectionRows(rawValue: indexPath.row) {
case .color:
- let colorViewController = BookmarkColorViewController(bookmarkColor: bookmarkColor)
- colorViewController.delegate = self
- navigationController?.pushViewController(colorViewController, animated: true)
+ openColorPicker()
case .bookmarkGroup:
let groupViewController = SelectBookmarkGroupViewController(groupName: bookmarkGroupTitle ?? "", groupId: bookmarkGroupId)
groupViewController.delegate = self
@@ -170,6 +169,15 @@ final class EditBookmarkViewController: MWMTableViewController {
editingCompleted?(true)
goBack()
}
+
+ @objc private func openColorPicker() {
+ ColorPicker.shared.present(from: self, pickerType: .bookmarkColorPicker(bookmarkColor), completionHandler: { [weak self] color in
+ self?.bookmarkColor = BookmarkColor.bookmarkColor(from: color)
+ self?.tableView.reloadRows(at: [IndexPath(row: InfoSectionRows.color.rawValue, section: Sections.info.rawValue)],
+ with: .none)
+ })
+ }
+
}
extension EditBookmarkViewController: BookmarkTitleCellDelegate {
diff --git a/iphone/Maps/UI/EditBookmark/EditTrackViewController.swift b/iphone/Maps/UI/EditBookmark/EditTrackViewController.swift
index 2184c3b112..ea25306277 100644
--- a/iphone/Maps/UI/EditBookmark/EditTrackViewController.swift
+++ b/iphone/Maps/UI/EditBookmark/EditTrackViewController.swift
@@ -114,19 +114,7 @@ final class EditTrackViewController: MWMTableViewController {
tableView.deselectRow(at: indexPath, animated: true)
switch InfoSectionRows(rawValue: indexPath.row) {
case .color:
- if #available(iOS 14.0, *) {
- let colorPickerController = UIColorPickerViewController()
- colorPickerController.supportsAlpha = false
- colorPickerController.delegate = self
- colorPickerController.selectedColor = trackColor
- present(colorPickerController, animated: true)
- } else {
- // For iOS < 14.0 when the color cannot be mapped to predefined it will not be selected in the table view.
- let trackColor = BookmarkColor.bookmarkColor(from: trackColor) ?? .none
- let colorViewController = BookmarkColorViewController(bookmarkColor: trackColor)
- colorViewController.delegate = self
- navigationController?.pushViewController(colorViewController, animated: true)
- }
+ openColorPicker()
case .bookmarkGroup:
let groupViewController = SelectBookmarkGroupViewController(groupName: trackGroupTitle ?? "", groupId: trackGroupId)
groupViewController.delegate = self
@@ -150,6 +138,13 @@ final class EditTrackViewController: MWMTableViewController {
tableView.reloadRows(at: [IndexPath(row: InfoSectionRows.color.rawValue, section: Sections.info.rawValue)],
with: .none)
}
+
+ @objc private func openColorPicker() {
+ ColorPicker.shared.present(from: self, pickerType: .defaultColorPicker(trackColor), completionHandler: { [weak self] color in
+ self?.updateColor(color)
+ })
+ }
+
}
extension EditTrackViewController: BookmarkTitleCellDelegate {