Remap buttons mutual exclusivity

This commit is contained in:
Hariharan Mudaliar 2025-11-18 02:56:07 +05:30
commit 9d4c99e713
3 changed files with 73 additions and 8 deletions

View file

@ -230,8 +230,15 @@ enum MusicAuxiliaryControl: String, CaseIterable, Identifiable, Defaults.Seriali
}
}
static func alternative(excluding control: MusicAuxiliaryControl) -> MusicAuxiliaryControl {
allCases.first { $0 != control } ?? .shuffle
static func alternative(
excluding control: MusicAuxiliaryControl,
preferring candidate: MusicAuxiliaryControl? = nil
) -> MusicAuxiliaryControl {
if let candidate, candidate != control {
return candidate
}
return allCases.first { $0 != control } ?? .shuffle
}
}
@ -596,12 +603,22 @@ extension Defaults.Keys {
}
static func migrateMusicAuxControls() {
guard Defaults[.didMigrateMusicAuxControls] == false else { return }
if Defaults[.didMigrateMusicAuxControls] == false {
if Defaults[.showMediaOutputControl] {
Defaults[.musicAuxRightControl] = .mediaOutput
}
if Defaults[.showMediaOutputControl] {
Defaults[.musicAuxRightControl] = .mediaOutput
Defaults[.didMigrateMusicAuxControls] = true
}
Defaults[.didMigrateMusicAuxControls] = true
normalizeMusicAuxControls()
}
private static func normalizeMusicAuxControls() {
guard Defaults[.musicAuxLeftControl] == Defaults[.musicAuxRightControl] else { return }
let current = Defaults[.musicAuxLeftControl]
let fallback = MusicAuxiliaryControl.alternative(excluding: current)
Defaults[.musicAuxRightControl] = fallback
}
}