File indexing completed on 2024-04-28 16:52:24

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "mobileshellsettings.h"
0008 
0009 #include <QDebug>
0010 
0011 const QString CONFIG_FILE = QStringLiteral("plasmamobilerc");
0012 const QString GENERAL_CONFIG_GROUP = QStringLiteral("General");
0013 const QString QUICKSETTINGS_CONFIG_GROUP = QStringLiteral("QuickSettings");
0014 
0015 MobileShellSettings *MobileShellSettings::self()
0016 {
0017     static MobileShellSettings *singleton = new MobileShellSettings();
0018     return singleton;
0019 }
0020 
0021 MobileShellSettings::MobileShellSettings(QObject *parent)
0022     : QObject{parent}
0023     , m_config{KSharedConfig::openConfig(CONFIG_FILE, KConfig::SimpleConfig)}
0024 {
0025     m_configWatcher = KConfigWatcher::create(m_config);
0026 
0027     connect(m_configWatcher.data(), &KConfigWatcher::configChanged, this, [this](const KConfigGroup &group, const QByteArrayList &names) -> void {
0028         if (group.name() == GENERAL_CONFIG_GROUP) {
0029             Q_EMIT vibrationsEnabledChanged();
0030             Q_EMIT vibrationIntensityChanged();
0031             Q_EMIT vibrationDurationChanged();
0032             Q_EMIT animationsEnabledChanged();
0033             Q_EMIT navigationPanelEnabledChanged();
0034             Q_EMIT keyboardButtonEnabledChanged();
0035             Q_EMIT taskSwitcherPreviewsEnabledChanged();
0036             Q_EMIT actionDrawerTopLeftModeChanged();
0037             Q_EMIT actionDrawerTopRightModeChanged();
0038         } else if (group.name() == QUICKSETTINGS_CONFIG_GROUP) {
0039             Q_EMIT enabledQuickSettingsChanged();
0040             Q_EMIT disabledQuickSettingsChanged();
0041         }
0042     });
0043 }
0044 
0045 bool MobileShellSettings::vibrationsEnabled() const
0046 {
0047     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0048     return group.readEntry("vibrationsEnabled", true);
0049 }
0050 
0051 void MobileShellSettings::setVibrationsEnabled(bool vibrationsEnabled)
0052 {
0053     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0054     group.writeEntry("vibrationsEnabled", vibrationsEnabled, KConfigGroup::Notify);
0055     m_config->sync();
0056 }
0057 
0058 int MobileShellSettings::vibrationDuration() const
0059 {
0060     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0061     return group.readEntry("vibrationDuration", 100);
0062 }
0063 
0064 void MobileShellSettings::setVibrationDuration(int vibrationDuration)
0065 {
0066     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0067     group.writeEntry("vibrationDuration", vibrationDuration, KConfigGroup::Notify);
0068     m_config->sync();
0069 }
0070 
0071 qreal MobileShellSettings::vibrationIntensity() const
0072 {
0073     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0074     return group.readEntry("vibrationIntensity", 0.5);
0075 }
0076 
0077 void MobileShellSettings::setVibrationIntensity(qreal vibrationIntensity)
0078 {
0079     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0080     group.writeEntry("vibrationIntensity", vibrationIntensity, KConfigGroup::Notify);
0081     m_config->sync();
0082 }
0083 
0084 bool MobileShellSettings::animationsEnabled() const
0085 {
0086     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0087     return group.readEntry("animationsEnabled", true);
0088 }
0089 
0090 void MobileShellSettings::setAnimationsEnabled(bool animationsEnabled)
0091 {
0092     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0093     group.writeEntry("animationsEnabled", animationsEnabled, KConfigGroup::Notify);
0094     m_config->sync();
0095 }
0096 
0097 bool MobileShellSettings::navigationPanelEnabled() const
0098 {
0099     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0100     return group.readEntry("navigationPanelEnabled", true);
0101 }
0102 
0103 void MobileShellSettings::setNavigationPanelEnabled(bool navigationPanelEnabled)
0104 {
0105     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0106     group.writeEntry("navigationPanelEnabled", navigationPanelEnabled, KConfigGroup::Notify);
0107     m_config->sync();
0108 }
0109 
0110 bool MobileShellSettings::taskSwitcherPreviewsEnabled() const
0111 {
0112     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0113     return group.readEntry("taskSwitcherPreviewsEnabled", true);
0114 }
0115 
0116 void MobileShellSettings::setTaskSwitcherPreviewsEnabled(bool taskSwitcherPreviewsEnabled)
0117 {
0118     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0119     group.writeEntry("taskSwitcherPreviewsEnabled", taskSwitcherPreviewsEnabled, KConfigGroup::Notify);
0120     m_config->sync();
0121 }
0122 
0123 MobileShellSettings::ActionDrawerMode MobileShellSettings::actionDrawerTopLeftMode() const
0124 {
0125     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0126     return (ActionDrawerMode)group.readEntry("actionDrawerTopLeftMode", (int)ActionDrawerMode::Pinned);
0127 }
0128 
0129 void MobileShellSettings::setActionDrawerTopLeftMode(ActionDrawerMode actionDrawerMode)
0130 {
0131     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0132     group.writeEntry("actionDrawerTopLeftMode", (int)actionDrawerMode, KConfigGroup::Notify);
0133     m_config->sync();
0134 }
0135 
0136 MobileShellSettings::ActionDrawerMode MobileShellSettings::actionDrawerTopRightMode() const
0137 {
0138     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0139     return (ActionDrawerMode)group.readEntry("actionDrawerTopRightMode", (int)ActionDrawerMode::Expanded);
0140 }
0141 
0142 void MobileShellSettings::setActionDrawerTopRightMode(ActionDrawerMode actionDrawerMode)
0143 {
0144     auto group = KConfigGroup{m_config, GENERAL_CONFIG_GROUP};
0145     group.writeEntry("actionDrawerTopRightMode", (int)actionDrawerMode, KConfigGroup::Notify);
0146     m_config->sync();
0147 }
0148 
0149 QList<QString> MobileShellSettings::enabledQuickSettings() const
0150 {
0151     auto group = KConfigGroup{m_config, QUICKSETTINGS_CONFIG_GROUP};
0152     // TODO move defaults to file
0153     // we aren't worried about quicksettings not showing up though, any that are not specified will be automatically added to the end
0154     return group.readEntry("enabledQuickSettings",
0155                            QList<QString>{QStringLiteral("org.kde.plasma.quicksetting.wifi"),
0156                                           QStringLiteral("org.kde.plasma.quicksetting.mobiledata"),
0157                                           QStringLiteral("org.kde.plasma.quicksetting.bluetooth"),
0158                                           QStringLiteral("org.kde.plasma.quicksetting.flashlight"),
0159                                           QStringLiteral("org.kde.plasma.quicksetting.screenrotation"),
0160                                           QStringLiteral("org.kde.plasma.quicksetting.settingsapp"),
0161                                           QStringLiteral("org.kde.plasma.quicksetting.airplanemode"),
0162                                           QStringLiteral("org.kde.plasma.quicksetting.audio"),
0163                                           QStringLiteral("org.kde.plasma.quicksetting.battery"),
0164                                           QStringLiteral("org.kde.plasma.quicksetting.record"),
0165                                           QStringLiteral("org.kde.plasma.quicksetting.nightcolor"),
0166                                           QStringLiteral("org.kde.plasma.quicksetting.screenshot"),
0167                                           QStringLiteral("org.kde.plasma.quicksetting.powermenu"),
0168                                           QStringLiteral("org.kde.plasma.quicksetting.donotdisturb"),
0169                                           QStringLiteral("org.kde.plasma.quicksetting.caffeine"),
0170                                           QStringLiteral("org.kde.plasma.quicksetting.keyboardtoggle")});
0171 }
0172 
0173 void MobileShellSettings::setEnabledQuickSettings(QList<QString> &list)
0174 {
0175     auto group = KConfigGroup{m_config, QUICKSETTINGS_CONFIG_GROUP};
0176     group.writeEntry("enabledQuickSettings", list, KConfigGroup::Notify);
0177     m_config->sync();
0178 }
0179 
0180 QList<QString> MobileShellSettings::disabledQuickSettings() const
0181 {
0182     auto group = KConfigGroup{m_config, QUICKSETTINGS_CONFIG_GROUP};
0183     return group.readEntry("disabledQuickSettings", QList<QString>{});
0184 }
0185 
0186 void MobileShellSettings::setDisabledQuickSettings(QList<QString> &list)
0187 {
0188     auto group = KConfigGroup{m_config, QUICKSETTINGS_CONFIG_GROUP};
0189     group.writeEntry("disabledQuickSettings", list, KConfigGroup::Notify);
0190     m_config->sync();
0191 }