16 */ |
16 */ |
17 |
17 |
18 #include <xqserviceutil.h> |
18 #include <xqserviceutil.h> |
19 #include <e32base.h> |
19 #include <e32base.h> |
20 #include <qregexp.h> |
20 #include <qregexp.h> |
|
21 #include <featmgr.h> |
|
22 #include <settingsinternalcrkeys.h> |
|
23 #include <xqsettingsmanager.h> |
21 #include "dialservice.h" |
24 #include "dialservice.h" |
22 #include "qtphonelog.h" |
25 #include "qtphonelog.h" |
23 |
26 |
|
27 // CONSTANTS |
|
28 const int MaxPrefixStringLength = 10; |
|
29 const XQSettingsKey dialPrefixMode(XQSettingsKey::TargetCentralRepository, KCRUidNetworkSettings.iUid, KSettingsDialPrefixChangeMode); |
|
30 const XQSettingsKey dialPrefixString(XQSettingsKey::TargetCentralRepository, KCRUidNetworkSettings.iUid, KSettingsDialPrefixText); |
24 |
31 |
25 DialService::DialService(MPECallControlIF &call, MPECallSettersIF ¶meters, QObject* parent) : |
32 DialService::DialService(MPECallControlIF &call, MPECallSettersIF ¶meters, QObject* parent) : |
26 XQServiceProvider(QLatin1String("com.nokia.symbian.ICallDial"), parent), m_call (call), m_parameters (parameters) |
33 XQServiceProvider(QLatin1String("com.nokia.symbian.ICallDial"), parent), m_call (call), m_parameters (parameters), m_settingsManager(0) |
27 { |
34 { |
28 publishAll(); |
35 publishAll(); |
|
36 m_settingsManager = new XQSettingsManager(this); |
|
37 Q_ASSERT(m_settingsManager != 0); |
29 } |
38 } |
30 |
39 |
31 DialService::~DialService() |
40 DialService::~DialService() |
32 { |
41 { |
33 } |
42 } |
34 |
43 |
35 int DialService::dial(const QString& number) |
44 int DialService::dial(const QString& number) |
36 { |
45 { |
37 PHONE_DEBUG2("DialService::dial number:", number); |
46 PHONE_DEBUG2("DialService::dial number:", number); |
38 QString simplifiedNumber = simplified(number); |
47 QString phoneNumber = modifyPhoneNumber(number); |
39 TPtrC16 numberPtr(reinterpret_cast<const TUint16*>(simplifiedNumber.utf16())); |
48 TPtrC16 numberPtr(reinterpret_cast<const TUint16*>(phoneNumber.utf16())); |
40 m_parameters.SetPhoneNumber (numberPtr); |
49 m_parameters.SetPhoneNumber (numberPtr); |
41 m_parameters.SetCallTypeCommand (EPECallTypeCSVoice); |
50 m_parameters.SetCallTypeCommand (EPECallTypeCSVoice); |
42 return m_call.HandleDialServiceCall (); |
51 return m_call.HandleDialServiceCall (); |
43 } |
52 } |
44 |
53 |
45 int DialService::dial(const QString& number, int contactId) |
54 int DialService::dial(const QString& number, int contactId) |
46 { |
55 { |
47 PHONE_DEBUG4("DialService::dial number:", number, "contactId:", contactId); |
56 PHONE_DEBUG4("DialService::dial number:", number, "contactId:", contactId); |
48 QString simplifiedNumber = simplified(number); |
57 QString phoneNumber = modifyPhoneNumber(number); |
49 TPtrC16 numberPtr (reinterpret_cast<const TUint16*>(simplifiedNumber.utf16())); |
58 TPtrC16 numberPtr (reinterpret_cast<const TUint16*>(phoneNumber.utf16())); |
50 m_parameters.SetPhoneNumber (numberPtr); |
59 m_parameters.SetPhoneNumber (numberPtr); |
51 m_parameters.SetCallTypeCommand (EPECallTypeCSVoice); |
60 m_parameters.SetCallTypeCommand (EPECallTypeCSVoice); |
52 m_parameters.SetContactId2 (contactId); |
61 m_parameters.SetContactId2 (contactId); |
53 return m_call.HandleDialServiceCall (); |
62 return m_call.HandleDialServiceCall (); |
54 } |
63 } |
55 |
64 |
56 void DialService::dialVideo(const QString& number) |
65 void DialService::dialVideo(const QString& number) |
57 { |
66 { |
58 PHONE_DEBUG2("DialService::dialVideo number:", number); |
67 PHONE_DEBUG2("DialService::dialVideo number:", number); |
59 QString simplifiedNumber = simplified(number); |
68 QString phoneNumber = modifyPhoneNumber(number); |
60 TPtrC16 numberPtr(reinterpret_cast<const TUint16*>(simplifiedNumber.utf16())); |
69 TPtrC16 numberPtr(reinterpret_cast<const TUint16*>(phoneNumber.utf16())); |
61 m_parameters.SetPhoneNumber (numberPtr); |
70 m_parameters.SetPhoneNumber (numberPtr); |
62 m_parameters.SetCallTypeCommand (EPECallTypeVideo); |
71 m_parameters.SetCallTypeCommand (EPECallTypeVideo); |
63 m_call.HandleDialServiceCall (); |
72 m_call.HandleDialServiceCall (); |
64 } |
73 } |
65 |
74 |
66 void DialService::dialVideo(const QString& number, int contactId) |
75 void DialService::dialVideo(const QString& number, int contactId) |
67 { |
76 { |
68 PHONE_DEBUG4("DialService::dialVideo number:", number, "contactId:", contactId); |
77 PHONE_DEBUG4("DialService::dialVideo number:", number, "contactId:", contactId); |
69 QString simplifiedNumber = simplified(number); |
78 QString phoneNumber = modifyPhoneNumber(number); |
70 TPtrC16 numberPtr (reinterpret_cast<const TUint16*>(simplifiedNumber.utf16())); |
79 TPtrC16 numberPtr (reinterpret_cast<const TUint16*>(phoneNumber.utf16())); |
71 m_parameters.SetPhoneNumber (numberPtr); |
80 m_parameters.SetPhoneNumber (numberPtr); |
72 m_parameters.SetCallTypeCommand (EPECallTypeVideo); |
81 m_parameters.SetCallTypeCommand (EPECallTypeVideo); |
73 m_parameters.SetContactId2 (contactId); |
82 m_parameters.SetContactId2 (contactId); |
74 m_call.HandleDialServiceCall (); |
83 m_call.HandleDialServiceCall (); |
75 } |
84 } |
115 m_parameters.SetServiceIdCommand(serviceId); |
124 m_parameters.SetServiceIdCommand(serviceId); |
116 m_parameters.SetContactId2(contactId); |
125 m_parameters.SetContactId2(contactId); |
117 m_call.HandleDialServiceCall(); |
126 m_call.HandleDialServiceCall(); |
118 } |
127 } |
119 |
128 |
|
129 QString DialService::modifyPhoneNumber(const QString &number) |
|
130 { |
|
131 QString modifiedNumber = simplified(number); |
|
132 modifiedNumber = japanPrefixModifications(modifiedNumber); |
|
133 |
|
134 return modifiedNumber; |
|
135 } |
|
136 |
120 QString DialService::simplified(const QString &number) |
137 QString DialService::simplified(const QString &number) |
121 { |
138 { |
122 QString simplifiedNumber = number; |
139 QString simplifiedNumber = number; |
123 QRegExp rx(QString("[\\s,.\\[\\]\\(\\)\\-]")); |
140 QRegExp rx(QString("[\\s,.\\[\\]\\(\\)\\-]")); |
124 simplifiedNumber.remove(rx); |
141 simplifiedNumber.remove(rx); |
125 return simplifiedNumber; |
142 return simplifiedNumber; |
126 } |
143 } |
|
144 |
|
145 QString DialService::japanPrefixModifications(const QString &number) |
|
146 { |
|
147 bool checkPrefix = FeatureManager::FeatureSupported(KFeatureIdJapanPrefixChange); |
|
148 if(checkPrefix == false) { |
|
149 // prefix change setting is off so don't play with the number |
|
150 return number; |
|
151 } |
|
152 |
|
153 QString modifiedNumber = number; |
|
154 |
|
155 int prefixMode = m_settingsManager->readItemValue(dialPrefixMode, XQSettingsManager::TypeInt).toInt(); |
|
156 if((m_settingsManager->error() == XQSettingsManager::NoError) && (prefixMode > 0)) { |
|
157 // No error fetching value and setting is on |
|
158 QString prefixString = m_settingsManager->readItemValue(dialPrefixString, XQSettingsManager::TypeString).toString(); |
|
159 |
|
160 if(m_settingsManager->error() == XQSettingsManager::NoError) { |
|
161 if(modifiedNumber.startsWith("+")) { |
|
162 modifiedNumber = modifiedNumber.replace(0, prefixString.length(), prefixString); |
|
163 } |
|
164 } |
|
165 } |
|
166 |
|
167 return modifiedNumber; |
|
168 } |