feat: Align user report map to Android app

This commit is contained in:
Andrea Busi
2022-11-15 22:40:33 +01:00
parent beb264f95e
commit e9986e0fe1
33 changed files with 340 additions and 128 deletions
@@ -15,36 +15,60 @@ class EQNMapAnnotationUserReport: NSObject, MKAnnotation {
@objc var coordinate: CLLocationCoordinate2D
@objc var title: String?
@objc var subtitle: String?
@objc var image: UIImage?
@objc var timeDifference: String?
var report: EQNSegnalazione?
// MARK: - Init
convenience init(report: EQNSegnalazione) {
let coordinate = CLLocationCoordinate2D(latitude: report.coordinate.coordinate.latitude, longitude: report.coordinate.coordinate.longitude)
let magnitude = report.intensity.rawValue
let title = EQNUtility.formattedTimeDifference(from: report.date)
let coordinate = report.coordinate.coordinate
let magnitude = report.intensity
self.init(title: title, coordinate: coordinate, magnitude: magnitude)
self.init(magnitude: magnitude, coordinate: coordinate)
self.report = report
self.timeDifference = EQNUtility.formattedTimeDifference(from: report.date)
}
@objc init(title: String, coordinate: CLLocationCoordinate2D, magnitude: Int) {
self.title = title
self.image = Self.image(for: magnitude)
@objc init(
magnitude: Int,
coordinate: CLLocationCoordinate2D
) {
self.title = Self.title(for: magnitude)
self.subtitle = Self.subtitle(for: magnitude)
self.coordinate = coordinate
super.init()
self.image = Self.image(for: magnitude)
}
// MARK: - Public
// MARK: - Helper
private static func image(for magnitute: Int) -> UIImage? {
switch magnitute {
case 1: return UIImage(named: "star_report_green")
case 2: return UIImage(named: "star_report_yellow")
case 3: return UIImage(named: "star_report_red")
default: return nil
guard let color = UIColor(named: "Mercalli \(magnitute)") else {
print("[EQNMapAnnotationUserReport] Unable to get a color for magnitude: \(magnitute)")
return nil
}
return UIImage.circle(diameter: 24.0, color: color, borderWidth: 1.0, borderColor: AppTheme.Colors.gray)
}
private static func title(for magnitude: Int) -> String {
let grade = magnitude / 10
let roman = grade.toRoman()
return String(format: NSLocalizedString("mercalli_intensity", comment: ""), roman)
}
private static func subtitle(for magnitude: Int) -> String {
let grade = magnitude / 10
let roman = grade.toRoman()
let string = NSLocalizedString("mercalli_\(roman)", comment: "")
// strings are in the format like "II - Appena percepito"
// so we are going to remove the "II" from the string
let components = string.components(separatedBy: " - ")
if components.count > 1 {
return components[1]
}
return string
}
}