Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
4c7ca52
Merge branch 'production' into estimates-providers
joao-vasconcelos Oct 14, 2022
a92643f
Merge branch 'production' into estimates-providers
joao-vasconcelos Oct 15, 2022
0fdfc55
Revert "Merge branch 'production' into estimates-providers"
joao-vasconcelos Oct 15, 2022
c8cfcda
Custom merge with production
joao-vasconcelos Oct 15, 2022
aecada5
More merge
joao-vasconcelos Oct 15, 2022
9d91740
More merge
joao-vasconcelos Oct 15, 2022
4432ef1
Update to Helpers. from Globals().
joao-vasconcelos Oct 15, 2022
4ca9fcd
Merge from production
joao-vasconcelos Oct 21, 2022
380c68c
Merge from production
joao-vasconcelos Oct 21, 2022
8660e92
Enable DataProvidersCard
joao-vasconcelos Oct 21, 2022
5dcc570
Delete EstimationsController.swift
joao-vasconcelos Oct 21, 2022
e3b6a5b
Update VehicleDetailsView.swift
joao-vasconcelos Oct 21, 2022
7c3233a
Updated comment
joao-vasconcelos Oct 21, 2022
be7c096
Removed unused enum
joao-vasconcelos Oct 21, 2022
19313c0
Update Appstate.swift
joao-vasconcelos Oct 21, 2022
40978ce
Save Community Data Provider status setting
joao-vasconcelos Oct 21, 2022
cee53b8
Simplified approach
joao-vasconcelos Oct 21, 2022
b4b42e5
Updated wording
joao-vasconcelos Oct 21, 2022
8f3c53c
Added Community API Data Model
joao-vasconcelos Oct 21, 2022
adc5894
Added community estimates
joao-vasconcelos Oct 21, 2022
ed41d72
Moved function
joao-vasconcelos Oct 21, 2022
2e49013
Only receive what's needed
joao-vasconcelos Oct 21, 2022
5ccffdf
Reduced spacing
joao-vasconcelos Oct 21, 2022
34961f6
.
joao-vasconcelos Oct 21, 2022
260d206
Annotations have an UUID()
joao-vasconcelos Oct 22, 2022
079fba2
Centralized place to display sheet contents
joao-vasconcelos Oct 22, 2022
08931b1
Sheet close is now managed by Appstate
joao-vasconcelos Oct 22, 2022
67f185e
Sheet lives in ContentView
joao-vasconcelos Oct 22, 2022
296fe17
Vehicle is now a class
joao-vasconcelos Oct 22, 2022
e6cc701
Use appstate sheet system
joao-vasconcelos Oct 22, 2022
06f660a
Use appstate sheet system
joao-vasconcelos Oct 22, 2022
9b9cd0a
Fix for debug buttons
joao-vasconcelos Oct 22, 2022
e559482
Ability to select vehicles
joao-vasconcelos Oct 22, 2022
1c00428
Can click estimates to select the respective bus
joao-vasconcelos Oct 28, 2022
9e635d2
Starting to build sheet for vehicles
joao-vasconcelos Oct 29, 2022
b73e976
Some navigational structure in the file
joao-vasconcelos Oct 29, 2022
1231f7c
Added more StopIcon colors
joao-vasconcelos Oct 31, 2022
dea022e
Create new Chip layout component
joao-vasconcelos Oct 31, 2022
cf57864
Chip
joao-vasconcelos Oct 31, 2022
f3c4502
Embracing the nil
joao-vasconcelos Oct 31, 2022
48bf831
Good next version
joao-vasconcelos Nov 1, 2022
0a6b60e
Blip on MapKit experiment
joao-vasconcelos Nov 3, 2022
5e71d44
Delete NewMapView.swift
joao-vasconcelos Nov 3, 2022
b5c0dd8
Making Chip receive a second view
joao-vasconcelos Nov 3, 2022
8b63239
Changes changes
joao-vasconcelos Nov 7, 2022
113071e
Created new SheetController
joao-vasconcelos Nov 7, 2022
57d0921
Fixed comments on controllers
joao-vasconcelos Nov 7, 2022
1af9763
Create Debounce.swift
joao-vasconcelos Nov 8, 2022
5dd3758
Standardized appearance under style enum
joao-vasconcelos Nov 8, 2022
fd2b0da
Let's face it, the app only has carris now
joao-vasconcelos Nov 8, 2022
969fe36
.
joao-vasconcelos Nov 8, 2022
03ab530
Stop Annotations are now always visible depending on the map region
joao-vasconcelos Nov 8, 2022
339a1b6
Use of combine debouncer
joao-vasconcelos Nov 8, 2022
8be938b
Conform MKCoordinateRegion to Equatable
joao-vasconcelos Nov 8, 2022
3ae2803
Tweaks to StopIcon
joao-vasconcelos Nov 8, 2022
c70f431
Always show Vehicle Route Overview from Community
joao-vasconcelos Nov 8, 2022
8b48566
Update stop annotations to new style
joao-vasconcelos Nov 8, 2022
a9b2518
Renamed .carris_stop and .carris_vehicle to .stop and .vehicle
joao-vasconcelos Nov 8, 2022
ecb5f23
What a mess
joao-vasconcelos Nov 8, 2022
7e9297d
Revert "What a mess"
joao-vasconcelos Nov 8, 2022
ee63eff
Revert "Delete NewMapView.swift"
joao-vasconcelos Nov 8, 2022
2092797
Bring back mapkit
joao-vasconcelos Nov 8, 2022
db1d6cb
MapKit advances
joao-vasconcelos Nov 10, 2022
af99b23
Messy code to save
joao-vasconcelos Nov 13, 2022
05eda4e
Functioning annotations and vehicles with MKMap
joao-vasconcelos Nov 13, 2022
45bd8ff
Touching with overlays
joao-vasconcelos Nov 13, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 53 additions & 5 deletions GeoBus.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions GeoBus/App/Components/About/AboutGeoBus.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import SwiftUI

