Unity 8
AccountsService.h
1 /*
2  * Copyright (C) 2013 Canonical, Ltd.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU 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 General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authors: Michael Terry <michael.terry@canonical.com>
17  */
18 
19 #ifndef UNITY_ACCOUNTSSERVICE_H
20 #define UNITY_ACCOUNTSSERVICE_H
21 
22 #include <QHash>
23 #include <QObject>
24 #include <QString>
25 #include <QVariant>
26 
27 class AccountsServiceDBusAdaptor;
28 class QDBusInterface;
29 
30 class AccountsService: public QObject
31 {
32  Q_OBJECT
33  Q_ENUMS(PasswordDisplayHint)
34  Q_PROPERTY (QString user
35  READ user
36  WRITE setUser
37  NOTIFY userChanged)
38  Q_PROPERTY (bool demoEdges
39  READ demoEdges
40  WRITE setDemoEdges
41  NOTIFY demoEdgesChanged)
42  Q_PROPERTY (bool enableLauncherWhileLocked
43  READ enableLauncherWhileLocked
44  NOTIFY enableLauncherWhileLockedChanged)
45  Q_PROPERTY (bool enableIndicatorsWhileLocked
46  READ enableIndicatorsWhileLocked
47  NOTIFY enableIndicatorsWhileLockedChanged)
48  Q_PROPERTY (QString backgroundFile
49  READ backgroundFile
50  NOTIFY backgroundFileChanged)
51  Q_PROPERTY (bool statsWelcomeScreen
52  READ statsWelcomeScreen
53  NOTIFY statsWelcomeScreenChanged)
54  Q_PROPERTY (PasswordDisplayHint passwordDisplayHint
55  READ passwordDisplayHint
56  NOTIFY passwordDisplayHintChanged)
57  Q_PROPERTY (uint failedLogins
58  READ failedLogins
59  WRITE setFailedLogins
60  NOTIFY failedLoginsChanged)
61  Q_PROPERTY(bool hereEnabled
62  READ hereEnabled
63  WRITE setHereEnabled
64  NOTIFY hereEnabledChanged)
65  Q_PROPERTY(QString hereLicensePath
66  READ hereLicensePath
67  NOTIFY hereLicensePathChanged)
68  Q_PROPERTY(bool hereLicensePathValid // qml sees a null string as "", so we use proxy setting for that
69  READ hereLicensePathValid
70  NOTIFY hereLicensePathChanged)
71 
72 public:
73  enum PasswordDisplayHint {
74  Keyboard,
75  Numeric,
76  };
77 
78  explicit AccountsService(QObject *parent = 0, const QString & user = QString());
79  ~AccountsService() = default;
80 
81  QString user() const;
82  void setUser(const QString &user);
83  bool demoEdges() const;
84  void setDemoEdges(bool demoEdges);
85  bool enableLauncherWhileLocked() const;
86  bool enableIndicatorsWhileLocked() const;
87  QString backgroundFile() const;
88  bool statsWelcomeScreen() const;
89  PasswordDisplayHint passwordDisplayHint() const;
90  uint failedLogins() const;
91  void setFailedLogins(uint failedLogins);
92  bool hereEnabled() const;
93  void setHereEnabled(bool enabled);
94  QString hereLicensePath() const;
95  bool hereLicensePathValid() const;
96 
97 Q_SIGNALS:
98  void userChanged();
99  void demoEdgesChanged();
100  void enableLauncherWhileLockedChanged();
101  void enableIndicatorsWhileLockedChanged();
102  void backgroundFileChanged();
103  void statsWelcomeScreenChanged();
104  void passwordDisplayHintChanged();
105  void failedLoginsChanged();
106  void hereEnabledChanged();
107  void hereLicensePathChanged();
108 
109 private Q_SLOTS:
110  void onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
111  void onMaybeChanged(const QString &user);
112 
113 private:
114  typedef QVariant (*ProxyConverter)(const QVariant &);
115 
116  void refresh(bool async);
117  void registerProperty(const QString &interface, const QString &property, const QString &signal);
118  void registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter = nullptr);
119 
120  void updateAllProperties(const QString &interface, bool async);
121  void updateProperty(const QString &interface, const QString &property);
122  void updateCache(const QString &interface, const QString &property, const QVariant &value);
123 
124  void setProperty(const QString &interface, const QString &property, const QVariant &value);
125  QVariant getProperty(const QString &interface, const QString &property) const;
126 
127  void emitChangedForProperty(const QString &interface, const QString &property);
128 
129  struct PropertyInfo {
130  QVariant value{};
131  QString signal{};
132  QDBusInterface *proxyInterface{};
133  QString proxyMethod{};
134  ProxyConverter proxyConverter{};
135  };
136  typedef QHash< QString, QHash<QString, PropertyInfo> > PropertyHash;
137  PropertyHash m_properties;
138  AccountsServiceDBusAdaptor *m_service;
139  QDBusInterface *m_unityInput;
140  QString m_user;
141 };
142 
143 #endif