Lomiri
AccountsService.h
1 /*
2  * Copyright (C) 2013-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 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 
17 #ifndef LOMIRI_ACCOUNTSSERVICE_H
18 #define LOMIRI_ACCOUNTSSERVICE_H
19 
20 #include <QHash>
21 #include <QObject>
22 #include <QString>
23 #include <QStringList>
24 #include <QVariant>
25 
26 class AccountsServiceDBusAdaptor;
27 class QDBusInterface;
28 
29 class AccountsService: public QObject
30 {
31  Q_OBJECT
32  Q_PROPERTY (QString user
33  READ user
34  WRITE setUser
35  NOTIFY userChanged)
36  Q_PROPERTY (bool demoEdges
37  READ demoEdges
38  WRITE setDemoEdges
39  NOTIFY demoEdgesChanged)
40  Q_PROPERTY (QStringList demoEdgesCompleted
41  READ demoEdgesCompleted
42  NOTIFY demoEdgesCompletedChanged)
43  Q_PROPERTY (bool enableFingerprintIdentification
44  READ enableFingerprintIdentification
45  NOTIFY enableFingerprintIdentificationChanged)
46  Q_PROPERTY (bool enableLauncherWhileLocked
47  READ enableLauncherWhileLocked
48  NOTIFY enableLauncherWhileLockedChanged)
49  Q_PROPERTY (bool hideNotificationContentWhileLocked
50  READ hideNotificationContentWhileLocked
51  NOTIFY hideNotificationContentWhileLockedChanged)
52  Q_PROPERTY (bool enableIndicatorsWhileLocked
53  READ enableIndicatorsWhileLocked
54  NOTIFY enableIndicatorsWhileLockedChanged)
55  Q_PROPERTY (QString backgroundFile
56  READ backgroundFile
57  NOTIFY backgroundFileChanged)
58  Q_PROPERTY (bool statsWelcomeScreen
59  READ statsWelcomeScreen
60  NOTIFY statsWelcomeScreenChanged)
61  Q_PROPERTY (PasswordDisplayHint passwordDisplayHint
62  READ passwordDisplayHint
63  NOTIFY passwordDisplayHintChanged)
64  Q_PROPERTY(QString pinCodePromptManager READ pinCodePromptManager NOTIFY pinCodePromptManagerChanged)
65  Q_PROPERTY(QString defaultPinCodePromptManager READ defaultPinCodePromptManager CONSTANT)
66  Q_PROPERTY (uint pincodeLength
67  READ pincodeLength
68  NOTIFY pincodeLengthChanged)
69  Q_PROPERTY (uint failedLogins
70  READ failedLogins
71  WRITE setFailedLogins
72  NOTIFY failedLoginsChanged)
73  Q_PROPERTY (uint failedFingerprintLogins
74  READ failedFingerprintLogins
75  WRITE setFailedFingerprintLogins
76  NOTIFY failedFingerprintLoginsChanged)
77  Q_PROPERTY(QString realName READ realName WRITE setRealName NOTIFY realNameChanged)
78  Q_PROPERTY(QString email READ email WRITE setEmail NOTIFY emailChanged)
79  Q_PROPERTY(QStringList keymaps READ keymaps WRITE setKeymaps NOTIFY keymapsChanged)
80 
81 public:
82  enum PasswordDisplayHint {
83  Keyboard,
84  Numeric,
85  };
86  Q_ENUM(PasswordDisplayHint)
87 
88  explicit AccountsService(QObject *parent = 0, const QString & user = QString());
89  ~AccountsService() = default;
90 
91  QString user() const;
92  void setUser(const QString &user);
93  bool demoEdges() const;
94  void setDemoEdges(bool demoEdges);
95  QStringList demoEdgesCompleted() const;
96  Q_INVOKABLE void markDemoEdgeCompleted(const QString &edge);
97  bool enableFingerprintIdentification() const;
98  bool enableLauncherWhileLocked() const;
99  bool enableIndicatorsWhileLocked() const;
100  bool hideNotificationContentWhileLocked() const;
101  QString backgroundFile() const;
102  bool statsWelcomeScreen() const;
103  PasswordDisplayHint passwordDisplayHint() const;
104  QString pinCodePromptManager() const;
105  QString defaultPinCodePromptManager() const;
106  uint pincodeLength() const;
107  uint failedLogins() const;
108  void setFailedLogins(uint failedLogins);
109  uint failedFingerprintLogins() const;
110  void setFailedFingerprintLogins(uint failedFingerprintLogins);
111  QString realName() const;
112  void setRealName(const QString &realName);
113  QString email() const;
114  void setEmail(const QString &email);
115  QStringList keymaps() const;
116  void setKeymaps(const QStringList &keymaps);
117 
118 Q_SIGNALS:
119  void userChanged();
120  void demoEdgesChanged();
121  void demoEdgesCompletedChanged();
122  void enableFingerprintIdentificationChanged();
123  void enableLauncherWhileLockedChanged();
124  void enableIndicatorsWhileLockedChanged();
125  void hideNotificationContentWhileLockedChanged();
126  void backgroundFileChanged();
127  void statsWelcomeScreenChanged();
128  void passwordDisplayHintChanged();
129  void pincodeLengthChanged();
130  void failedLoginsChanged();
131  void failedFingerprintLoginsChanged();
132  void realNameChanged();
133  void emailChanged();
134  void keymapsChanged();
135  void pinCodePromptManagerChanged();
136 
137 private Q_SLOTS:
138  void onPropertiesChanged(const QString &user, const QString &interface, const QStringList &changed);
139  void onMaybeChanged(const QString &user);
140 
141 private:
142  typedef QVariant (*ProxyConverter)(const QVariant &);
143 
144  void refresh(bool async);
145  void registerProperty(const QString &interface, const QString &property, const QString &signal);
146  void registerProxy(const QString &interface, const QString &property, QDBusInterface *iface, const QString &method, ProxyConverter converter = nullptr);
147 
148  void updateAllProperties(const QString &interface, bool async);
149  void updateProperty(const QString &interface, const QString &property);
150  void updateCache(const QString &interface, const QString &property, const QVariant &value);
151 
152  void setProperty(const QString &interface, const QString &property, const QVariant &value);
153  QVariant getProperty(const QString &interface, const QString &property) const;
154 
155  void emitChangedForProperty(const QString &interface, const QString &property);
156 
157  struct PropertyInfo {
158  QVariant value{};
159  QString signal{};
160  QDBusInterface *proxyInterface{};
161  QString proxyMethod{};
162  ProxyConverter proxyConverter{};
163  };
164  typedef QHash< QString, QHash<QString, PropertyInfo> > PropertyHash;
165  QString m_defaultPinPromptManager;
166  PropertyHash m_properties;
167  AccountsServiceDBusAdaptor *m_service;
168  QDBusInterface *m_syscompInput;
169  QString m_user;
170 };
171 
172 #endif