quicksettings: Move all quick settings to kpackage

This commit is contained in:
Devin Lin 2022-03-13 17:47:42 -04:00
parent 140ca990bf
commit 9941c23752
29 changed files with 408 additions and 163 deletions

View file

@ -43,6 +43,11 @@ Item {
property: "inSwipe"
value: drawer.dragging
}
Binding {
target: MobileShell.TopPanelControls
property: "actionDrawerVisible"
value: drawer.visible
}
Connections {
target: MobileShell.TopPanelControls
@ -56,6 +61,12 @@ Item {
function onRequestRelativeScroll(offsetY) {
swipeArea.updateOffset(offsetY);
}
function onCloseActionDrawer() {
drawer.close();
}
function onOpenActionDrawer() {
drawer.open();
}
}
//END API implementation

View file

@ -18,6 +18,9 @@ QtObject {
signal startSwipe()
signal endSwipe()
signal requestRelativeScroll(real offsetY)
signal closeActionDrawer()
signal openActionDrawer()
property bool inSwipe: false
property real panelHeight: PlasmaCore.Units.gridUnit // set and updated in panel containment
property bool actionDrawerVisible: false
}

View file

@ -11,6 +11,7 @@ import QtQuick.Layouts 1.1
import QtQuick.Window 2.2
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
import "../../components" as Components
import "../../components/util.js" as Util
@ -39,9 +40,7 @@ Item {
property real minimizedViewProgress: 0
property real fullViewProgress: 1
readonly property SettingsModel quickSettingsModel: SettingsModel {
actionDrawer: root.actionDrawer
}
readonly property var quickSettingsModel: MobileShell.QuickSettingsModel {}
// view when fully open
ColumnLayout {

View file

@ -1,154 +0,0 @@
/*
* SPDX-FileCopyrightText: 2015 Marco Martin <notmart@gmail.com>
* SPDX-FileCopyrightText: 2021 Devin Lin <devin@kde.org>
* SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org>
*
* SPDX-License-Identifier: LGPL-2.0-or-later
*/
import QtQuick 2.14
import QtQuick.Layouts 1.1
import QtQuick.Window 2.2
import org.kde.bluezqt 1.0 as BluezQt
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.networkmanagement 0.2 as PlasmaNM
import org.kde.plasma.mm 1.0 as PlasmaMM
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSettingsModel {
id: root
required property var actionDrawer
property bool screenshotRequested: false
MobileShell.QuickSetting {
text: i18n("Settings")
status: i18n("Tap to open")
icon: "configure"
enabled: false
settingsCommand: "plasma-open-settings"
}
MobileShell.QuickSetting {
PlasmaNM.Handler {
id: nmHandler
}
PlasmaNM.EnabledConnections {
id: enabledConnections
}
text: i18n("Wi-Fi")
icon: "network-wireless-signal"
settingsCommand: "plasma-open-settings kcm_mobile_wifi"
function toggle() {
nmHandler.enableWireless(!enabledConnections.wirelessEnabled)
}
enabled: enabledConnections.wirelessEnabled
}
MobileShell.QuickSetting {
text: i18n("Bluetooth")
icon: "network-bluetooth"
settingsCommand: "plasma-open-settings kcm_bluetooth"
function toggle() {
var enable = !BluezQt.Manager.bluetoothOperational;
BluezQt.Manager.bluetoothBlocked = !enable;
for (var i = 0; i < BluezQt.Manager.adapters.length; ++i) {
var adapter = BluezQt.Manager.adapters[i];
adapter.powered = enable;
}
}
enabled: BluezQt.Manager.bluetoothOperational
}
MobileShell.QuickSetting {
text: i18n("Mobile Data")
icon: "network-modem"
status: PlasmaMM.SignalIndicator.mobileDataSupported
? (enabled ? i18n("On") : i18n("Off"))
: i18n("Not Available")
settingsCommand: "plasma-open-settings kcm_mobile_broadband"
enabled: PlasmaMM.SignalIndicator.mobileDataEnabled
function toggle() {
PlasmaMM.SignalIndicator.mobileDataEnabled = !PlasmaMM.SignalIndicator.mobileDataEnabled
}
}
MobileShell.QuickSetting {
text: i18n("Flashlight")
icon: "flashlight-on"
enabled: MobileShell.ShellUtil.torchEnabled
function toggle() {
MobileShell.ShellUtil.toggleTorch()
}
}
MobileShell.QuickSetting {
text: i18n("Location")
icon: "gps"
enabled: false
}
MobileShell.QuickSetting {
text: i18n("Screenshot")
status: i18n("Tap to screenshot")
icon: "spectacle"
enabled: false
function toggle() {
root.screenshotRequested = true;
root.actionDrawer.close();
}
Connections {
target: root.actionDrawer
function onVisibleChanged(visible) {
if (!visible && screenshotRequested) {
timer.restart();
root.screenshotRequested = false
}
}
}
// HACK: KWin's fade effect may have the window ending up being in the screenshot if taken too fast
Timer {
id: timer
interval: 500
onTriggered: MobileShell.ShellUtil.takeScreenshot()
}
}
MobileShell.QuickSetting {
text: i18n("Auto-rotate")
icon: "rotation-allowed"
settingsCommand: "plasma-open-settings kcm_kscreen"
enabled: MobileShell.ShellUtil.autoRotateEnabled
function toggle() {
MobileShell.ShellUtil.autoRotateEnabled = !enabled
}
}
MobileShell.QuickSetting {
text: i18n("Battery")
status: i18n("%1%", MobileShell.BatteryProvider.percent)
icon: "battery-full" + (MobileShell.BatteryProvider.pluggedIn ? "-charging" : "")
enabled: false
settingsCommand: "plasma-open-settings kcm_mobile_power"
}
MobileShell.QuickSetting {
text: i18n("Sound")
icon: "audio-speakers-symbolic"
status: i18n("%1%", MobileShell.VolumeProvider.volumeValue)
enabled: false
settingsCommand: "plasma-open-settings kcm_pulseaudio"
function toggle() {
volumeProvider.showVolumeOverlay()
}
}
}

View file

@ -13,7 +13,6 @@
<file>qml/actiondrawer/quicksettings/QuickSettingsFullDelegate.qml</file>
<file>qml/actiondrawer/quicksettings/QuickSettingsMinimizedDelegate.qml</file>
<file>qml/actiondrawer/quicksettings/QuickSettingsPanel.qml</file>
<file>qml/actiondrawer/quicksettings/SettingsModel.qml</file>
<file>qml/actiondrawer/ActionDrawer.qml</file>
<file>qml/actiondrawer/ActionDrawerOpenSurface.qml</file>

View file

@ -19,7 +19,7 @@ class MOBILESHELL_EXPORT QuickSetting : public QObject
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText REQUIRED NOTIFY textChanged)
Q_PROPERTY(QString status READ status WRITE setStatus REQUIRED NOTIFY statusChanged) // if no status is explicitly set, On/Off is used by default
Q_PROPERTY(QString status READ status WRITE setStatus NOTIFY statusChanged) // if no status is explicitly set, On/Off is used by default
Q_PROPERTY(QString icon READ iconName WRITE setIconName REQUIRED NOTIFY iconNameChanged)
Q_PROPERTY(QString settingsCommand READ settingsCommand WRITE setSettingsCommand NOTIFY settingsCommandChanged)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)

View file

@ -58,22 +58,31 @@ void QuickSettingsModel::classBegin()
const auto packages = KPackage::PackageLoader::self()->listPackages(QStringLiteral("KPackage/GenericQML"), "plasma/quicksettings");
auto c = new QQmlComponent(engine, this);
for (const auto &metaData : packages) {
KPackage::Package package = KPackage::PackageLoader::self()->loadPackage("KPackage/GenericQML", QFileInfo(metaData.fileName()).path());
if (!package.isValid()) {
qWarning() << "Could not load" << metaData.fileName();
qWarning() << "Quick setting package invalid:" << metaData.fileName();
continue;
}
c->loadUrl(package.fileUrl("mainscript"), QQmlComponent::PreferSynchronous);
auto created = c->create(engine->rootContext());
auto createdSetting = qobject_cast<QuickSetting *>(created);
if (!createdSetting) {
qWarning() << "Could not load" << metaData.fileName() << created;
if (c->isError()) {
for (const auto &error : c->errors()) {
qDebug() << error;
}
}
delete created;
continue;
} else {
qDebug() << "Loaded quicksetting" << metaData.fileName();
m_external += createdSetting;
}
m_external += createdSetting;
}
delete c;
}

