From cec1f839715eb9e032d1ccc8bdf450c64f2ad13e Mon Sep 17 00:00:00 2001 From: Brian Sakhuja Date: Tue, 16 Jan 2024 16:03:22 -0800 Subject: [PATCH] get ready for 1.0 release --- Epicentral.xcodeproj/project.pbxproj | 10 ++++- .../contents.xcworkspacedata | 2 +- .../Launch Screen/LaunchScreen.imageset/8.svg | 1 + .../Launch Screen/LaunchScreen.imageset/9.svg | 1 + .../LaunchScreen.imageset/Contents.json | 12 +++++- .../LaunchScreen.imageset/LaunchScreen.png | Bin 33717 -> 0 bytes .../Contents.json | 6 +-- .../Contents.json | 38 ++++++++++++++++++ Epicentral/HomeView.swift | 7 +++- Epicentral/States/EarthquakesState.swift | 1 + .../Extensions/ApplicationInfo.swift | 28 +++++++++++++ Epicentral/Utilities/Round.swift | 32 +++++++++++++++ .../EarthquakeList/EarthquakeRow.swift | 2 +- .../FloatingButtonView.swift | 1 - .../Views/Screens/EarthquakeDetailView.swift | 10 ++--- .../Views/Screens/EarthquakeListView.swift | 11 +++++ .../Views/Screens/EarthquakesMapView.swift | 17 +++++++- Epicentral/Views/Screens/SettingsView.swift | 36 ++++++++++++----- 18 files changed, 188 insertions(+), 27 deletions(-) create mode 100644 Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/8.svg create mode 100644 Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/9.svg delete mode 100644 Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/LaunchScreen.png create mode 100644 Epicentral/Assets.xcassets/Launch Screen/LaunchScreenForeground.colorset/Contents.json create mode 100644 Epicentral/Utilities/Extensions/ApplicationInfo.swift create mode 100644 Epicentral/Utilities/Round.swift diff --git a/Epicentral.xcodeproj/project.pbxproj b/Epicentral.xcodeproj/project.pbxproj index 6fee6d4..39a9f10 100644 --- a/Epicentral.xcodeproj/project.pbxproj +++ b/Epicentral.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 065FE1312B574D250014FD45 /* ApplicationInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 065FE1302B574D250014FD45 /* ApplicationInfo.swift */; }; 068B01A32B0DB5A90012D86C /* FloatingButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068B01A22B0DB5A90012D86C /* FloatingButtonView.swift */; }; 068B01A82B0DB8B20012D86C /* SettingsState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068B01A72B0DB8B20012D86C /* SettingsState.swift */; }; 068B01AA2B0DB9540012D86C /* EarthquakeListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 068B01A92B0DB9540012D86C /* EarthquakeListView.swift */; }; @@ -21,6 +22,7 @@ 06DA015D2AFC3EE20008FE49 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06DA015C2AFC3EE20008FE49 /* Date.swift */; }; 06DA015F2AFD91FB0008FE49 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06DA015E2AFD91FB0008FE49 /* LoadingIndicator.swift */; }; 06DA01632AFDBB0D0008FE49 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06DA01622AFDBB0D0008FE49 /* SettingsView.swift */; }; + 06EB16902B50EF51006BA666 /* Round.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06EB168F2B50EF51006BA666 /* Round.swift */; }; 06EFE9B72AFAB91E00351973 /* EpicentralApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06EFE9B62AFAB91E00351973 /* EpicentralApp.swift */; }; 06EFE9B92AFAB91E00351973 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06EFE9B82AFAB91E00351973 /* HomeView.swift */; }; 06EFE9BB2AFAB92000351973 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 06EFE9BA2AFAB92000351973 /* Assets.xcassets */; }; @@ -55,6 +57,7 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 065FE1302B574D250014FD45 /* ApplicationInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationInfo.swift; sourceTree = ""; }; 068B01A22B0DB5A90012D86C /* FloatingButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloatingButtonView.swift; sourceTree = ""; }; 068B01A72B0DB8B20012D86C /* SettingsState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsState.swift; sourceTree = ""; }; 068B01A92B0DB9540012D86C /* EarthquakeListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EarthquakeListView.swift; sourceTree = ""; }; @@ -70,6 +73,7 @@ 06DA015E2AFD91FB0008FE49 /* LoadingIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingIndicator.swift; sourceTree = ""; }; 06DA01622AFDBB0D0008FE49 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 06DA01692B05B7350008FE49 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 06EB168F2B50EF51006BA666 /* Round.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Round.swift; sourceTree = ""; }; 06EFE9B32AFAB91E00351973 /* Epicentral.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Epicentral.app; sourceTree = BUILT_PRODUCTS_DIR; }; 06EFE9B62AFAB91E00351973 /* EpicentralApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EpicentralApp.swift; sourceTree = ""; }; 06EFE9B82AFAB91E00351973 /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; @@ -126,6 +130,7 @@ isa = PBXGroup; children = ( 06DA01572AFC2DA60008FE49 /* Extensions */, + 06EB168F2B50EF51006BA666 /* Round.swift */, ); path = Utilities; sourceTree = ""; @@ -136,6 +141,7 @@ 06DA01582AFC2DB60008FE49 /* CLLocation.swift */, 06DA015A2AFC2DD70008FE49 /* CLPlacemark.swift */, 06DA015C2AFC3EE20008FE49 /* Date.swift */, + 065FE1302B574D250014FD45 /* ApplicationInfo.swift */, ); path = Extensions; sourceTree = ""; @@ -416,7 +422,9 @@ 06DA015B2AFC2DD70008FE49 /* CLPlacemark.swift in Sources */, 068B01AA2B0DB9540012D86C /* EarthquakeListView.swift in Sources */, 06DA014F2AFBFEE40008FE49 /* EarthquakeDetailView.swift in Sources */, + 065FE1312B574D250014FD45 /* ApplicationInfo.swift in Sources */, 06DA01512AFC0DAE0008FE49 /* Earthquake.swift in Sources */, + 06EB16902B50EF51006BA666 /* Round.swift in Sources */, 06DA014C2AFB0B4E0008FE49 /* EarthquakeRow.swift in Sources */, 06DA015F2AFD91FB0008FE49 /* LoadingIndicator.swift in Sources */, 068B01A82B0DB8B20012D86C /* SettingsState.swift in Sources */, @@ -595,7 +603,6 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.weather"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; LD_RUNPATH_SEARCH_PATHS = ( @@ -626,7 +633,6 @@ INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.weather"; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; - INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; LD_RUNPATH_SEARCH_PATHS = ( diff --git a/Epicentral.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Epicentral.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 864d178..919434a 100644 --- a/Epicentral.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Epicentral.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/8.svg b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/8.svg new file mode 100644 index 0000000..7b1d670 --- /dev/null +++ b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/8.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/9.svg b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/9.svg new file mode 100644 index 0000000..58a7dd6 --- /dev/null +++ b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/9.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/Contents.json b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/Contents.json index d5bd5c9..ee65988 100644 --- a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/Contents.json +++ b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/Contents.json @@ -1,7 +1,17 @@ { "images" : [ { - "filename" : "LaunchScreen.png", + "filename" : "8.svg", + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "9.svg", "idiom" : "universal" } ], diff --git a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/LaunchScreen.png b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreen.imageset/LaunchScreen.png deleted file mode 100644 index 12bdca6e24122cb151dbfef44a8a7d3cb4ddb041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33717 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 diff --git a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenBackground.colorset/Contents.json b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenBackground.colorset/Contents.json index 3ce977c..eb8013c 100644 --- a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenBackground.colorset/Contents.json +++ b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenBackground.colorset/Contents.json @@ -23,9 +23,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0x52", - "green" : "0x6F", - "red" : "0x4F" + "blue" : "0x39", + "green" : "0x4D", + "red" : "0x3A" } }, "idiom" : "universal" diff --git a/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenForeground.colorset/Contents.json b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenForeground.colorset/Contents.json new file mode 100644 index 0000000..dce9f8f --- /dev/null +++ b/Epicentral/Assets.xcassets/Launch Screen/LaunchScreenForeground.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x39", + "green" : "0x4D", + "red" : "0x3A" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xCE", + "green" : "0xE3", + "red" : "0xEC" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Epicentral/HomeView.swift b/Epicentral/HomeView.swift index 06ba396..ec1297a 100644 --- a/Epicentral/HomeView.swift +++ b/Epicentral/HomeView.swift @@ -22,11 +22,14 @@ struct HomeView: View { } FloatingButtonView( - imageName: "map", + imageName: settings.isListView ? "map" : "list.dash", action: { - settings.toggleMapList() + withAnimation { + settings.toggleMapList() + } }) .padding() + .opacity(state.shouldShowFloatingButton ? 1 : 0) } diff --git a/Epicentral/States/EarthquakesState.swift b/Epicentral/States/EarthquakesState.swift index fe0b0d5..ed8c697 100644 --- a/Epicentral/States/EarthquakesState.swift +++ b/Epicentral/States/EarthquakesState.swift @@ -13,6 +13,7 @@ class EarthquakesState: ObservableObject { let earthquakeService: EarthquakeServiceProtocol @Published var earthquakes: [Earthquake]? @Published var isLoading: Bool = true + @Published var shouldShowFloatingButton: Bool = true init(earthquakeService: EarthquakeServiceProtocol) { self.earthquakeService = earthquakeService diff --git a/Epicentral/Utilities/Extensions/ApplicationInfo.swift b/Epicentral/Utilities/Extensions/ApplicationInfo.swift new file mode 100644 index 0000000..6eb336e --- /dev/null +++ b/Epicentral/Utilities/Extensions/ApplicationInfo.swift @@ -0,0 +1,28 @@ +// +// Application.swift +// Epicentral +// +// Created by Brian Sakhuja on 1/16/24. +// + +import Foundation + +enum AppVersionProvider { + static var appVersion: String { + guard let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String else { + fatalError("CFBundleShortVersionString should not be missing from info dictionary") + } + return version + } + + static var buildNumber: String { + guard let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as? String else { + fatalError("CFBundleVersion should not be missing from info dictionary") + } + return "(" + version + ")" + } + + static var versionAndBuild: String { + return "v" + appVersion + " " + buildNumber + } +} diff --git a/Epicentral/Utilities/Round.swift b/Epicentral/Utilities/Round.swift new file mode 100644 index 0000000..8ac8516 --- /dev/null +++ b/Epicentral/Utilities/Round.swift @@ -0,0 +1,32 @@ +// +// Round.swift +// Epicentral +// +// Created by Brian Sakhuja on 1/11/24. +// + +import Foundation + +// Specify the decimal place to round to using an enum +public enum RoundingPrecision { + case ones + case tenths + case hundredths +} + + + +// Round to the specific decimal place +public func preciseRound( + _ value: Double, + precision: RoundingPrecision = .ones) -> String +{ + switch precision { + case .ones: + return String(round(value)) + case .tenths: + return String(round(value * 10) / 10.0) + case .hundredths: + return String(round(value * 100) / 100.0) + } +} diff --git a/Epicentral/Views/Components/EarthquakeList/EarthquakeRow.swift b/Epicentral/Views/Components/EarthquakeList/EarthquakeRow.swift index eb5ad03..3ead774 100644 --- a/Epicentral/Views/Components/EarthquakeList/EarthquakeRow.swift +++ b/Epicentral/Views/Components/EarthquakeList/EarthquakeRow.swift @@ -16,7 +16,7 @@ struct EarthquakeRow: View { Text("Magnitude") .font(.footnote) .foregroundStyle(Color.gray) - Text(earthquake.properties.magnitude.description) + Text(preciseRound(earthquake.properties.magnitude, precision: .hundredths)) .font(.title) .bold() } diff --git a/Epicentral/Views/Components/FloatingButtonView/FloatingButtonView.swift b/Epicentral/Views/Components/FloatingButtonView/FloatingButtonView.swift index 821c88b..0966435 100644 --- a/Epicentral/Views/Components/FloatingButtonView/FloatingButtonView.swift +++ b/Epicentral/Views/Components/FloatingButtonView/FloatingButtonView.swift @@ -22,7 +22,6 @@ struct FloatingButtonView: View { .foregroundColor(.white) .clipShape(Circle()) .shadow(radius: 4, x: 0, y: 4) - } } } diff --git a/Epicentral/Views/Screens/EarthquakeDetailView.swift b/Epicentral/Views/Screens/EarthquakeDetailView.swift index 14952c9..a434dbf 100644 --- a/Epicentral/Views/Screens/EarthquakeDetailView.swift +++ b/Epicentral/Views/Screens/EarthquakeDetailView.swift @@ -18,9 +18,9 @@ struct EarthquakeDetailView: View { } .mapControls { - MapUserLocationButton() - MapCompass() - MapScaleView() +// MapUserLocationButton() +// MapCompass() +// MapScaleView() } ScrollView { VStack(alignment: .leading) { @@ -31,7 +31,7 @@ struct EarthquakeDetailView: View { HStack { Text("Magnitude") Spacer() - Text(earthquake.properties.magnitude.description) + Text(preciseRound(earthquake.properties.magnitude, precision: .hundredths)) } HStack { Text("Date & Time") @@ -51,7 +51,7 @@ struct EarthquakeDetailView: View { } } .padding() -// .navigationTitle(earthquake.properties.title) + .navigationTitle("Earthquake details") } } diff --git a/Epicentral/Views/Screens/EarthquakeListView.swift b/Epicentral/Views/Screens/EarthquakeListView.swift index 3206629..cf1b5b0 100644 --- a/Epicentral/Views/Screens/EarthquakeListView.swift +++ b/Epicentral/Views/Screens/EarthquakeListView.swift @@ -19,6 +19,17 @@ struct EarthquakeListView: View { List(earthquakes) { earthquake in NavigationLink { EarthquakeDetailView(earthquake: earthquake) + .onAppear { + withAnimation { + state.shouldShowFloatingButton = false + } + } + .onDisappear { + withAnimation { + state.shouldShowFloatingButton = true + } + } + } label: { EarthquakeRow(earthquake: earthquake) } diff --git a/Epicentral/Views/Screens/EarthquakesMapView.swift b/Epicentral/Views/Screens/EarthquakesMapView.swift index 3d105df..fcebdfa 100644 --- a/Epicentral/Views/Screens/EarthquakesMapView.swift +++ b/Epicentral/Views/Screens/EarthquakesMapView.swift @@ -17,13 +17,26 @@ struct EarthquakesMapView: View { latitudinalMeters: 100_000, longitudinalMeters: 100_000) + @State private var selectedEarthquake: Earthquake? + var body: some View { if let earthquakes = state.earthquakes { - Map() { + Map(selection: $selectedEarthquake) { ForEach(earthquakes, id: \.self) { result in - Marker(result.id, coordinate: result.geometry.coordinate2D) + Marker(result.properties.title, coordinate: result.geometry.coordinate2D) + .tag(result.id) } } + // TODO/ make a detail view below then have button go to detail view +// .safeAreaInset(edge: .bottom) { +// if let selectedEarthquake { +// Text(selectedEarthquake.id) +// .frame(height: 128) +// .clipShape(RoundedRectangle(cornerRadius: 10)) +// .padding([.top, .horizontal]) +// +// } +// } } else { Text("No earthquakes! Try adjusting your search criteria.") } diff --git a/Epicentral/Views/Screens/SettingsView.swift b/Epicentral/Views/Screens/SettingsView.swift index e7d6365..79e02dd 100644 --- a/Epicentral/Views/Screens/SettingsView.swift +++ b/Epicentral/Views/Screens/SettingsView.swift @@ -8,6 +8,7 @@ import SwiftUI struct SettingsView: View { + @ObservedObject var state: SettingsState var body: some View { @@ -17,18 +18,35 @@ struct SettingsView: View { DatePicker("Start date", selection: $state.dateStart, displayedComponents: .date) DatePicker("End date", selection: $state.dateEnd, displayedComponents: .date) }) - Section("Magnitude", content: { - Text("No magnitude filter") - Text("Minimum magnitude") - Text("Maximum magnitude") - }) - Section("Location", content: { - Text("Sorted by distance") - Text("Max distance from location") - Text("Location") +// Section("Magnitude", content: { +// Text("No magnitude filter") +// Text("Minimum magnitude") +// Text("Maximum magnitude") +// }) +// Section("Location", content: { +// Text("Sorted by distance") +// Text("Max distance from location") +// Text("Location") +// }) +// Section("Magnitude", content: { +// Text("No magnitude filter") +// Text("Minimum magnitude") +// Text("Maximum magnitude") +// }) +// Section("Location", content: { +// Text("Sorted by distance") +// Text("Max distance from location") +// Text("Location") +// }) + + Section("About", content: { + Text("Epicentral version \(AppVersionProvider.versionAndBuild)") + Text("Made by Brian Sakhuja") + Text("Earthquake data from USGS") }) } .navigationTitle("Search Settings") + }