Initial Import
[profile/ivi/hfdialer.git] / src / qmldialer.cpp
1 /*
2  * dialer - Declarative Dialer UX Main Window.
3  * Copyright (c) 2011, Tom Swindell.
4  *
5  * This program is licensed under the terms and conditions of the
6  * Apache License, version 2.0.  The full text of the Apache License is at
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  */
10
11 #include "common.h"
12 #include "qmldialer.h"
13 #include "dialerapplication.h"
14 #include "dialercontext.h"
15 #include "callmanager.h"
16 #include "managerproxy.h"
17
18 #define CONFIG_KEY_VOICEMAIL_NUMBER "/apps/dialer/voicemail/number"
19
20 class QMLDialerPrivate
21 {
22 public:
23     QMLDialerPrivate()
24         : currentCall(NULL)
25     { TRACE; }
26
27     QMLCallItem *currentCall;
28 };
29
30 QMLDialer::QMLDialer(QObject *parent)
31     : QObject(parent), d(new QMLDialerPrivate)
32 {
33     TRACE;
34     CallManager *cm = ManagerProxy::instance()->callManager();
35
36     this->connectAll();
37     connect(ManagerProxy::instance(), SIGNAL(callManagerChanged()), SLOT(onCallManagerChanged()));
38     connect(cm, SIGNAL(callCountChanged()), SIGNAL(callCountChanged(cm->callCount())));    
39
40     if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
41 }
42
43 QMLDialer::~QMLDialer()
44 {
45     TRACE;
46     delete this->d;
47 }
48
49 QString QMLDialer::mailbox() const
50 {
51     TRACE;
52
53     if(ManagerProxy::instance()->voicemail()->isConnected())
54         {
55             return ManagerProxy::instance()->voicemail()->mailbox();
56         }
57
58     // Fall back to GConf voicemail setting.
59     return MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).value().toString();
60 }
61
62 bool QMLDialer::modemOnline()
63 {
64     if(ManagerProxy::instance()->modem() &&
65        ManagerProxy::instance()->modem()->isValid())
66         {
67             return ManagerProxy::instance()->modem()->powered();
68         }
69
70     return false;
71 }
72
73 void QMLDialer::setMailbox(const QString &number)
74 {
75     TRACE;
76
77     if(ManagerProxy::instance()->voicemail()->isConnected())
78         {
79             ManagerProxy::instance()->voicemail()->setMailbox(number);
80             return;
81         }
82
83     // Fall back to GConf voicemail setting.
84     MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).set(number);
85 }
86
87 void QMLDialer::setModemOnline(bool online)
88 {
89     if (ManagerProxy::instance() && ManagerProxy::instance()->modem())
90         {
91             if(ManagerProxy::instance()->modem()->isValid())
92                 {
93                     ManagerProxy::instance()->modem()->setPowered(online);
94                     return;
95                 }
96         }
97 }
98
99 QString QMLDialer::speedDial(int index) const
100 {
101     TRACE;
102     return MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).value().toString();
103 }
104
105 void QMLDialer::setSpeedDial(int index, const QString &number)
106 {
107     TRACE;
108     MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).set(number);
109 }
110
111 QMLCallItem* QMLDialer::currentCall() const
112 {
113     TRACE;
114     return d->currentCall;
115 }
116
117 int QMLDialer::callCount()
118 {
119     TRACE;
120     CallManager *cm = ManagerProxy::instance()->callManager();
121     return cm->callCount(); 
122 }
123
124
125 void QMLDialer::dial(const QString &msisdn)
126 {
127     TRACE;
128     CallManager *cm = ManagerProxy::instance()->callManager();
129     if (cm && cm->isValid())
130         {
131             cm->dial(msisdn);
132         }
133         
134 }
135
136 void QMLDialer::hangupAll()
137 {
138     TRACE;
139     CallManager *cm = ManagerProxy::instance()->callManager();
140     if ((cm && cm->isValid()))
141         { 
142             cm->hangupAll();
143         }
144 }
145
146 void QMLDialer::silenceRingtone()
147 {
148     if(ManagerProxy::instance()->volumeManager()->isConnected())
149         {
150             qDebug() << "Attempting to mute call with volume manager.";
151             ManagerProxy::instance()->volumeManager()->setMuted(true);
152         }
153     else if(d->currentCall)
154         {
155             qDebug() << "Attempting to mute call with call item signaller.";
156             d->currentCall->proxy()->silenceRingtone();
157         }
158     else
159         {
160             qDebug() << "Couldn't decide how to mute ringtone!";
161         }
162 }
163
164 void QMLDialer::sendTones(const QString &tones)
165 {
166     TRACE;
167     CallManager *cm = ManagerProxy::instance()->callManager();
168     if (cm && cm->isValid())
169         cm->sendTones(tones);
170 }
171
172 void QMLDialer::transfer()
173 {
174     TRACE;
175     CallManager *cm = ManagerProxy::instance()->callManager();
176     if (cm && cm->isValid())
177         cm->transfer();
178 }
179
180 void QMLDialer::swapCalls()
181 {
182     TRACE;
183     CallManager *cm = ManagerProxy::instance()->callManager();
184     if (cm && cm->isValid())
185         cm->swapCalls();
186 }
187
188 void QMLDialer::releaseAndAnswer()
189 {
190     TRACE;
191     CallManager *cm = ManagerProxy::instance()->callManager();
192     if (cm && cm->isValid())
193         cm->releaseAndAnswer();
194 }
195
196 void QMLDialer::holdAndAnswer()
197 {
198     TRACE;
199     CallManager *cm = ManagerProxy::instance()->callManager();
200     if (cm && cm->isValid())
201         cm->holdAndAnswer();
202 }
203
204 void QMLDialer::createMultiparty()
205 {
206 }
207
208 void QMLDialer::hangupMultiparty()
209 {
210 }
211
212 void QMLDialer::privateChat(const QMLCallItem &call)
213 {
214     TRACE;
215     CallManager *cm = ManagerProxy::instance()->callManager();
216     if (cm && cm->isValid())
217         cm->privateChat(*call.proxy());
218 }
219
220 void QMLDialer::onCallsChanged()
221 {
222     TRACE;
223     CallManager *cm = ManagerProxy::instance()->callManager();
224
225     if(cm->activeCall())
226         {
227             this->onIncomingCall(cm->activeCall());
228         }
229     else
230         {       
231             delete d->currentCall;
232             d->currentCall = NULL;
233             emit callCountChanged(cm->callCount());
234         }
235
236 }
237
238 void QMLDialer::onIncomingCall(CallItem *callitem)
239 {
240     TRACE;
241
242     d->currentCall = new QMLCallItem(callitem, this);
243     emit this->incomingCall();
244 }
245
246 void QMLDialer::connectAll()
247 {
248     TRACE;
249     CallManager *cm = ManagerProxy::instance()->callManager();
250
251      if (ManagerProxy::instance()->modem() && ManagerProxy::instance()->modem()->isValid())
252      {
253         connect(ManagerProxy::instance()->modem(), SIGNAL(poweredChanged(bool)), this, SIGNAL(modemOnlineChanged(bool)));
254      }
255
256     if (cm && cm->isValid())
257         {
258             disconnect(cm, SIGNAL(callsChanged()));
259             disconnect(cm, SIGNAL(incomingCall(CallItem*)));
260             connect(cm, SIGNAL(callsChanged()), this, SLOT(onCallsChanged()));
261             connect(cm, SIGNAL(incomingCall(CallItem*)), SLOT(onIncomingCall(CallItem*)));
262             qDebug() << QString("CallMgr is connected");
263         }
264     else if (cm)
265         {
266             disconnect(cm, SIGNAL(connected()));
267             connect(cm, SIGNAL(connected()), this, SLOT(connectAll()));
268             qDebug() << QString("CallMgr is not yet valid");
269         }
270 }
271
272 void QMLDialer::onCallManagerChanged()
273 {
274     TRACE;
275
276     CallManager *cm = ManagerProxy::instance()->callManager();
277     this->connectAll();
278     if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
279 }
280
281 /* Local Variables:      */
282 /* mode:c++              */
283 /* c-basic-offset:4      */
284 /* indent-tabs-mode: nil */
285 /* End:                  */