View file

@ -2,7 +2,17 @@
# SPDX-License-Identifier: GPL-2.0-or-later
plasma_install_package(airplanemode org.kde.plasma.airplanemode quicksettings)
plasma_install_package(audio org.kde.plasma.audio quicksettings)
plasma_install_package(battery org.kde.plasma.battery quicksettings)
plasma_install_package(bluetooth org.kde.plasma.bluetooth quicksettings)
plasma_install_package(caffeine org.kde.plasma.caffeine quicksettings)
plasma_install_package(flashlight org.kde.plasma.flashlight quicksettings)
plasma_install_package(keyboardtoggle org.kde.plasma.keyboardtoggle quicksettings)
plasma_install_package(location org.kde.plasma.location quicksettings)
plasma_install_package(mobiledata org.kde.plasma.mobiledata quicksettings)
plasma_install_package(screenrotation org.kde.plasma.screenrotation quicksettings)
plasma_install_package(screenshot org.kde.plasma.screenshot quicksettings)
plasma_install_package(settingsapp org.kde.plasma.settingsapp quicksettings)
plasma_install_package(wifi org.kde.plasma.wifi quicksettings)
add_subdirectory(nightcolor)
add_subdirectory(powermenu)

View file

@ -34,6 +34,7 @@ Name[uk]=Режим польоту
Name[x-test]=xxAirplane Modexx
Name[zh_CN]=
Icon=network-flightmode-on
Description=Airplane mode quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
@ -43,5 +44,5 @@ X-KDE-PluginInfo-Email=bshah@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.airplanemode
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,17 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Sound")
icon: "audio-speakers-symbolic"
status: i18n("%1%", MobileShell.VolumeProvider.volumeValue)
enabled: false
settingsCommand: "plasma-open-settings kcm_pulseaudio"
function toggle() {
MobileShell.VolumeProvider.showVolumeOverlay()
}
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Audio
Icon=audio-speakers-symbolic
Description=Audio quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.audio
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,14 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Battery")
status: i18n("%1%", MobileShell.BatteryProvider.percent)
icon: "battery-full" + (MobileShell.BatteryProvider.pluggedIn ? "-charging" : "")
enabled: false
settingsCommand: "plasma-open-settings kcm_mobile_power"
}

