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