quicker opening of the imessage app, support ios 17 and below again

This commit is contained in:
neon443
2025-11-10 15:14:51 +00:00
parent 6d4eb5da36
commit 1c4ef6896d
8 changed files with 219 additions and 88 deletions

View File

@@ -11,95 +11,73 @@ import Haptics
struct ContentView: View {
@StateObject var hoarder: EmojiHoarder = .shared
@State var searchTerm: String = ""
var minColWidth: CGFloat { 75 }
var spacing: CGFloat { 10 }
var col: GridItem {
GridItem(
.flexible(minimum: minColWidth, maximum: 125),
spacing: spacing,
alignment: .center
)
}
@Environment(\.colorScheme) var colorScheme
var isDark: Bool { colorScheme == .dark }
var body: some View {
TabView {
ScrollView {
let columns: Int = max(1, Int((UIScreen.main.bounds.width - 2*spacing) / (minColWidth + spacing)))
let layout = Array(repeating: col, count: columns)
LazyVGrid(columns: layout, spacing: 10) {
ForEach(hoarder.emojis, id: \.self) { emoji in
if hoarder.downloadedEmojis.contains(emoji.name) {
ZStack {
Rectangle()
.foregroundStyle(isDark ? .black : .white)
EmojiPreview(emoji: emoji)
RoundedRectangle(cornerRadius: 15)
.stroke(.gray, lineWidth: 1)
}
.aspectRatio(1, contentMode: .fit)
.clipShape(RoundedRectangle(cornerRadius: 15))
.contextMenu {
Text(emoji.name)
Button("Share", systemImage: "square.and.arrow.up") {
}
ShareLink("Share", item: emoji.localImageURL, subject: nil, message: nil)
ShareLink("Share", item: emoji.remoteImageURL, subject: nil, message: nil)
Divider()
Button("Delete", systemImage: "trash.fill", role: .destructive) {
hoarder.delete(emoji: emoji)
}
}
NavigationSplitView {
if #available(iOS 18, *) {
TabView {
Tab("Downloaded", systemImage: "arrow.down.circle.fill") {
DownloadedView()
}
Tab("Browse", systemImage: "square.grid.2x2.fill") {
BrowseView()
}
// Tab {
// List {
// Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
//
// ForEach(hoarder.filteredEmojis, id: \.self) { name in
// if let emoji = hoarder.trie.dict[name] {
// EmojiRow(emoji: emoji)
// }
// }
// }
// .onChange(of: searchTerm) { _ in
// hoarder.filterEmojis(by: searchTerm)
// }
// .refreshable {
// Task.detached {
// await hoarder.refreshDB()
// }
// searchTerm = ""
// }
// } label: {
// Label("Search", systemImage: "magnifyingglass")
// }
Tab("Tree", systemImage: "tree.fill") {
TrieTestingView()
}
Tab(role: .search) {
SearchView()
}
}
.searchable(text: $hoarder.searchTerm, placement: .automatic)
} else {
TabView {
DownloadedView()
.tabItem {
Label("Downloaded", systemImage: "arrow.down.circle.fill")
}
BrowseView()
.tabItem {
Label("Browse", systemImage: "square.grid.2x2.fill")
}
TrieTestingView()
.tabItem {
Label("Trie", systemImage: "tree.fill")
}
SearchView()
.tabItem {
Label("Search", systemImage: "magnifyingglass")
}
}
}
.padding(.horizontal, spacing)
}
.tabItem {
Label("Downloaded", systemImage: "arrow.down.circle.fill")
}
List {
ForEach(hoarder.emojis, id: \.self) { emoji in
EmojiRow(emoji: emoji)
}
}
.tabItem {
Label("Browse", systemImage: "square.grid.2x2.fill")
}
List {
Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
ForEach(hoarder.filteredEmojis, id: \.self) { name in
if let emoji = hoarder.trie.dict[name] {
EmojiRow(emoji: emoji)
}
}
}
.onChange(of: searchTerm) { _ in
hoarder.filterEmojis(by: searchTerm)
}
.refreshable {
Task.detached {
await hoarder.refreshDB()
}
searchTerm = ""
}
.tabItem {
Label("Search", systemImage: "magnifyingglass")
}
TrieTestingView()
.tabItem {
Label("Tree", systemImage: "tree.fill")
}
} detail: {
Text("")
}
.searchable(text: $searchTerm, placement: .automatic)
}
}