00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include "callinfo_symbian.h"
00041 #include <QDateTime>
00042 #include <e32std.h>
00043
00047 CallInfoExPrivate* CallInfoExPrivate::NewL(CallInfoEx *aPublicAPI)
00048 {
00049 CallInfoExPrivate* self = new (ELeave) CallInfoExPrivate(aPublicAPI);
00050 CleanupStack::PushL(self);
00051 self->ConstructL();
00052 CleanupStack::Pop(self);
00053 return self;
00054 }
00055
00059 void CallInfoExPrivate::ConstructL()
00060 {
00061 iTelephony = CTelephony::NewL();
00062 }
00063
00068 CallInfoExPrivate::CallInfoExPrivate(CallInfoEx *aPublicAPI)
00069 : iLineStatusV1Pckg(iCallStatusV1), iCallInfoV1Pckg(iCallInfoV1),
00070 iRemoteInfoV1Pckg(iRemoteInfoV1),
00071 iPublicAPI(aPublicAPI), CActive(CActive::EPriorityHigh)
00072 {
00073
00074
00075
00076 CActiveScheduler::Add(this);
00077 }
00078
00079 CallInfoExPrivate::~CallInfoExPrivate()
00080 {
00081
00082
00083
00084 Cancel();
00085 delete iTelephony;
00086 }
00087
00088
00092 void CallInfoExPrivate::startNotification()
00093 {
00094 iTelephony->NotifyChange(iStatus,CTelephony::EVoiceLineStatusChange, iLineStatusV1Pckg );
00095 SetActive();
00096 }
00097
00101 void CallInfoExPrivate::GetCallInfo()
00102 {
00103 CTelephony::TCallSelectionV1 callSelectionV1;
00104 CTelephony::TCallSelectionV1Pckg callSelectionV1Pckg( callSelectionV1 );
00105 callSelectionV1.iLine = CTelephony::EVoiceLine;
00106 callSelectionV1.iSelect = CTelephony::EInProgressCall;
00107
00108
00109 iTelephony->GetCallInfo(callSelectionV1Pckg, iCallInfoV1Pckg, iRemoteInfoV1Pckg);
00110
00111 emit iPublicAPI->updateCallInfo("................\n");
00112 emit iPublicAPI->updateCallInfo("Time:");
00113 emit iPublicAPI->updateCallInfo(QTime::currentTime().toString());
00114 emit iPublicAPI->updateCallInfo("Date:");
00115 emit iPublicAPI->updateCallInfo(QDate::currentDate().toString());
00116
00117 QString displayNumber;
00118
00119 if(iCallInfoV1.iStatus == CTelephony::EStatusRinging){
00120 displayNumber = QString::fromUtf16(iRemoteInfoV1.iRemoteNumber.iTelNumber.Ptr(),
00121 iRemoteInfoV1.iRemoteNumber.iTelNumber.Length());
00122 emit iPublicAPI->updateCallInfo("Call Received from :");
00123 }
00124 else{
00125 displayNumber = QString::fromUtf16(iCallInfoV1.iDialledParty.iTelNumber.Ptr(),
00126 iCallInfoV1.iDialledParty.iTelNumber.Length());
00127 emit iPublicAPI->updateCallInfo("Dialling :");
00128 }
00129
00130 emit iPublicAPI->updateCallInfo(displayNumber);
00131 emit iPublicAPI->updateCallInfo("................\n");
00132 }
00133
00138 void CallInfoExPrivate::RunL()
00139 {
00140 CTelephony::TCallStatus voiceLineStatus = iCallStatusV1.iStatus;
00141 switch(voiceLineStatus)
00142 {
00143 case CTelephony::EStatusRinging:
00144 emit iPublicAPI->updateCallStatus(".......................");
00145 emit iPublicAPI->updateCallStatus("Phone is ringing");
00146 GetCallInfo();
00147 break;
00148
00149 case CTelephony::EStatusAnswering:
00150 emit iPublicAPI->updateCallStatus(".......................");
00151 emit iPublicAPI->updateCallStatus("Answering");
00152 break;
00153
00154 case CTelephony::EStatusDisconnecting:
00155 emit iPublicAPI->updateCallStatus(".......................");
00156 emit iPublicAPI->updateCallStatus("Disconnecting");
00157 break;
00158
00159 case CTelephony::EStatusDialling:
00160 emit iPublicAPI->updateCallStatus(".......................");
00161 emit iPublicAPI->updateCallStatus("Dialling");
00162 GetCallInfo();
00163 break;
00164
00165 case CTelephony::EStatusConnecting:
00166 emit iPublicAPI->updateCallStatus(".......................");
00167 emit iPublicAPI->updateCallStatus("Connecting");
00168 break;
00169
00170 case CTelephony::EStatusConnected:
00171 emit iPublicAPI->updateCallStatus(".......................");
00172 emit iPublicAPI->updateCallStatus("Connected");
00173 break;
00174
00175 case CTelephony::EStatusHold:
00176 emit iPublicAPI->updateCallStatus(".......................");
00177 emit iPublicAPI->updateCallStatus("Hold");
00178 break;
00179
00180 case CTelephony::EStatusIdle:
00181 emit iPublicAPI->updateCallStatus(".......................");
00182 emit iPublicAPI->updateCallStatus("Idle");
00183 break;
00184 }
00185 if(!IsActive()){
00186 iTelephony->NotifyChange(iStatus,CTelephony::EVoiceLineStatusChange, iLineStatusV1Pckg );
00187 SetActive();
00188 }
00189 }
00190
00195 void CallInfoExPrivate::DoCancel()
00196 {
00197 iTelephony->CancelAsync(CTelephony::EVoiceLineStatusChangeCancel);
00198 }
00199
00200
00201
00202