quicksettings/audio: Fix displayed volume fetching

Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/422

This commit simplifies the AudioInfo data provider to fetch the volume
directly, rather than relying on a series of complicated connections. It
also does some cleanup of AudioInfo, removing unused functions.
This commit is contained in:
Devin Lin 2025-09-13 19:39:51 -04:00
parent 0e09a434ef
commit 082323baa8
2 changed files with 7 additions and 70 deletions

View file

@ -32,57 +32,13 @@ QtObject {
// the maximum volume amount
readonly property int maxVolumeValue: maxVolumePercent * PulseAudio.NormalVolume / 100
// step that increments when adjusting the volume
readonly property int volumeStep: Math.round(5 * PulseAudio.NormalVolume / 100.0)
// The current audio volume (updated by connecting to sinks)
property int volumeValue
readonly property int volumeValue: PreferredDevice.sink ? (PreferredDevice.sink.volume / PulseAudio.NormalVolume) * 100 : 0
function isDummyOutput(output) {
return output && output.name === dummyOutputName;
}
function boundVolume(volume) {
return Math.max(PulseAudio.MinimalVolume, Math.min(volume, maxVolumeValue));
}
function volumePercent(volume, max){
if (!max) {
max = PulseAudio.NormalVolume;
}
return Math.round(volume / max * maxVolumePercent);
}
function increaseVolume() {
if (!PreferredDevice.sink || isDummyOutput(PreferredDevice.sink)) {
return;
}
var volume = boundVolume(PreferredDevice.sink.volume + volumeStep);
var percent = volumePercent(volume, maxVolumeValue);
PreferredDevice.sink.muted = percent == 0;
PreferredDevice.sink.volume = volume;
}
function decreaseVolume() {
if (!PreferredDevice.sink || isDummyOutput(PreferredDevice.sink)) {
return;
}
var volume = boundVolume(PreferredDevice.sink.volume - volumeStep);
var percent = volumePercent(volume, maxVolumeValue);
PreferredDevice.sink.muted = percent == 0;
PreferredDevice.sink.volume = volume;
}
function muteVolume() {
if (!PreferredDevice.sink || isDummyOutput(PreferredDevice.sink)) {
return;
}
PreferredDevice.sink.muted = !PreferredDevice.sink.muted;
}
function iconName(volume, muted, prefix) {
if (!prefix) {
prefix = "audio-volume";
@ -100,28 +56,4 @@ QtObject {
}
return icon;
}
property var updateVolume: Connections {
target: root.paSinkModel ? (PreferredDevice.sink ? PreferredDevice.sink : null) : null
enabled: target !== null
function onVolumeChanged() {
root.volumeValue = root.volumePercent(PreferredDevice.sink.volume, root.maxVolumeValue);
}
function onMutedChanged() {
root.volumeValue = PreferredDevice.sink.muted ? 0 : root.volumePercent(PreferredDevice.sink.volume, root.maxVolumeValue);
}
}
property var updateVolumeOnSinkChange: Connections {
target: root.paSinkModel ? root.paSinkModel : null
enabled: target !== null
function onPreferredSinkChanged() {
if (PreferredDevice.sink) {
root.volumeValue = root.volumePercent(PreferredDevice.sink.volume, root.maxVolumeValue);
}
}
}
}

View file

@ -10,7 +10,12 @@ import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
QS.QuickSetting {
text: i18n("Sound")
icon: MobileShell.AudioInfo.icon
status: i18n("%1%", MobileShell.AudioInfo.volumeValue)
status: {
if (!MobileShell.AudioInfo.isVisible) {
return i18n("No audio devices");
}
return i18n("%1%", MobileShell.AudioInfo.volumeValue);
}
enabled: false
settingsCommand: "plasma-open-settings kcm_pulseaudio"