This commit is contained in:
Alin
2024-03-16 18:52:24 -06:00
parent 236c678ccb
commit 8dc9ee6cf2
12 changed files with 390 additions and 20 deletions
+6 -8
View File
@@ -7,9 +7,11 @@
import Foundation
import SwiftUI
import ServiceManagement
struct GeneralSettingsTab: View {
@EnvironmentObject var appState: AppState
@EnvironmentObject var locations: Locations
@State private var windowSettings = WindowSettings()
@AppStorage("settings.general.glass") private var glass: Bool = true
@AppStorage("settings.general.mini") private var mini: Bool = false
@@ -26,6 +28,7 @@ struct GeneralSettingsTab: View {
@State private var accessStatus: Bool = false
private let themes = ["Auto", "Dark", "Light"]
@Binding var showPopover: Bool
@Binding var search: String
var body: some View {
Form {
@@ -148,7 +151,7 @@ struct GeneralSettingsTab: View {
.padding(5)
.padding(.leading)
// =========================================================================================================
// === Mini =================================================================================================
Divider()
.padding()
@@ -247,7 +250,7 @@ struct GeneralSettingsTab: View {
.padding(.leading)
// =========================================================================================================
// === Perms ================================================================================================
Divider()
@@ -312,7 +315,7 @@ struct GeneralSettingsTab: View {
.padding(.leading)
// =========================================================================================================
// === Sentinel =============================================================================================
Divider()
.padding()
@@ -362,11 +365,6 @@ struct GeneralSettingsTab: View {
.onAppear {
diskStatus = checkAndRequestFullDiskAccess(appState: appState, skipAlert: true)
accessStatus = checkAndRequestAccessibilityAccess(appState: appState)
// if displayMode.colorScheme == .dark {
// selectedTheme = "Dark"
// } else if displayMode.colorScheme == .light {
// selectedTheme = "Light"
// }
}
}
+112
View File
@@ -0,0 +1,112 @@
//
// MenuBar.swift
// Pearcleaner
//
// Created by Alin Lupascu on 3/16/24.
//
import Foundation
import SwiftUI
import ServiceManagement
struct MenuBarSettingsTab: View {
@EnvironmentObject var appState: AppState
@EnvironmentObject var locations: Locations
@AppStorage("settings.menubar.enabled") private var menubarEnabled: Bool = false
@State private var isLaunchAtLoginEnabled: Bool = false
@Binding var showPopover: Bool
@Binding var search: String
var body: some View {
Form {
VStack {
HStack() {
Text("Configuration").font(.title2)
Spacer()
}
.padding(.leading)
HStack(spacing: 0) {
Image(systemName: "menubar.rectangle")
.resizable()
.scaledToFit()
.frame(width: 20, height: 20)
.padding(.trailing)
.foregroundStyle(.gray)
VStack(alignment: .leading, spacing: 5) {
Text("\(menubarEnabled ? "Menubar icon enabled" : "Menubar icon disabled")")
.font(.callout)
.foregroundStyle(.gray)
}
Spacer()
Toggle(isOn: $menubarEnabled, label: {
})
.toggleStyle(.switch)
.onChange(of: menubarEnabled) { newVal in
if newVal {
MenuBarExtraManager.shared.addMenuBarExtra {
MenuBarMiniAppView(search: $search, showPopover: $showPopover)
.environmentObject(locations)
.environmentObject(appState)
}
} else {
MenuBarExtraManager.shared.removeMenuBarExtra()
}
}
}
.padding(5)
.padding(.leading)
HStack(spacing: 0) {
Image(systemName: isLaunchAtLoginEnabled ? "person.crop.circle.badge.checkmark" : "person.crop.circle")
.resizable()
.scaledToFit()
.frame(width: 20, height: 20)
.padding(.trailing)
.foregroundStyle(.gray)
VStack(alignment: .leading, spacing: 5) {
Text("\(isLaunchAtLoginEnabled ? "Launch at login enabled" : "Launch at login disabled")")
.font(.callout)
.foregroundStyle(.gray)
}
Spacer()
Toggle(isOn: $isLaunchAtLoginEnabled, label: {
})
.toggleStyle(.switch)
.onAppear {
isLaunchAtLoginEnabled = SMAppService.mainApp.status == .enabled
}
.onChange(of: isLaunchAtLoginEnabled) { newValue in
do {
if newValue {
if SMAppService.mainApp.status == .enabled {
try? SMAppService.mainApp.unregister()
}
try SMAppService.mainApp.register()
} else {
try SMAppService.mainApp.unregister()
}
} catch {
printOS("Failed to \(newValue ? "enable" : "disable") launch at login: \(error.localizedDescription)")
}
}
}
.padding(5)
.padding(.leading)
Spacer()
}
}
.padding(20)
.frame(width: 500, height: 690)
}
}
+11 -4
View File
@@ -10,30 +10,37 @@ import SwiftUI
struct SettingsView: View {
@EnvironmentObject var appState: AppState
@Binding var showPopover: Bool
@Binding var search: String
@Binding var showFeature: Bool
@AppStorage("settings.general.glass") private var glass: Bool = true
var body: some View {
TabView() {
GeneralSettingsTab(showPopover: $showPopover)
GeneralSettingsTab(showPopover: $showPopover, search: $search)
.tabItem {
Label(CurrentTabView.general.title, systemImage: "gear")
}
.tag(CurrentTabView.general)
MenuBarSettingsTab(showPopover: $showPopover, search: $search)
.tabItem {
Label(CurrentTabView.menubar.title, systemImage: "menubar.rectangle")
}
.tag(CurrentTabView.menubar)
UpdateSettingsTab(showFeature: $showFeature)
.tabItem {
Label(CurrentTabView.update.title, systemImage: "cloud")
}
.tag(CurrentTabView.update)
AboutSettingsTab()
.tabItem {
Label(CurrentTabView.about.title, systemImage: "info.circle")
}
.tag(CurrentTabView.about)
}
.background(glass ? GlassEffect(material: .sidebar, blendingMode: .behindWindow).edgesIgnoringSafeArea(.all) : nil)