struct AboutGeoBus: View {

@EnvironmentObject var carrisNetworkController: CarrisNetworkController
@ObservedObject private var carrisNetworkController = CarrisNetworkController.shared

@State private var showInfoSheet: Bool = false

Expand Down Expand Up @@ -46,7 +46,7 @@ struct AboutGeoBus: View {
.padding(.top, 70)
.padding(.bottom, 15)
SyncStatus()
// DataProvidersCard()
DataProvidersCard()
}
.padding(.horizontal)

Expand Down
4 changes: 2 additions & 2 deletions GeoBus/App/Components/About/CloseButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import SwiftUI

struct CloseButton: View {

@EnvironmentObject var appstate: Appstate
@EnvironmentObject var carrisNetworkController: CarrisNetworkController
@ObservedObject private var appstate = Appstate.shared
@ObservedObject private var carrisNetworkController = CarrisNetworkController.shared

@Binding var isPresenting: Bool

Expand Down
92 changes: 40 additions & 52 deletions GeoBus/App/Components/About/DataProvidersCard.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,73 +9,61 @@ import SwiftUI

struct DataProvidersCard: View {

private let cardColor: Color = Color(.systemTeal)

@State var communityProviderIsOn: Bool = false


var providerToggle: some View {
Toggle(isOn: $communityProviderIsOn) {
HStack {
Image(systemName: "staroflife.circle")
.renderingMode(.template)
.font(Font.system(size: 25))
.foregroundColor(cardColor)
Text("Community ETAs")
.font(Font.system(size: 18, weight: .bold))
.foregroundColor(cardColor)
.padding(.leading, 5)
}
.onAppear() {
// if (estimationsController.estimationsProvider == .carris) {
// communityProviderIsOn = false
// } else {
// communityProviderIsOn = true
// }
}
}
.padding()
.frame(maxWidth: .infinity)
.tint(cardColor)
.background(cardColor.opacity(0.05))
.cornerRadius(10)
// .onChange(of: estimationsController.estimationsProvider) { value in
// if (value == .carris) {
// communityProviderIsOn = false
// } else {
// communityProviderIsOn = true
// }
// }
.onChange(of: communityProviderIsOn) { value in
if (value) {
// estimationsController.setProvider(selection: .community)
} else {
// estimationsController.setProvider(selection: .carris)
}
}
}

private let accentColor: Color = Color(.systemTeal)

var body: some View {
Card {
Image(systemName: "clock.arrow.2.circlepath")
.font(Font.system(size: 30, weight: .regular))
.foregroundColor(cardColor)
Text("ETA Provider")
.foregroundColor(accentColor)
Text("Community Data")
.font(.title)
.fontWeight(.bold)
.foregroundColor(cardColor)
Text("Select your prefered Data provider.")
.foregroundColor(accentColor)
Text("Try an experimental feature made in partnership with people interested in improving transportation in Lisbon.")
.multilineTextAlignment(.center)
.font(.headline)
.fontWeight(.semibold)
.foregroundColor(Color(.label))
Text("Ainda não faz nada.")
Text("This includes better arrival time estimates for all stops, more precise vehicle locations and additional route information.")
.multilineTextAlignment(.center)
.font(.headline)
.fontWeight(.semibold)
.foregroundColor(Color(.secondaryLabel))
providerToggle
CommunityProviderToggle()
}
}

}



struct CommunityProviderToggle: View {

private let accentColor: Color = Color(.systemTeal)

@ObservedObject private var carrisNetworkController = CarrisNetworkController.shared

var body: some View {
Toggle(isOn: $carrisNetworkController.communityDataProviderStatus) {
HStack {
Image(systemName: "staroflife.circle")
.renderingMode(.template)
.font(Font.system(size: 25))
.foregroundColor(accentColor)
Text("Community Data")
.font(Font.system(size: 18, weight: .bold))
.foregroundColor(accentColor)
.padding(.leading, 5)
}
}
.padding()
.frame(maxWidth: .infinity)
.tint(accentColor)
.background(accentColor.opacity(0.05))
.cornerRadius(10)
.onChange(of: carrisNetworkController.communityDataProviderStatus) { value in
carrisNetworkController.toggleCommunityDataProviderStatus(to: value)
}
}

Expand Down
84 changes: 84 additions & 0 deletions GeoBus/App/Components/About/EstimationsProviderCard.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
//
// AboutLiveData.swift
// GeoBus
//
// Created by João de Vasconcelos on 19/09/2022.
//

import SwiftUI

struct EstimationsProviderCard: View {

@EnvironmentObject var estimationsController: EstimationsController

private let cardColor: Color = Color(.systemTeal)

@State var communityProviderIsOn: Bool = false


var providerToggle: some View {
Toggle(isOn: $communityProviderIsOn) {
HStack {
Image(systemName: "staroflife.circle")
.renderingMode(.template)
.font(Font.system(size: 25))
.foregroundColor(cardColor)
Text("Community ETAs")
.font(Font.system(size: 18, weight: .bold))
.foregroundColor(cardColor)
.padding(.leading, 5)
}
.onAppear() {
if (estimationsController.estimationsProvider == .carris) {
communityProviderIsOn = false
} else {
communityProviderIsOn = true
}
}
}
.padding()
.frame(maxWidth: .infinity)
.tint(cardColor)
.background(cardColor.opacity(0.05))
.cornerRadius(10)
.onChange(of: estimationsController.estimationsProvider) { value in
if (value == .carris) {
communityProviderIsOn = false
} else {
communityProviderIsOn = true
}
}
.onChange(of: communityProviderIsOn) { value in
if (value) {
estimationsController.setProvider(selection: .community)
} else {
estimationsController.setProvider(selection: .carris)
}
}
}


var body: some View {
Card {
Image(systemName: "clock.arrow.2.circlepath")
.font(Font.system(size: 30, weight: .regular))
.foregroundColor(cardColor)
Text("ETA Provider")
.font(.title)
.fontWeight(.bold)
.foregroundColor(cardColor)
Text("Select your prefered Time of Arrival provider.")
.multilineTextAlignment(.center)
.font(.headline)
.fontWeight(.semibold)
.foregroundColor(Color(.label))
Text("Text about differences in provider.")
.multilineTextAlignment(.center)
.font(.headline)
.fontWeight(.semibold)
.foregroundColor(Color(.secondaryLabel))
providerToggle
}
}

}
4 changes: 2 additions & 2 deletions GeoBus/App/Components/About/SyncStatus.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import SwiftUI

struct SyncStatus: View {

@EnvironmentObject var appstate: Appstate
@EnvironmentObject var carrisNetworkController: CarrisNetworkController
@ObservedObject private var appstate = Appstate.shared
@ObservedObject private var carrisNetworkController = CarrisNetworkController.shared


var syncError: some View {
Expand Down
90 changes: 78 additions & 12 deletions GeoBus/App/Components/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,99 @@
//

import SwiftUI
import MapKit

struct ContentView: View {

@StateObject private var mapController = MapController.shared
@StateObject private var carrisNetworkController = CarrisNetworkController.shared

var body: some View {

VStack(alignment: .trailing, spacing: 0) {

VStack(spacing: 0) {
ZStack(alignment: .topTrailing) {

MapView()
.edgesIgnoringSafeArea(.vertical)

MapViewSwiftUI(
region: $mapController.region,
camera: $mapController.mapCamera,
annotations: $mapController.allAnnotations,
overlays: $mapController.allOverlays
)
.edgesIgnoringSafeArea(.vertical)
.onReceive(carrisNetworkController.$activeVariant) { newVariant in
if (newVariant != nil) {
if (newVariant?.circularShape != nil) {
var tempLinePoints: [CLLocationCoordinate2D] = []
do {
let dataStringData = Data(newVariant!.circularShape!.utf8)
let dataObject = try JSONDecoder().decode(CarrisAPIModel.Shape2.self, from: dataStringData)
print("HJBUYY/TGUYINUHBGVFCTVYGBUHNJHBGVFCDVTGYBHUN")
print(dataObject)
for point in dataObject.coordinates {
tempLinePoints.append(
CLLocationCoordinate2D(latitude: point[1], longitude: point[0])
)
}
} catch {
print(error)
}
self.mapController.allOverlays.append(
MKPolyline(coordinates: tempLinePoints, count: tempLinePoints.count)
)
}
}
}
.onReceive(carrisNetworkController.$activeVehicles) { newVehiclesList in
var tempNewAnnotations: [GeoBusMKAnnotation] = []
for vehicle in carrisNetworkController.activeVehicles {
tempNewAnnotations.append(
GeoBusMKAnnotation(
type: .vehicle,
id: vehicle.id,
coordinate: CLLocationCoordinate2D(latitude: vehicle.lat ?? 0, longitude: vehicle.lng ?? 0)
)
)
}
mapController.add(annotations: tempNewAnnotations, ofType: .vehicle)
}
.onReceive(mapController.$region) { newRegion in
var tempNewAnnotations: [GeoBusMKAnnotation] = []
if (newRegion.span.latitudeDelta < 0.01 || newRegion.span.longitudeDelta < 0.01) {

let latTop = newRegion.center.latitude + newRegion.span.latitudeDelta + 0.01
let latBottom = newRegion.center.latitude - newRegion.span.latitudeDelta - 0.01

let lngRight = newRegion.center.longitude + newRegion.span.longitudeDelta + 0.01
let lngLeft = newRegion.center.longitude - newRegion.span.longitudeDelta - 0.01

for stop in carrisNetworkController.allStops {

let isBetweenLats = stop.lat > latBottom && stop.lat < latTop
let isBetweenLngs = stop.lng > lngLeft && stop.lng < lngRight

if (isBetweenLats && isBetweenLngs) {
tempNewAnnotations.append(
GeoBusMKAnnotation(
type: .stop,
id: stop.id,
coordinate: CLLocationCoordinate2D(latitude: stop.lat, longitude: stop.lng)
)
)
}

}
}
mapController.add(annotations: tempNewAnnotations, ofType: .stop)
}
VStack(spacing: 15) {
AboutGeoBus()
Spacer()
StopSearch()
UserLocation()
}
.padding()

}

NavBar()
.edgesIgnoringSafeArea(.vertical)

}

}

}
Loading