improve carplay apply button ui

This commit is contained in:
leminlimez committed 2025-06-21 14:04:45 -04:00
1 parent 759597dfb2
commit f9ba2dee0d
7 files changed
+126 -48

No files matched your search

@@ -0,0 +1,39 @@
//
// OpaqueButton.swift
// Pocket Poster
//
// Created by lemin on 6/21/25.
//
import SwiftUI
struct OpaqueButton: ButtonStyle {
var color: Color
var textColor: Color
var fullwidth: Bool = false
func makeBody(configuration: Configuration) -> some View {
ZStack {
if fullwidth {
configuration.label
.padding(15)
.frame(maxWidth: .infinity)
.background(color)
.cornerRadius(8)
.foregroundColor(textColor)
} else {
configuration.label
.padding(15)
.background(color)
.cornerRadius(8)
.foregroundColor(textColor)
}
}
}
init(color: Color = .blue, textColor: Color = .primary, fullwidth: Bool = false) {
self.color = color
self.textColor = textColor
self.fullwidth = fullwidth
}
}
+28
View File
@@ -418,6 +418,9 @@
} }
} }
} }
},
"Apply CarPlay Wallpapers" : {
}, },
"Applying Wallpapers..." : { "Applying Wallpapers..." : {
"localizations" : { "localizations" : {
@@ -630,6 +633,15 @@
} }
} }
} }
},
"CarPlay" : {
},
"CarPlay Applied Wallpapers Successfully Cleared!" : {
},
"CarPlay Wallpapers" : {
}, },
"Clear App Cache" : { "Clear App Cache" : {
"localizations" : { "localizations" : {
@@ -1977,6 +1989,7 @@
} }
}, },
"Enter App Hash" : { "Enter App Hash" : {
"extractionState" : "stale",
"localizations" : { "localizations" : {
"ar" : { "ar" : {
"stringUnit" : { "stringUnit" : {
@@ -2075,6 +2088,15 @@
} }
} }
} }
},
"Enter CarPlayWallpaper App Hash" : {
},
"Enter PosterBoard App Hash" : {
},
"Enter your CarPlayWallpaper app hash in Settings." : {
}, },
"Enter your PosterBoard app hash in Settings." : { "Enter your PosterBoard app hash in Settings." : {
"localizations" : { "localizations" : {
@@ -5136,6 +5158,9 @@
} }
} }
} }
},
"Reset CarPlay Applied Wallpapers" : {
}, },
"Reset Collections" : { "Reset Collections" : {
"localizations" : { "localizations" : {
@@ -7008,6 +7033,9 @@
} }
} }
} }
},
"You can now choose your wallpapers in the CarPlay settings in your car." : {
}, },
"You can only apply %@ descriptors." : { "You can only apply %@ descriptors." : {
"localizations" : { "localizations" : {
@@ -29,61 +29,70 @@ struct CarPlayView: View {
var body: some View { var body: some View {
NavigationStack { NavigationStack {
ScrollView { ZStack {
if wallpapers.isEmpty { ScrollView {
ProgressView() if wallpapers.isEmpty {
} else { ProgressView()
LazyVGrid(columns: [GridItem(.adaptive(minimum: 150, maximum: 250))]) { } else {
ForEach($wallpapers) { wallpaper in LazyVGrid(columns: [GridItem(.adaptive(minimum: 150, maximum: 250))]) {
ZStack { ForEach($wallpapers) { wallpaper in
WallpaperView(wallpaper: wallpaper, didChange: $didChange, showDark: $showDark) ZStack {
.disabled(activeWallpapers.contains(wallpaper.name.wrappedValue)) WallpaperView(wallpaper: wallpaper, didChange: $didChange, showDark: $showDark)
// The checkmark .disabled(activeWallpapers.contains(wallpaper.name.wrappedValue))
if activeWallpapers.contains(wallpaper.name.wrappedValue) { // The checkmark
RoundedRectangle(cornerRadius: 8) if activeWallpapers.contains(wallpaper.name.wrappedValue) {
.foregroundStyle(.black.opacity(0.4)) RoundedRectangle(cornerRadius: 8)
Image(systemName: "checkmark.circle.fill") .foregroundStyle(.black.opacity(0.4))
.font(.title) Image(systemName: "checkmark.circle.fill")
.foregroundStyle(.green) .font(.title)
.foregroundStyle(.green)
}
} }
} }
} }
}
.padding()
}
if cpHash == "" {
Text("Enter your CarPlayWallpaper app hash in Settings.")
.padding() .padding()
} else if didChange { }
Button(action: { }
UIImpactFeedbackGenerator(style: .soft).impactOccurred() VStack {
UIApplication.shared.alert(title: NSLocalizedString("Applying Wallpapers...", comment: ""), body: NSLocalizedString("Please wait", comment: ""), animated: false, withButton: false) Spacer()
if didChange {
Button(action: {
UIImpactFeedbackGenerator(style: .soft).impactOccurred()
UIApplication.shared.alert(title: NSLocalizedString("Applying Wallpapers...", comment: ""), body: NSLocalizedString("Please wait", comment: ""), animated: false, withButton: false)
DispatchQueue.global(qos: .userInitiated).async { DispatchQueue.global(qos: .userInitiated).async {
do { do {
try pbManager.applyCarPlay(appHash: cpHash, wallpapers: wallpapers) try pbManager.applyCarPlay(appHash: cpHash, wallpapers: wallpapers)
SymHandler.cleanup() // just to be extra sure SymHandler.cleanup() // just to be extra sure
UIApplication.shared.dismissAlert(animated: false) UIApplication.shared.dismissAlert(animated: false)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.35, execute: { DispatchQueue.main.asyncAfter(deadline: .now() + 0.35, execute: {
activeWallpapers = UserDefaults.standard.array(forKey: "ActiveCarPlayWallpapers") as? [String] ?? [] activeWallpapers = UserDefaults.standard.array(forKey: "ActiveCarPlayWallpapers") as? [String] ?? []
Haptic.shared.notify(.success) Haptic.shared.notify(.success)
UIApplication.shared.alert(title: NSLocalizedString("Success!", comment: ""), body: NSLocalizedString("You can now choose your wallpapers in the CarPlay settings in your car.", comment: "")) UIApplication.shared.alert(title: NSLocalizedString("Success!", comment: ""), body: NSLocalizedString("You can now choose your wallpapers in the CarPlay settings in your car.", comment: ""))
}) })
} catch CocoaError.fileWriteUnknown { } catch CocoaError.fileWriteUnknown {
presentError(ApplyError.wrongAppHash) presentError(ApplyError.wrongAppHash)
} catch CocoaError.fileWriteFileExists { } catch CocoaError.fileWriteFileExists {
presentError(ApplyError.collectionsNeedsReset) presentError(ApplyError.collectionsNeedsReset)
} catch { } catch {
print(error.localizedDescription) print(error.localizedDescription)
presentError(ApplyError.unexpected(info: error.localizedDescription)) presentError(ApplyError.unexpected(info: error.localizedDescription))
}
}
}) {
if cpHash == "" {
Text("Enter your CarPlayWallpaper app hash in Settings.")
} else {
Label("Apply CarPlay Wallpapers", systemImage: "checkmark.circle")
} }
} }
}) { .buttonStyle(OpaqueButton(color: cpHash == "" ? .red : .blue, fullwidth: true))
Label("Apply CarPlay Wallpapers", systemImage: "checkmark.circle") .disabled(cpHash == "")
.padding(.vertical, 10)
.padding(.horizontal, 25)
.transition(.move(edge: .bottom))
.animation(.easeIn, value: didChange)
} }
.buttonStyle(TintedButton(color: .blue, fullwidth: true))
.padding()
} }
} }
.navigationTitle("CarPlay Wallpapers") .navigationTitle("CarPlay Wallpapers")
@@ -177,7 +186,9 @@ struct WallpaperView: View {
} else { } else {
wallpaper.selectedImageDataLight = data wallpaper.selectedImageDataLight = data
} }
didChange = true withAnimation {
didChange = true
}
} }
} }
} }