|
1 /* |
|
2 * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: The item list of the proxy & registrar views |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 // INCLUDE FILES |
|
21 #include "sipsettlistsipsrvsetitemlist.h" |
|
22 #include "sipsettlistsipsrvsetmodel.h" |
|
23 #include "sipsettlistsipsrvtextsetitem.h" |
|
24 #include "sipupdatedpasswordsetitem.h" |
|
25 #include "sipserversettingvalidator.h" |
|
26 #include "tsipsettingsdata.h" |
|
27 #include "SIPSettListSIPSrvTakeOverCBAKeyPress.h" |
|
28 #include "SipSettIntegerEditItem.h" |
|
29 #include <gssipsettingspluginrsc.rsg> //GUI Resource |
|
30 #include <StringLoader.h> |
|
31 #include <sipprofiletypeinfo.h> |
|
32 #include <aknnotewrappers.h> |
|
33 #include <akntextsettingpage.h> |
|
34 #include "gssippluginlogger.h" |
|
35 |
|
36 // CONSTANTS |
|
37 |
|
38 const TInt KSIPExtraPasswdChars = 4; |
|
39 const TInt KSIPRemovePasswdChars = 2; |
|
40 _LIT16( NULLString, " " ); |
|
41 |
|
42 // ============================ MEMBER FUNCTIONS =============================== |
|
43 |
|
44 // ----------------------------------------------------------------------------- |
|
45 // CSIPSettListSIPSrvSetItemList::CSIPSettListSIPSrvSetItemList |
|
46 // C++ default constructor can NOT contain any code, that |
|
47 // might leave. |
|
48 // ----------------------------------------------------------------------------- |
|
49 // |
|
50 CSIPSettListSIPSrvSetItemList::CSIPSettListSIPSrvSetItemList( |
|
51 CSIPSettListSIPSrvSetModel* aModel ) |
|
52 : iModel( aModel ) |
|
53 { |
|
54 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CSIPSettListSIPSrvSetItemList" ) |
|
55 } |
|
56 |
|
57 // ----------------------------------------------------------------------------- |
|
58 // CSIPSettListSIPSrvSetItemList::ConstructL |
|
59 // Symbian 2nd phase constructor can leave. |
|
60 // ----------------------------------------------------------------------------- |
|
61 // |
|
62 void CSIPSettListSIPSrvSetItemList::ConstructL( |
|
63 CCoeControl* aParent, |
|
64 TInt aResourceID ) |
|
65 { |
|
66 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::ConstructL" ) |
|
67 // Set server type. |
|
68 if ( aResourceID == R_SIP_PROXY_SETTING_VIEW_ITEM_LIST ) |
|
69 { |
|
70 iServerType = EGSItemProxyServer; |
|
71 } |
|
72 else |
|
73 { |
|
74 iServerType = EGSItemRegistrarServer; |
|
75 } |
|
76 |
|
77 // Fetch new settings before constructing the item list |
|
78 iServerData = iModel->Settings(); |
|
79 |
|
80 // Continue with construction |
|
81 SetContainerWindowL( *aParent ); |
|
82 ConstructFromResourceL( aResourceID ); |
|
83 |
|
84 ListBox()->CreateScrollBarFrameL( ETrue ); |
|
85 ListBox()->ScrollBarFrame()->SetScrollBarVisibilityL( |
|
86 CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); |
|
87 |
|
88 ListBox()->View()->ItemDrawer()->SetFlags( CTextListItemDrawer::ESingleClickEnabled ); |
|
89 |
|
90 // Remove two asterisks from ListBoxText() descriptor if needed. |
|
91 if ( iServerData->iPassword.Length() ) |
|
92 { |
|
93 TInt pos = iPassword->SettingName().Length() + KSIPExtraPasswdChars; |
|
94 TPtr ptr = iPassword->ListBoxText()->Des(); |
|
95 ptr.Delete( pos, KSIPRemovePasswdChars ); |
|
96 } |
|
97 |
|
98 } |
|
99 |
|
100 // ----------------------------------------------------------------------------- |
|
101 // CSIPSettListSIPSrvSetItemList::NewL |
|
102 // Two-phased constructor. |
|
103 // ----------------------------------------------------------------------------- |
|
104 // |
|
105 CSIPSettListSIPSrvSetItemList* CSIPSettListSIPSrvSetItemList::NewL( |
|
106 CCoeControl* aParent, |
|
107 CSIPSettListSIPSrvSetModel* aModel, |
|
108 TInt aResourceID ) |
|
109 { |
|
110 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::NewL" ) |
|
111 CSIPSettListSIPSrvSetItemList* self = |
|
112 new ( ELeave ) CSIPSettListSIPSrvSetItemList( aModel ); |
|
113 |
|
114 CleanupStack::PushL( self ); |
|
115 self->ConstructL( aParent, aResourceID ); |
|
116 CleanupStack::Pop( self ); |
|
117 |
|
118 return self; |
|
119 } |
|
120 |
|
121 |
|
122 // Destructor |
|
123 CSIPSettListSIPSrvSetItemList::~CSIPSettListSIPSrvSetItemList() |
|
124 { |
|
125 |
|
126 } |
|
127 |
|
128 // ----------------------------------------------------------------------------- |
|
129 // CSIPSettListSIPSrvSetItemList::CreateSettingItemL |
|
130 // Creates the items to the list |
|
131 // ----------------------------------------------------------------------------- |
|
132 // |
|
133 CAknSettingItem* CSIPSettListSIPSrvSetItemList::CreateSettingItemL( |
|
134 TInt aSettingId ) |
|
135 { |
|
136 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CreateSettingItemL" ) |
|
137 __GSLOGSTRING1("CSIPSettListSIPSrvSetItemList::CreateSettingItemL aSettingId: %d", aSettingId) |
|
138 CAknSettingItem* item = NULL; |
|
139 |
|
140 switch ( aSettingId ) |
|
141 { |
|
142 case EGSServerItemAddr: |
|
143 iAddress = new ( ELeave ) CSIPSettListSIPSrvTextSetItem( |
|
144 aSettingId, iServerData->iAddress, |
|
145 SIPServerSettingValidator::ValidateServerAddressL ); |
|
146 item = iAddress; |
|
147 break; |
|
148 |
|
149 case EGSServerItemRealm: |
|
150 iRealm = new ( ELeave ) CAknTextSettingItem( |
|
151 aSettingId, iServerData->iRealm ); |
|
152 iRealm->SetSettingPageFlags( |
|
153 CAknTextSettingPage::EZeroLengthAllowed ); |
|
154 item = iRealm; |
|
155 break; |
|
156 |
|
157 case EGSServerItemUsername: |
|
158 // If opening view is registrar server view, |
|
159 // service profile type is IMS and private user identity |
|
160 // is set, set provisioned text to the setting item. |
|
161 if ( iServerType == EGSItemRegistrarServer && |
|
162 iModel->ProfileType() == TSIPProfileTypeInfo::EIms && |
|
163 iServerData->iPrivateIdentity.Length() > KErrNone ) |
|
164 { |
|
165 HBufC* provisionedText = |
|
166 StringLoader::LoadLC( R_QTN_SIP_IMS_UNAME_PROVISIONED ); |
|
167 iUName.Copy( *provisionedText ); |
|
168 CleanupStack::PopAndDestroy( provisionedText ); |
|
169 |
|
170 iUsername = new ( ELeave ) CAknTextSettingItem( |
|
171 aSettingId, iUName ); |
|
172 } |
|
173 else |
|
174 { |
|
175 iUsername = new ( ELeave ) CAknTextSettingItem( |
|
176 aSettingId, iServerData->iUsername ); |
|
177 } |
|
178 |
|
179 iUsername->SetSettingPageFlags( |
|
180 CAknTextSettingPage::EZeroLengthAllowed ); |
|
181 item = iUsername; |
|
182 break; |
|
183 |
|
184 case EGSServerItemPassword: |
|
185 iPassword = new ( ELeave ) CSIPUpdatedPasswordSetItem( |
|
186 aSettingId, CAknPasswordSettingItem::EAlpha, |
|
187 iServerData->iPassword ); |
|
188 iPassword->SetSettingPageFlags( |
|
189 CAknTextSettingPage::EZeroLengthAllowed ); |
|
190 item = iPassword; |
|
191 break; |
|
192 |
|
193 case EGSServerItemRouting: |
|
194 iLooseRouting = new ( ELeave ) CAknEnumeratedTextPopupSettingItem( |
|
195 aSettingId, iServerData->iLooseRouting ); |
|
196 item = iLooseRouting; |
|
197 break; |
|
198 |
|
199 case EGSServerItemPort: |
|
200 if( iServerData->iPortNumber == KDefaultPortNumber ) |
|
201 { |
|
202 iPortValue.Copy(NULLString); |
|
203 iPort = new ( ELeave ) CSipSettIntegerEditItem( |
|
204 aSettingId, iPortValue ); |
|
205 } |
|
206 else |
|
207 { |
|
208 iPortValue.Alloc(); |
|
209 iPortValue.AppendNum( iServerData->iPortNumber ); |
|
210 iPort = new ( ELeave ) CSipSettIntegerEditItem( |
|
211 aSettingId, iPortValue ); |
|
212 } |
|
213 |
|
214 iPort->SetEmptyItemTextL( NULLString ); |
|
215 item = iPort; |
|
216 break; |
|
217 |
|
218 case EGSServerItemTransportProtocol: |
|
219 iTransportProtocol = |
|
220 new ( ELeave ) CAknEnumeratedTextPopupSettingItem( |
|
221 aSettingId, iServerData->iTransportProtocol ); |
|
222 item = iTransportProtocol; |
|
223 break; |
|
224 |
|
225 default: |
|
226 // Leave if no matching ID is found |
|
227 User::Leave( KErrNotSupported ); |
|
228 break; |
|
229 } |
|
230 |
|
231 return item; |
|
232 } |
|
233 |
|
234 // ----------------------------------------------------------------------------- |
|
235 // CSIPSettListSIPSrvSetItemList::EditItemL |
|
236 // Manages list box events |
|
237 // ----------------------------------------------------------------------------- |
|
238 // |
|
239 void CSIPSettListSIPSrvSetItemList::EditItemL( |
|
240 TInt aIndex, |
|
241 TBool aCalledFromMenu ) |
|
242 { |
|
243 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::EditItemL Start" ) |
|
244 TInt currentIndex = ListBox()->CurrentItemIndex(); |
|
245 |
|
246 // If currently shown profile is locked, show a note and return. |
|
247 if ( iModel->ProfileLocked() ) |
|
248 { |
|
249 HBufC* lockedText = |
|
250 StringLoader::LoadLC( R_QTN_SIP_INFONOTE_PROFILE_LOCKED ); |
|
251 CAknInformationNote* lockedNote = new (ELeave) CAknInformationNote(); |
|
252 lockedNote->ExecuteLD( *lockedText ); |
|
253 CleanupStack::PopAndDestroy( lockedText ); |
|
254 return; |
|
255 } |
|
256 |
|
257 switch ( currentIndex ) |
|
258 { |
|
259 case EGSServerItemUsername: // Username |
|
260 { |
|
261 // If service profile type is IMS and private user identity is set |
|
262 // don't allow editing the setting item. |
|
263 // Information note is diplayed. |
|
264 |
|
265 if ( iServerType == EGSItemRegistrarServer && |
|
266 iModel->ProfileType() == TSIPProfileTypeInfo::EIms && |
|
267 iServerData->iPrivateIdentity.Length() > KErrNone ) |
|
268 { |
|
269 HBufC* provisionedText = StringLoader::LoadLC( |
|
270 R_QTN_SIP_IMS_UNAME_NOT_EDITABLE ); |
|
271 CAknInformationNote* note = |
|
272 new ( ELeave ) CAknInformationNote( ETrue ); |
|
273 note->ExecuteLD( provisionedText->Des() ); |
|
274 CleanupStack::PopAndDestroy( provisionedText ); |
|
275 } |
|
276 else |
|
277 { |
|
278 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
279 } |
|
280 |
|
281 iUsername->StoreL(); |
|
282 |
|
283 AknTextUtils::StripCharacters( |
|
284 iServerData->iUsername, KAknStripListControlChars ); |
|
285 CheckSettingForSpaces( iServerData->iUsername ); |
|
286 iUsername->LoadL(); |
|
287 iUsername->UpdateListBoxTextL(); |
|
288 break; |
|
289 } |
|
290 |
|
291 case EGSServerItemAddr: // Address |
|
292 { |
|
293 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
294 |
|
295 iAddress->StoreL(); |
|
296 |
|
297 AknTextUtils::StripCharacters( |
|
298 iServerData->iAddress, KAknStripListControlChars ); |
|
299 |
|
300 CheckSettingForSpaces( iServerData->iAddress ); |
|
301 iAddress->LoadL(); |
|
302 iAddress->UpdateListBoxTextL(); |
|
303 break; |
|
304 } |
|
305 |
|
306 case EGSServerItemRealm: // Realm |
|
307 { |
|
308 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
309 |
|
310 iRealm->StoreL(); |
|
311 |
|
312 AknTextUtils::StripCharacters( |
|
313 iServerData->iRealm, KAknStripListControlChars ); |
|
314 |
|
315 CheckSettingForSpaces( iServerData->iRealm ); |
|
316 iRealm->LoadL(); |
|
317 iRealm->UpdateListBoxTextL(); |
|
318 break; |
|
319 } |
|
320 |
|
321 case EGSServerItemPassword: // // Password |
|
322 { |
|
323 // Catch right soft key press in password field to reject |
|
324 // password change, if cancel is pressed. |
|
325 CSIPSettListSIPSrvTakeOverCBAKeyPress* takeOverCancelKey = |
|
326 CSIPSettListSIPSrvTakeOverCBAKeyPress::NewLC(); |
|
327 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
328 |
|
329 // Accept password, if the cancel key hasn't pressed |
|
330 if ( !takeOverCancelKey->BackCalled() ) |
|
331 { |
|
332 iServerData->iPasswordChanged = ETrue; |
|
333 } |
|
334 |
|
335 CleanupStack::PopAndDestroy ( takeOverCancelKey ); |
|
336 |
|
337 iPassword->StoreL(); |
|
338 |
|
339 AknTextUtils::StripCharacters( |
|
340 iServerData->iPassword, KAknStripListControlChars ); |
|
341 |
|
342 CheckSettingForSpaces( iServerData->iPassword ); |
|
343 iPassword->LoadL(); |
|
344 iPassword->UpdateListBoxTextL(); |
|
345 |
|
346 // Remove two asterisks from ListBoxText() descriptor if needed. |
|
347 if ( iServerData->iPassword.Length() ) |
|
348 { |
|
349 TInt pos = iPassword->SettingName().Length() + KSIPExtraPasswdChars; |
|
350 TPtr ptr = iPassword->ListBoxText()->Des(); |
|
351 ptr.Delete( pos, KSIPRemovePasswdChars ); |
|
352 } |
|
353 |
|
354 break; |
|
355 } |
|
356 case EGSRegisterServerItemPort: |
|
357 { |
|
358 if( iServerType == EGSItemRegistrarServer ) |
|
359 { |
|
360 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
361 CSipSettIntegerEditItem *Port = static_cast<CSipSettIntegerEditItem *>(iPort); |
|
362 iServerData->iPortNumber = Port->iValue; |
|
363 Port->UpdateListBoxTextL(); |
|
364 } |
|
365 else |
|
366 { |
|
367 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
368 } |
|
369 } |
|
370 break; |
|
371 case EGSServerItemPort: |
|
372 { |
|
373 if( iServerType == EGSItemProxyServer ) |
|
374 { |
|
375 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
376 CSipSettIntegerEditItem *Port = static_cast<CSipSettIntegerEditItem *>(iPort); |
|
377 iServerData->iPortNumber = Port->iValue; |
|
378 Port->UpdateListBoxTextL(); |
|
379 } |
|
380 else |
|
381 { |
|
382 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
383 } |
|
384 } |
|
385 break; |
|
386 default: |
|
387 { |
|
388 CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); |
|
389 break; |
|
390 } |
|
391 } |
|
392 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::EditItemL End" ) |
|
393 } |
|
394 |
|
395 // ----------------------------------------------------------------------------- |
|
396 // CSIPSettListSIPSrvSetItemList::HandleListBoxEventL |
|
397 // Manages list box events |
|
398 // ----------------------------------------------------------------------------- |
|
399 // |
|
400 void CSIPSettListSIPSrvSetItemList::HandleListBoxEventL( |
|
401 CEikListBox* aListBox, |
|
402 TListBoxEvent aEventType ) |
|
403 { |
|
404 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::HandleListBoxEventL Start" ) |
|
405 TInt currentIndex = aListBox->CurrentItemIndex(); |
|
406 |
|
407 if ( aEventType == EEventEnterKeyPressed || |
|
408 aEventType == EEventItemSingleClicked ) |
|
409 { |
|
410 // If currently shown profile is locked, show a note and return. |
|
411 if ( iModel->ProfileLocked() ) |
|
412 { |
|
413 HBufC* lockedText = |
|
414 StringLoader::LoadLC( R_QTN_SIP_INFONOTE_PROFILE_LOCKED ); |
|
415 CAknInformationNote* lockedNote = new (ELeave) CAknInformationNote(); |
|
416 lockedNote->ExecuteLD( *lockedText ); |
|
417 CleanupStack::PopAndDestroy( lockedText ); |
|
418 return; |
|
419 } |
|
420 // Proxy server. |
|
421 if ( iServerType == EGSItemProxyServer ) |
|
422 { |
|
423 // Loose routing. |
|
424 if ( currentIndex == EGSServerItemRouting ) |
|
425 { |
|
426 iLooseRouting->StoreL(); |
|
427 if ( iServerData->iLooseRouting == EGSLooseRoutingOff ) |
|
428 { |
|
429 iServerData->iLooseRouting = EGSLooseRoutingOn; |
|
430 } |
|
431 else |
|
432 { |
|
433 iServerData->iLooseRouting = EGSLooseRoutingOff; |
|
434 } |
|
435 iLooseRouting->LoadL(); |
|
436 iLooseRouting->UpdateListBoxTextL(); |
|
437 aListBox->ActivateL(); |
|
438 aListBox->HandleItemAdditionL(); |
|
439 return; |
|
440 } |
|
441 } |
|
442 // Registrar server. (No loose routing option.) |
|
443 else |
|
444 { |
|
445 // Do nothing |
|
446 } |
|
447 } |
|
448 |
|
449 CAknSettingItemList::HandleListBoxEventL( aListBox, aEventType ); |
|
450 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::HandleListBoxEventL End" ) |
|
451 } |
|
452 |
|
453 // ----------------------------------------------------------------------------- |
|
454 // CGSSettListSIPSrvSetItemList::CheckSettingForSpaces |
|
455 // Checks that does setting contains only spaces and removes them if needed. |
|
456 // ----------------------------------------------------------------------------- |
|
457 // |
|
458 void CSIPSettListSIPSrvSetItemList::CheckSettingForSpaces( TDes& aSettingText ) |
|
459 { |
|
460 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CheckSettingForSpaces Start" ) |
|
461 TBool onlySpaces( ETrue ); |
|
462 |
|
463 // Check that is there other characters than spaces. |
|
464 for ( TInt i = 0; i < aSettingText.Length() && onlySpaces; i++ ) |
|
465 { |
|
466 const TChar KSpaceCharacter = ' '; |
|
467 if ( aSettingText[ i ] != KSpaceCharacter ) |
|
468 { |
|
469 onlySpaces = EFalse; |
|
470 } |
|
471 } |
|
472 |
|
473 // If only spaces, reset setting value. |
|
474 if ( onlySpaces ) |
|
475 { |
|
476 aSettingText.Zero(); |
|
477 } |
|
478 __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CheckSettingForSpaces End" ) |
|
479 } |
|
480 |
|
481 // End of File |