on master help sign in
unity8/plugins/Utils/deviceconfigparser.cpp
158 lines 5.3 kB history raw
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17#include "deviceconfigparser.h"
19#include <QSettings>
20#include <QFileInfo>
21#include <QDebug>
22#include <QStandardPaths>
24DeviceConfigParser::DeviceConfigParser(QObject *parent): QObject(parent)
26 // Local files have highest priority
27 QString path;
28 Q_FOREACH (const QString &standardPath, QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation)) {
29 if (QFileInfo::exists(standardPath + "/devices.conf")) {
30 path = standardPath + "/devices.conf";
31 break;
32 }
33 }
35 // Check if there is an override in the device tarball (/system/etc/)
36 if (path.isEmpty() && QFileInfo::exists("/system/etc/ubuntu/devices.conf")) {
37 path = "/system/etc/ubuntu/devices.conf";
38 }
40 // No higher priority files found. Use standard of /etc/
41 if (path.isEmpty()) {
42 path = "/etc/ubuntu/devices.conf";
43 }
45 qDebug() << "Using" << path << "as device configuration file";
46 m_config = new QSettings(path, QSettings::IniFormat, this);
49QString DeviceConfigParser::name() const
51 return m_name;
54void DeviceConfigParser::setName(const QString &name)
56 if (m_name == name) {
57 return;
58 }
59 m_name = name;
60 Q_EMIT changed();
63Qt::ScreenOrientation DeviceConfigParser::primaryOrientation() const
65 return stringToOrientation(readOrientationFromConfig("PrimaryOrientation"), Qt::PrimaryOrientation);
68Qt::ScreenOrientations DeviceConfigParser::supportedOrientations() const
70 QStringList values = readOrientationsFromConfig("SupportedOrientations");
71 if (values.isEmpty()) {
72 return Qt::PortraitOrientation
73 | Qt::InvertedPortraitOrientation
74 | Qt::LandscapeOrientation
75 | Qt::InvertedLandscapeOrientation;
76 }
78 Qt::ScreenOrientations ret = Qt::PrimaryOrientation;
79 Q_FOREACH(const QString &orientationString, values) {
80 ret |= stringToOrientation(orientationString, Qt::PrimaryOrientation);
81 }
82 return ret;
85Qt::ScreenOrientation DeviceConfigParser::landscapeOrientation() const
87 return stringToOrientation(readOrientationFromConfig("LandscapeOrientation"), Qt::LandscapeOrientation);
90Qt::ScreenOrientation DeviceConfigParser::invertedLandscapeOrientation() const
92 return stringToOrientation(readOrientationFromConfig("InvertedLandscapeOrientation"), Qt::InvertedLandscapeOrientation);
95Qt::ScreenOrientation DeviceConfigParser::portraitOrientation() const
97 return stringToOrientation(readOrientationFromConfig("PortraitOrientation"), Qt::PortraitOrientation);
100Qt::ScreenOrientation DeviceConfigParser::invertedPortraitOrientation() const
102 return stringToOrientation(readOrientationFromConfig("InvertedPortraitOrientation"), Qt::InvertedPortraitOrientation);
105QString DeviceConfigParser::category() const
107 QStringList supportedValues = {"phone", "tablet", "desktop"};
108 m_config->beginGroup(m_name);
109 QString value = m_config->value("Category", "phone").toString();
110 if (!supportedValues.contains(value)) {
111 qWarning().nospace().noquote() << "Unknown option \"" << value << "\" in " << m_config->fileName()
112 << ". Supported options are: " << supportedValues.join(", ") << ".";
113 return "phone";
114 }
115 m_config->endGroup();
116 return value;
119QStringList DeviceConfigParser::readOrientationsFromConfig(const QString &key) const
121 m_config->beginGroup(m_name);
123 QStringList ret;
124 if (m_config->contains(key)) {
125 ret = m_config->value(key).toStringList();
126 }
128 m_config->endGroup();
129 return ret;
132QString DeviceConfigParser::readOrientationFromConfig(const QString &key) const
134 QStringList ret = readOrientationsFromConfig(key);
135 return ret.count() > 0 ? ret.first() : QString();
138Qt::ScreenOrientation DeviceConfigParser::stringToOrientation(const QString &orientationString, Qt::ScreenOrientation defaultValue) const
140 if (orientationString == "Landscape") {
141 return Qt::LandscapeOrientation;
142 }
143 if (orientationString == "InvertedLandscape") {
144 return Qt::InvertedLandscapeOrientation;
145 }
146 if (orientationString == "Portrait") {
147 return Qt::PortraitOrientation;
148 }
149 if (orientationString == "InvertedPortrait") {
150 return Qt::InvertedPortraitOrientation;
151 }
152 if (!orientationString.isEmpty()) {
153 // Some option we don't know. Give some hint on what went wrong.
154 qWarning().nospace().noquote() << "Unknown option \"" << orientationString << "\" in " << m_config->fileName()
155 << ". Supported options are: Landscape, InvertedLandscape, Portrait and InvertedPortrait.";
156 }
157 return defaultValue;