Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configurable power up actions #16

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 48 additions & 2 deletions Bluesnooze/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,23 +10,66 @@ import Cocoa
import IOBluetooth
import LaunchAtLogin

let onPowerUpActionKey = "onPowerUpAction"

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

@IBOutlet weak var statusMenu: NSMenu!
@IBOutlet weak var onPowerUpActionRemember: NSMenuItem!
@IBOutlet weak var onPowerUpActionAlways: NSMenuItem!
@IBOutlet weak var onPowerUpActionNever: NSMenuItem!
@IBOutlet weak var launchAtLoginMenuItem: NSMenuItem!

private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
private var prevState: Int32 = IOBluetoothPreferenceGetControllerPowerState()
private var onPowerUpAction: String = "remember"

func applicationDidFinishLaunching(_ aNotification: Notification) {
initStatusItem()
setLaunchAtLoginState()
setupNotificationHandlers()
setBluetooth(powerOn: true)
UserDefaults.standard.register(defaults: [
onPowerUpActionKey: "remember",
])
if let action = UserDefaults.standard.string(forKey: onPowerUpActionKey) {
onPowerUpAction = action
}
if onPowerUpAction == "remember" {
onPowerUpActionRemember.state = NSControl.StateValue.on
} else if onPowerUpAction == "always" {
onPowerUpActionAlways.state = NSControl.StateValue.on
} else if onPowerUpAction == "never" {
onPowerUpActionNever.state = NSControl.StateValue.on
}
}

// MARK: Click handlers

@IBAction func onPowerUpActionRememberClicked(_ sender: NSMenuItem) {
onPowerUpAction = "remember"
UserDefaults.standard.set(onPowerUpAction, forKey: onPowerUpActionKey)
onPowerUpActionRemember.state = NSControl.StateValue.on
onPowerUpActionAlways.state = NSControl.StateValue.off
onPowerUpActionNever.state = NSControl.StateValue.off
}

@IBAction func onPowerUpActionAlwaysClicked(_ sender: NSMenuItem) {
onPowerUpAction = "always"
UserDefaults.standard.set(onPowerUpAction, forKey: onPowerUpActionKey)
onPowerUpActionRemember.state = NSControl.StateValue.off
onPowerUpActionAlways.state = NSControl.StateValue.on
onPowerUpActionNever.state = NSControl.StateValue.off
}

@IBAction func onPowerUpActionNeverClicked(_ sender: NSMenuItem) {
onPowerUpAction = "never"
UserDefaults.standard.set(onPowerUpAction, forKey: onPowerUpActionKey)
onPowerUpActionRemember.state = NSControl.StateValue.off
onPowerUpActionAlways.state = NSControl.StateValue.off
onPowerUpActionNever.state = NSControl.StateValue.on
}

@IBAction func launchAtLoginClicked(_ sender: NSMenuItem) {
LaunchAtLogin.isEnabled = !LaunchAtLogin.isEnabled
setLaunchAtLoginState()
Expand Down Expand Up @@ -54,11 +97,14 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}

@objc func onPowerDown(note: NSNotification) {
prevState = IOBluetoothPreferenceGetControllerPowerState()
setBluetooth(powerOn: false)
}

@objc func onPowerUp(note: NSNotification) {
setBluetooth(powerOn: true)
if (onPowerUpAction == "remember" && prevState != 0) || onPowerUpAction == "always" {
setBluetooth(powerOn: true)
}
}

private func setBluetooth(powerOn: Bool) {
Expand Down
40 changes: 34 additions & 6 deletions Bluesnooze/Base.lproj/MainMenu.xib
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="20037" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17701"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="20037"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
Expand All @@ -14,14 +14,42 @@
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Bluesnooze" customModuleProvider="target">
<connections>
<outlet property="onPowerUpActionRemember" destination="mBz-mB-SAw" id="dpV-qb-pVO"/>
<outlet property="onPowerUpActionAlways" destination="k9U-YJ-Qra" id="iPK-GH-kd9"/>
<outlet property="onPowerUpActionNever" destination="wwz-8o-dOW" id="kwY-c8-qPz"/>
<outlet property="launchAtLoginMenuItem" destination="I9E-pI-lLm" id="DFX-bS-N3m"/>
<outlet property="statusMenu" destination="AEO-aA-1fp" id="ueI-UR-7ba"/>
</connections>
</customObject>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<menu id="AEO-aA-1fp">
<items>
<menuItem title="Launch at login" id="I9E-pI-lLm" userLabel="Launch At Login Menu Item">
<menuItem title="Start Bluetooth on wake" id="MrC-mk-c9a" userLabel="Start Bluetooth on wake">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Start Bluetooth on wake" id="6db-i4-kn8">
<items>
<menuItem title="Remember previous state" id="mBz-mB-SAw">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="onPowerUpActionRememberClicked:" target="Voe-Tx-rLC" id="eue-OR-a53"/>
</connections>
</menuItem>
<menuItem title="Always" id="k9U-YJ-Qra">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="onPowerUpActionAlwaysClicked:" target="Voe-Tx-rLC" id="CZN-qU-PVs"/>
</connections>
</menuItem>
<menuItem title="Never" id="wwz-8o-dOW">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="onPowerUpActionNeverClicked:" target="Voe-Tx-rLC" id="Gg5-n6-rUW"/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Launch at login" id="I9E-pI-lLm">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="launchAtLoginClicked:" target="Voe-Tx-rLC" id="ooK-DW-6Kn"/>
Expand All @@ -33,14 +61,14 @@
<action selector="hideIconClicked:" target="Voe-Tx-rLC" id="rZI-1a-Hhe"/>
</connections>
</menuItem>
<menuItem title="Quit" id="0IH-xa-Tvk">
<modifierMask key="keyEquivalentModifierMask"/>
<menuItem isSeparatorItem="YES" id="lFK-Uh-kIG"/>
<menuItem title="Quit" keyEquivalent="q" id="0IH-xa-Tvk">
<connections>
<action selector="quitClicked:" target="Voe-Tx-rLC" id="nzv-74-hhE"/>
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="-64.5" y="68"/>
<point key="canvasLocation" x="-64.5" y="56.5"/>
</menu>
</objects>
</document>
1 change: 1 addition & 0 deletions Bluesnooze/Bluesnooze-Bridging-Header.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
//

void IOBluetoothPreferenceSetControllerPowerState(int);
int IOBluetoothPreferenceGetControllerPowerState();