diff --git a/FuelBoard/Assets.xcassets/Contents.json b/FuelBoard/Assets.xcassets/Contents.json new file mode 100644 index 0000000..c47b5f2 --- /dev/null +++ b/FuelBoard/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_applegreen.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_applegreen.imageset/Contents.json new file mode 100644 index 0000000..52bba66 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_applegreen.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_applegreen.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_applegreen.imageset/brand_applegreen.png b/FuelBoard/Assets.xcassets/brand_applegreen.imageset/brand_applegreen.png new file mode 100644 index 0000000..054c5cf Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_applegreen.imageset/brand_applegreen.png differ diff --git a/FuelBoard/Assets.xcassets/brand_asda.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_asda.imageset/Contents.json new file mode 100644 index 0000000..f30d8b6 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_asda.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_asda.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_asda.imageset/brand_asda.png b/FuelBoard/Assets.xcassets/brand_asda.imageset/brand_asda.png new file mode 100644 index 0000000..6034a39 Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_asda.imageset/brand_asda.png differ diff --git a/FuelBoard/Assets.xcassets/brand_bp.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_bp.imageset/Contents.json new file mode 100644 index 0000000..3ba877a --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_bp.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_bp.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_bp.imageset/brand_bp.png b/FuelBoard/Assets.xcassets/brand_bp.imageset/brand_bp.png new file mode 100644 index 0000000..51b1031 Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_bp.imageset/brand_bp.png differ diff --git a/FuelBoard/Assets.xcassets/brand_esso.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_esso.imageset/Contents.json new file mode 100644 index 0000000..9724c04 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_esso.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_esso.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_esso.imageset/brand_esso.png b/FuelBoard/Assets.xcassets/brand_esso.imageset/brand_esso.png new file mode 100644 index 0000000..d3a60e7 Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_esso.imageset/brand_esso.png differ diff --git a/FuelBoard/Assets.xcassets/brand_gulf.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_gulf.imageset/Contents.json new file mode 100644 index 0000000..35b5bb5 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_gulf.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_gulf.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_gulf.imageset/brand_gulf.png b/FuelBoard/Assets.xcassets/brand_gulf.imageset/brand_gulf.png new file mode 100644 index 0000000..f35002a Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_gulf.imageset/brand_gulf.png differ diff --git a/FuelBoard/Assets.xcassets/brand_jet.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_jet.imageset/Contents.json new file mode 100644 index 0000000..9bb218b --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_jet.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_jet.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_jet.imageset/brand_jet.png b/FuelBoard/Assets.xcassets/brand_jet.imageset/brand_jet.png new file mode 100644 index 0000000..54efcfd Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_jet.imageset/brand_jet.png differ diff --git a/FuelBoard/Assets.xcassets/brand_morrisons.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_morrisons.imageset/Contents.json new file mode 100644 index 0000000..e268eac --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_morrisons.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_morrisons.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_morrisons.imageset/brand_morrisons.png b/FuelBoard/Assets.xcassets/brand_morrisons.imageset/brand_morrisons.png new file mode 100644 index 0000000..ad56ede Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_morrisons.imageset/brand_morrisons.png differ diff --git a/FuelBoard/Assets.xcassets/brand_sainsburys.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_sainsburys.imageset/Contents.json new file mode 100644 index 0000000..77563a5 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_sainsburys.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_sainsburys.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_sainsburys.imageset/brand_sainsburys.png b/FuelBoard/Assets.xcassets/brand_sainsburys.imageset/brand_sainsburys.png new file mode 100644 index 0000000..97a3ecd Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_sainsburys.imageset/brand_sainsburys.png differ diff --git a/FuelBoard/Assets.xcassets/brand_shell.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_shell.imageset/Contents.json new file mode 100644 index 0000000..1802a66 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_shell.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_shell.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_shell.imageset/brand_shell.png b/FuelBoard/Assets.xcassets/brand_shell.imageset/brand_shell.png new file mode 100644 index 0000000..3586538 Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_shell.imageset/brand_shell.png differ diff --git a/FuelBoard/Assets.xcassets/brand_tesco.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_tesco.imageset/Contents.json new file mode 100644 index 0000000..b91e101 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_tesco.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_tesco.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_tesco.imageset/brand_tesco.png b/FuelBoard/Assets.xcassets/brand_tesco.imageset/brand_tesco.png new file mode 100644 index 0000000..2a1b9e4 Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_tesco.imageset/brand_tesco.png differ diff --git a/FuelBoard/Assets.xcassets/brand_texaco.imageset/Contents.json b/FuelBoard/Assets.xcassets/brand_texaco.imageset/Contents.json new file mode 100644 index 0000000..ab320f4 --- /dev/null +++ b/FuelBoard/Assets.xcassets/brand_texaco.imageset/Contents.json @@ -0,0 +1,13 @@ +{ + "images": [ + { + "filename": "brand_texaco.png", + "idiom": "universal", + "scale": "2x" + } + ], + "info": { + "author": "xcode", + "version": 1 + } +} \ No newline at end of file diff --git a/FuelBoard/Assets.xcassets/brand_texaco.imageset/brand_texaco.png b/FuelBoard/Assets.xcassets/brand_texaco.imageset/brand_texaco.png new file mode 100644 index 0000000..1aa38e5 Binary files /dev/null and b/FuelBoard/Assets.xcassets/brand_texaco.imageset/brand_texaco.png differ diff --git a/FuelBoard/ContentView.swift b/FuelBoard/ContentView.swift index 09c9b6a..c3d06e0 100644 --- a/FuelBoard/ContentView.swift +++ b/FuelBoard/ContentView.swift @@ -235,6 +235,25 @@ struct StationRow: View { var body: some View { HStack(spacing: 12) { + // Round brand logo (or generic fuel pump fallback) + Group { + if let asset = station.brandImageName { + Image(asset) + .resizable() + .scaledToFit() + .padding(3) + } else { + Image(systemName: "fuelpump.fill") + .font(.system(size: 16)) + .foregroundStyle(.white) + } + } + .frame(width: 34, height: 34) + .background(Circle().fill(.white)) + .clipShape(Circle()) + .overlay(Circle().stroke(Color.primary.opacity(0.08), lineWidth: 1)) + .shadow(color: .black.opacity(0.08), radius: 2, y: 1) + VStack(alignment: .leading, spacing: 2) { HStack(spacing: 6) { Text(station.name) diff --git a/Shared/FuelStore.swift b/Shared/FuelStore.swift index ea566c2..98bbd35 100644 --- a/Shared/FuelStore.swift +++ b/Shared/FuelStore.swift @@ -93,6 +93,29 @@ struct FuelStation: Identifiable, Codable, Equatable { var mapsDirectionsURL: URL? { URL(string: "http://maps.apple.com/?daddr=\(lat),\(lng)&t=d") } + + /// Name of the bundled brand logo asset, or nil if unknown. + /// Normalizes messy raw brand strings ("SHELL LEEDS ROAD" → "shell"). + var brandImageName: String? { + let raw = brand.uppercased() + let known: [(String, String)] = [ + ("SHELL", "brand_shell"), + ("SAINSBURY", "brand_sainsburys"), + ("MORRISONS", "brand_morrisons"), + ("APPLEGREEN", "brand_applegreen"), + ("TESCO", "brand_tesco"), + ("TEXACO", "brand_texaco"), + ("ESSO", "brand_esso"), + ("ASDA", "brand_asda"), + ("GULF", "brand_gulf"), + ("BP", "brand_bp"), + ("JET", "brand_jet"), + ] + for (needle, asset) in known where raw.contains(needle) { + return asset + } + return nil + } } // MARK: - Shared store