1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-26 14:32:52 -05:00

audio: add IPC & OSD for changing output audio device

fixes #754
This commit is contained in:
bbedward
2025-12-03 20:47:57 -05:00
parent 62bd6e41ef
commit 6c7776a9a6
7 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,80 @@
import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
DankOSD {
id: root
property string deviceName: ""
property string deviceIcon: "speaker"
osdWidth: Math.min(Math.max(120, Theme.iconSize + textMetrics.width + Theme.spacingS * 4), Screen.width - Theme.spacingM * 2)
osdHeight: 40 + Theme.spacingS * 2
autoHideInterval: 2500
enableMouseInteraction: false
TextMetrics {
id: textMetrics
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
font.family: Theme.fontFamily
text: root.deviceName
}
function getIconForSink(sink) {
if (!sink)
return "speaker";
const name = sink.name || "";
if (name.includes("bluez"))
return "headset";
if (name.includes("hdmi"))
return "tv";
if (name.includes("usb"))
return "headset";
return "speaker";
}
Connections {
target: AudioService
function onAudioOutputCycled(name) {
if (!SettingsData.osdAudioOutputEnabled)
return;
root.deviceName = name;
root.deviceIcon = getIconForSink(AudioService.sink);
root.show();
}
}
content: Item {
property int gap: Theme.spacingS
anchors.centerIn: parent
width: parent.width - Theme.spacingS * 2
height: 40
DankIcon {
id: iconItem
width: Theme.iconSize
height: Theme.iconSize
x: parent.gap
anchors.verticalCenter: parent.verticalCenter
name: root.deviceIcon
size: Theme.iconSize
color: Theme.primary
}
StyledText {
id: textItem
x: parent.gap * 2 + Theme.iconSize
width: parent.width - Theme.iconSize - parent.gap * 3
anchors.verticalCenter: parent.verticalCenter
text: root.deviceName
font.pixelSize: Theme.fontSizeMedium
font.weight: Font.Medium
color: Theme.surfaceText
elide: Text.ElideRight
}
}
}

View File

@@ -141,6 +141,13 @@ Item {
checked: SettingsData.osdPowerProfileEnabled
onToggled: checked => SettingsData.set("osdPowerProfileEnabled", checked)
}
SettingsToggleRow {
text: I18n.tr("Audio Output Switch")
description: I18n.tr("Show on-screen display when cycling audio output devices")
checked: SettingsData.osdAudioOutputEnabled
onToggled: checked => SettingsData.set("osdAudioOutputEnabled", checked)
}
}
}
}