mirror of
https://github.com/AppHouseKitchen/AlDente-Battery_Care_and_Monitoring.git
synced 2026-07-14 08:42:43 +02:00
Apple Silicon Support
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
//
|
||||
// ContentView.swift
|
||||
// AlDente
|
||||
//
|
||||
// Created by David Wernhart on 09.02.20.
|
||||
// Copyright © 2020 David Wernhart. All rights reserved.
|
||||
//
|
||||
|
||||
import LaunchAtLogin
|
||||
import SwiftUI
|
||||
|
||||
private struct BlueButtonStyle: ButtonStyle {
|
||||
func makeBody(configuration: Self.Configuration) -> some View {
|
||||
configuration.label
|
||||
.foregroundColor(configuration.isPressed ? Color.blue : Color.white)
|
||||
.background(configuration.isPressed ? Color.white : Color.blue)
|
||||
.cornerRadius(6.0)
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
|
||||
private struct RedButtonStyle: ButtonStyle {
|
||||
func makeBody(configuration: Self.Configuration) -> some View {
|
||||
configuration.label
|
||||
.foregroundColor(configuration.isPressed ? Color.red : Color.white)
|
||||
.background(configuration.isPressed ? Color.white : Color.red)
|
||||
.cornerRadius(6.0)
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
|
||||
private var allowDischarge = true
|
||||
|
||||
private struct Settings: View {
|
||||
@State private var launchAtLogin = LaunchAtLogin.isEnabled
|
||||
@State private var oldKey = PersistanceManager.instance.oldKey
|
||||
@ObservedObject private var presenter = SMCPresenter.shared
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
Spacer().frame(height: 15)
|
||||
Text(presenter.status)
|
||||
HStack {
|
||||
VStack(alignment: .leading) {
|
||||
Toggle(isOn: Binding(
|
||||
get: { launchAtLogin },
|
||||
|
||||
set: { newValue in
|
||||
launchAtLogin = newValue
|
||||
print("Launch at login turned \(newValue ? "on" : "off")!")
|
||||
LaunchAtLogin.isEnabled = newValue
|
||||
}
|
||||
)) {
|
||||
Text("Launch at login")
|
||||
}
|
||||
|
||||
if(!Helper.instance.appleSilicon!){
|
||||
Toggle(isOn: Binding(
|
||||
get: { oldKey },
|
||||
|
||||
set: { newValue in
|
||||
oldKey = newValue
|
||||
PersistanceManager.instance.oldKey = oldKey
|
||||
PersistanceManager.instance.save()
|
||||
Helper.instance.setStatusString()
|
||||
if(newValue){
|
||||
Helper.instance.enableCharging()
|
||||
Helper.instance.enableSleep()
|
||||
//presenter.writeValue()
|
||||
}
|
||||
else{
|
||||
presenter.setValue(value: 100)
|
||||
}
|
||||
}
|
||||
)) {
|
||||
Text("Use Classic SMC Key (Intel)")
|
||||
}
|
||||
}
|
||||
}.padding()
|
||||
|
||||
Spacer()
|
||||
|
||||
Button(action: {
|
||||
Helper.instance.installHelper()
|
||||
}) {
|
||||
Text("Reinstall Helper")
|
||||
.frame(maxWidth: 120, maxHeight: 30)
|
||||
}.buttonStyle(BlueButtonStyle())
|
||||
}
|
||||
|
||||
HStack {
|
||||
Spacer().frame(width: 15)
|
||||
VStack(alignment: .leading) {
|
||||
let version = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
|
||||
Text("AlDente \(version ?? "") 🍝").font(.headline)
|
||||
|
||||
let address = "github.com/davidwernhart/AlDente"
|
||||
Button(action: {
|
||||
openURL("https://" + address)
|
||||
}) {
|
||||
Text(address).foregroundColor(Color(.linkColor))
|
||||
}.buttonStyle(PlainButtonStyle())
|
||||
|
||||
Text("Cooked up in 2021 by AppHouseKitchen")
|
||||
// Text("AlDente 🍝").font(.title)
|
||||
// Text("Keep your battery just right").font(.subheadline)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
Button(action: {
|
||||
openURL("https://apphousekitchen.com/aldente/")
|
||||
}) {
|
||||
Text("Get Pro 🍜")
|
||||
.frame(maxWidth: 100, maxHeight: 50)
|
||||
}
|
||||
.buttonStyle(BlueButtonStyle())
|
||||
}
|
||||
}
|
||||
.background(Color(.unemphasizedSelectedContentBackgroundColor))
|
||||
.cornerRadius(5)
|
||||
}
|
||||
|
||||
private func openURL(_ string: String) {
|
||||
let url = URL(string: string)!
|
||||
if NSWorkspace.shared.open(url) {
|
||||
print("default browser was successfully opened")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ContentView: View {
|
||||
@State private var adaptableHeight = CGFloat(100)
|
||||
@State private var showSettings = false
|
||||
|
||||
@ObservedObject private var presenter = SMCPresenter.shared
|
||||
|
||||
init() {
|
||||
Helper.instance.delegate = presenter
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
|
||||
HStack {
|
||||
Text("Max. Battery Charge:").padding(.leading)
|
||||
TextField("Number", value: Binding(
|
||||
get: {
|
||||
Float(presenter.value)
|
||||
},
|
||||
set: { newValue in
|
||||
if newValue >= 20 && newValue <= 100 {
|
||||
presenter.setValue(value: newValue)
|
||||
}
|
||||
}
|
||||
), formatter: NumberFormatter())
|
||||
.multilineTextAlignment(.center)
|
||||
.frame(maxWidth: 50)
|
||||
.textFieldStyle(RoundedBorderTextFieldStyle())
|
||||
|
||||
Spacer()
|
||||
|
||||
Button(action: {
|
||||
showSettings.toggle()
|
||||
adaptableHeight = showSettings ? 275 : 100
|
||||
}) {
|
||||
Text("Settings")
|
||||
.frame(maxWidth: 70, maxHeight: 30)
|
||||
}.buttonStyle(BlueButtonStyle()).padding(.leading, -30)
|
||||
|
||||
Button(action: {
|
||||
NSApplication.shared.terminate(self)
|
||||
}) {
|
||||
Text("Quit")
|
||||
.frame(maxWidth: 50, maxHeight: 30)
|
||||
}.buttonStyle(RedButtonStyle()).padding(.leading, -30)
|
||||
}
|
||||
|
||||
Slider(value: Binding(
|
||||
get: {
|
||||
Float(presenter.value)
|
||||
},
|
||||
set: { newValue in
|
||||
if newValue >= 20 && newValue <= 100 {
|
||||
presenter.setValue(value: newValue)
|
||||
}
|
||||
}
|
||||
), in: 20...100).padding(.horizontal).padding(.top, -20)
|
||||
|
||||
Spacer()
|
||||
|
||||
if showSettings {
|
||||
Settings()
|
||||
}
|
||||
|
||||
}.frame(width: 400, height: adaptableHeight)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public final class SMCPresenter: ObservableObject, HelperDelegate {
|
||||
|
||||
static let shared = SMCPresenter()
|
||||
|
||||
@Published var value: UInt8 = 0
|
||||
@Published var status: String = ""
|
||||
private var timer: Timer?
|
||||
private var accuracyTimer: Timer?
|
||||
|
||||
func OnMaxBatRead(value: UInt8) {
|
||||
if(PersistanceManager.instance.oldKey){
|
||||
DispatchQueue.main.async {
|
||||
self.value = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateStatus(status:String){
|
||||
DispatchQueue.main.async {
|
||||
self.status = status
|
||||
}
|
||||
}
|
||||
|
||||
public func loadValue(){
|
||||
PersistanceManager.instance.load()
|
||||
self.value = UInt8(PersistanceManager.instance.chargeVal!)
|
||||
if(self.value == 0){
|
||||
self.value = 50
|
||||
}
|
||||
print("loaded max charge val: ",self.value," old key:",PersistanceManager.instance.oldKey)
|
||||
// if(!Helper.instance.appleSilicon!){
|
||||
// Helper.instance.getSMCCharge(withReply: { (smcval) in
|
||||
// self.value = UInt8(smcval)
|
||||
// })
|
||||
// }
|
||||
if(PersistanceManager.instance.oldKey){
|
||||
writeValue()
|
||||
}
|
||||
}
|
||||
|
||||
func setValue(value: Float) {
|
||||
DispatchQueue.main.async {
|
||||
self.value = UInt8(value)
|
||||
PersistanceManager.instance.chargeVal = Int(value)
|
||||
PersistanceManager.instance.save()
|
||||
self.writeValue()
|
||||
}
|
||||
timer?.invalidate()
|
||||
accuracyTimer?.invalidate()
|
||||
}
|
||||
|
||||
func writeValue(){
|
||||
if(PersistanceManager.instance.oldKey){
|
||||
print("should write bclm value: ", self.value)
|
||||
Helper.instance.writeMaxBatteryCharge(setVal: self.value)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user