View file

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Battery
Icon=battery-full
Description=Battery quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.battery
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,23 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.bluezqt 1.0 as BluezQt
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Bluetooth")
icon: "network-bluetooth"
settingsCommand: "plasma-open-settings kcm_bluetooth"
function toggle() {
var enable = !BluezQt.Manager.bluetoothOperational;
BluezQt.Manager.bluetoothBlocked = !enable;
for (var i = 0; i < BluezQt.Manager.adapters.length; ++i) {
var adapter = BluezQt.Manager.adapters[i];
adapter.powered = enable;
}
}
enabled: BluezQt.Manager.bluetoothOperational
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Bluetooth
Icon=network-bluetooth
Description=Bluetooth quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.bluetooth
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,15 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Flashlight")
icon: "flashlight-on"
enabled: MobileShell.ShellUtil.torchEnabled
function toggle() {
MobileShell.ShellUtil.toggleTorch()
}
}

View file

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Flashlight
Icon=flashlight-on
Description=Flashlight quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.flashlight
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,12 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Location")
icon: "gps"
enabled: false
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Location
Icon=gps
Description=Location quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.location
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,20 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.mm 1.0 as PlasmaMM
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Mobile Data")
icon: "network-modem"
status: PlasmaMM.SignalIndicator.mobileDataSupported
? (enabled ? i18n("On") : i18n("Off"))
: i18n("Not Available")
settingsCommand: "plasma-open-settings kcm_mobile_broadband"
enabled: PlasmaMM.SignalIndicator.mobileDataEnabled
function toggle() {
PlasmaMM.SignalIndicator.mobileDataEnabled = !PlasmaMM.SignalIndicator.mobileDataEnabled
}
}

View file

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Mobile Data
Icon=flashlight-on
Description=Location quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.mobiledata
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,16 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Auto-rotate")
icon: "rotation-allowed"
settingsCommand: "plasma-open-settings kcm_kscreen"
enabled: MobileShell.ShellUtil.autoRotateEnabled
function toggle() {
MobileShell.ShellUtil.autoRotateEnabled = !enabled
}
}

View file

@ -0,0 +1,18 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Screen rotation
Icon=rotation-allowed
Description=Screen rotation quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.screenrotation
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,37 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Screenshot")
status: i18n("Tap to screenshot")
icon: "spectacle"
enabled: false
property bool screenshotRequested: false
function toggle() {
screenshotRequested = true;
MobileShell.TopPanelControls.closeActionDrawer();
}
Connections {
target: MobileShell.TopPanelControls
function onActionDrawerVisibleChanged(visible) {
if (!visible && screenshotRequested) {
screenshotRequested = false;
timer.restart();
}
}
}
// HACK: KWin's fade effect may have the window ending up being in the screenshot if taken too fast
Timer {
id: timer
interval: 500
onTriggered: MobileShell.ShellUtil.takeScreenshot()
}
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Screenshot
Icon=spectacle
Description=Screenshot quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.screenshot
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,14 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
text: i18n("Settings")
status: i18n("Tap to open")
icon: "configure"
enabled: false
settingsCommand: "plasma-open-settings"
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Settings
Icon=spectacle
Description=Settings application quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.settingsapp
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+

View file

@ -0,0 +1,25 @@
// SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick 2.15
import org.kde.plasma.networkmanagement 0.2 as PlasmaNM
import org.kde.plasma.private.mobileshell 1.0 as MobileShell
MobileShell.QuickSetting {
PlasmaNM.Handler {
id: nmHandler
}
PlasmaNM.EnabledConnections {
id: enabledConnections
}
text: i18n("Wi-Fi")
icon: "network-wireless-signal"
settingsCommand: "plasma-open-settings kcm_mobile_wifi"
function toggle() {
nmHandler.enableWireless(!enabledConnections.wirelessEnabled)
}
enabled: enabledConnections.wirelessEnabled
}

View file

@ -0,0 +1,17 @@
# SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
# SPDX-License-Identifier: GPL-2.0-or-later
[Desktop Entry]
Name=Wi-Fi
Icon=flashlight-on
Description=Wi-Fi quick setting
Type=Service
X-KDE-ServiceTypes=KPackage/GenericQML
X-KDE-PluginInfo-Author=Devin Lin
X-KDE-PluginInfo-Email=devin@kde.org
X-KDE-PluginInfo-Name=org.kde.plasma.wifi
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=https://kde.org
X-KDE-PluginInfo-License=GPL-2.0+