Added the ability to edit the PID number using the number pad.
[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
39     if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
40 }
41
42 QMLDialer::~QMLDialer()
43 {
44     TRACE
45     delete this->d;
46 }
47
48 QString QMLDialer::mailbox() const
49 {
50     TRACE
51
52     if(ManagerProxy::instance()->voicemail()->isConnected())
53     {
54         return ManagerProxy::instance()->voicemail()->mailbox();
55     }
56
57     // Fall back to GConf voicemail setting.
58     return MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).value().toString();
59 }
60
61 bool QMLDialer::modemOnline()
62 {
63     if(ManagerProxy::instance()->modem() &&
64        ManagerProxy::instance()->modem()->isValid())
65     {
66         return ManagerProxy::instance()->modem()->powered();
67     }
68
69     return false;
70 }
71
72 void QMLDialer::setMailbox(const QString &number)
73 {
74     TRACE
75
76     if(ManagerProxy::instance()->voicemail()->isConnected())
77     {
78         ManagerProxy::instance()->voicemail()->setMailbox(number);
79         return;
80     }
81
82     // Fall back to GConf voicemail setting.
83     MGConfItem(CONFIG_KEY_VOICEMAIL_NUMBER).set(number);
84 }
85
86 void QMLDialer::setModemOnline(bool online)
87 {
88   if (ManagerProxy::instance() && ManagerProxy::instance()->modem())
89   {
90     if(ManagerProxy::instance()->modem()->isValid())
91     {
92         ManagerProxy::instance()->modem()->setPowered(online);
93         return;
94     }
95   }
96 }
97
98 QString QMLDialer::speedDial(int index) const
99 {
100     TRACE
101     return MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).value().toString();
102 }
103
104 void QMLDialer::setSpeedDial(int index, const QString &number)
105 {
106     TRACE
107     MGConfItem(QString("/apps/dialer/speeddial/%1").arg(index)).set(number);
108 }
109
110 QMLCallItem* QMLDialer::currentCall() const
111 {
112     TRACE
113     return d->currentCall;
114 }
115
116 void QMLDialer::dial(const QString &msisdn)
117 {
118     TRACE
119     CallManager *cm = ManagerProxy::instance()->callManager();
120     if (cm && cm->isValid())
121     {
122         cm->dial(msisdn);
123     }
124         
125 }
126
127 void QMLDialer::hangupAll()
128 {
129     TRACE
130     CallManager *cm = ManagerProxy::instance()->callManager();
131     if ((cm && cm->isValid()))
132     { 
133         cm->hangupAll();
134      }
135 }
136
137 void QMLDialer::silenceRingtone()
138 {
139     if(ManagerProxy::instance()->volumeManager()->isConnected())
140     {
141         qDebug() << "Attempting to mute call with volume manager.";
142         ManagerProxy::instance()->volumeManager()->setMuted(true);
143     }
144     else if(d->currentCall)
145     {
146         qDebug() << "Attempting to mute call with call item signaller.";
147         d->currentCall->proxy()->silenceRingtone();
148     }
149     else
150     {
151         qDebug() << "Couldn't decide how to mute ringtone!";
152     }
153 }
154
155 void QMLDialer::sendTones(const QString &tones)
156 {
157     TRACE
158     CallManager *cm = ManagerProxy::instance()->callManager();
159     if (cm && cm->isValid())
160         cm->sendTones(tones);
161 }
162
163 void QMLDialer::transfer()
164 {
165     TRACE
166     CallManager *cm = ManagerProxy::instance()->callManager();
167     if (cm && cm->isValid())
168         cm->transfer();
169 }
170
171 void QMLDialer::swapCalls()
172 {
173     TRACE
174     CallManager *cm = ManagerProxy::instance()->callManager();
175     if (cm && cm->isValid())
176         cm->swapCalls();
177 }
178
179 void QMLDialer::releaseAndAnswer()
180 {
181     TRACE
182     CallManager *cm = ManagerProxy::instance()->callManager();
183     if (cm && cm->isValid())
184         cm->releaseAndAnswer();
185 }
186
187 void QMLDialer::holdAndAnswer()
188 {
189     TRACE
190     CallManager *cm = ManagerProxy::instance()->callManager();
191     if (cm && cm->isValid())
192         cm->holdAndAnswer();
193 }
194
195 void QMLDialer::createMultiparty()
196 {
197   /*  TRACE
198     CallManager *cm = ManagerProxy::instance()->callManager();
199     if (cm && cm->isValid())
200         cm->createMultiparty();
201 */
202 }
203
204 void QMLDialer::hangupMultiparty()
205 {
206 /*
207     TRACE
208     CallManager *cm = ManagerProxy::instance()->callManager();
209     if (cm && cm->isValid())
210         cm->hangupMultiparty();
211 */
212 }
213
214 void QMLDialer::privateChat(const QMLCallItem &call)
215 {
216     TRACE
217     CallManager *cm = ManagerProxy::instance()->callManager();
218     if (cm && cm->isValid())
219         cm->privateChat(*call.proxy());
220 }
221
222 void QMLDialer::onCallsChanged()
223 {
224     TRACE
225     CallManager *cm = ManagerProxy::instance()->callManager();
226
227     if(cm->activeCall())
228     {
229         this->onIncomingCall(cm->activeCall());
230     }
231     else
232     {   
233         delete d->currentCall;
234         d->currentCall = NULL;
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 (cm && cm->isValid())
252     {
253         disconnect(cm, SIGNAL(callsChanged()));
254         disconnect(cm, SIGNAL(incomingCall(CallItem*)));
255         connect(cm, SIGNAL(callsChanged()), this, SLOT(onCallsChanged()));
256         connect(cm, SIGNAL(incomingCall(CallItem*)), SLOT(onIncomingCall(CallItem*)));
257         qDebug() << QString("CallMgr is connected");
258     }
259     else if (cm)
260     {
261         disconnect(cm, SIGNAL(connected()));
262         connect(cm, SIGNAL(connected()), this, SLOT(connectAll()));
263         qDebug() << QString("CallMgr is not yet valid");
264     }
265 }
266
267 void QMLDialer::onCallManagerChanged()
268 {
269     TRACE
270
271     CallManager *cm = ManagerProxy::instance()->callManager();
272     this->connectAll();
273     if(cm && cm->activeCall()) d->currentCall = new QMLCallItem(cm->activeCall(), this);
274 }