diff -r 000000000000 -r a4daefaec16c commsconfig/cscsettingsui/src/cscsettingsuimainview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsconfig/cscsettingsui/src/cscsettingsuimainview.cpp Mon Jan 18 20:12:36 2010 +0200 @@ -0,0 +1,908 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implements CSCSettingsUiMainView methods +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cscconstants.h" +#include "cscsettingsui.hrh" +#include "cscsettingsuimodel.h" +#include "cscsettingsuilogger.h" +#include "cscengservicehandler.h" +#include "cscengbrandinghandler.h" +#include "cscsettingsuimainview.h" +#include "cscsettingsuiconstants.h" +#include "cscengservicepluginhandler.h" + + +#define AppUi() (static_cast(iAvkonAppUi) ) + +// Preferred service not set +const TInt KPrefServiceNotSet = 0; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCSettingsUiMainView::CCSCSettingsUiMainView( + CCSCSettingsUiModel& aModel ) + : iModel( aModel ) + { + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::ConstructL() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::ConstructL - begin" ); + + BaseConstructL( R_CSCSETTINGSUI_MAINVIEW ); + + // Get handle to titlepane + CEikStatusPane* statusPane = StatusPane(); + iTitlePane = static_cast + ( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + CSCSETUIDEBUG( "CCSCSettingsUiMainView::ConstructL - end" ); + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCSettingsUiMainView* CCSCSettingsUiMainView::NewL( + CCSCSettingsUiModel& aModel ) + { + CCSCSettingsUiMainView* self = CCSCSettingsUiMainView::NewLC( aModel ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCSettingsUiMainView* CCSCSettingsUiMainView::NewLC( + CCSCSettingsUiModel& aModel ) + { + CCSCSettingsUiMainView* self = + new ( ELeave ) CCSCSettingsUiMainView( aModel ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +CCSCSettingsUiMainView::~CCSCSettingsUiMainView() + { + CSCSETUIDEBUG( + "CCSCSettingsUiMainView::~CCSCSettingsUiMainView - begin" ); + + // Delete container when view is deactivated. + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + + delete iNaviDecorator; + + CSCSETUIDEBUG( "CCSCSettingsUiMainView::~CCSCSettingsUiMainView - end" ); + } + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::UpdateSoftkeysL +// Processes situation when itīs notified that softkeys need to be changed. +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::UpdateSoftkeysL( ) + { + // not used + } + + +// --------------------------------------------------------------------------- +// From CAknView. +// CCSCSettingsUiMainView::Id +// --------------------------------------------------------------------------- +// +TUid CCSCSettingsUiMainView::Id() const + { + return KCSCSettingsUiMainViewId; + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::SetTitleTextL +// Changes given service name to title pane. +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::SetTitleTextL() + { + // Create text and set it to titlepane. + TBuf titleText ( KNullDesC ); + TUint entryId = iModel.CurrentSPEntryId(); + titleText = iModel.SettingsHandler().ServiceNameL( entryId ); + HBufC* text = StringLoader::LoadLC( + R_CSCSETTINGSUI_MAINVIEW_TITLE, + titleText ); + iTitlePane->SetTextL( *text ); + CleanupStack::PopAndDestroy( text ); + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::IsEditPreferredServiceSettingAllowedL +// For checking if editing of preferred service setting is allowed +// --------------------------------------------------------------------------- +// +TBool CCSCSettingsUiMainView::IsEditPreferredServiceSettingAllowedL() + { + TBool allowed( EFalse ); + TInt value( KErrNotFound ); + + User::LeaveIfError( + RProperty::Get( + KPSUidCtsyCallInformation, + KCTsyCallState, + value ) ); + + // Editing is allowed if no ongoing call. + if ( EPSCTsyCallStateNone == value ) + { + allowed = ETrue; + } + else + { + // Show unable to change settings note + HBufC* string = NULL; + string = StringLoader::LoadL( + R_CSCSETTINGSUI_UNABLE_TO_EDIT_SETTING_NOTE ); + + if ( string ) + { + // Set text and show note. + CleanupStack::PushL( string ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *string ); + CleanupStack::PopAndDestroy( string ); + } + } + + return allowed; + } + +// --------------------------------------------------------------------------- +// From CEikAppUi +// CCSCSettingsUiMainView::HandleCommandL +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::HandleCommandL( TInt aCommand ) + { + CSCSETUIDEBUG2( "CCSCSettingsUiMainView::HandleCommandL: command=%d", + aCommand ); + + TMainListBoxItem listBoxItem = iContainer->CurrentItem(); + + switch ( aCommand ) + { + case ECSCMSKSettingsUiChange: + { + HandleMskChangeSelectionL( listBoxItem ); + break; + } + case ECSCSettingsUiOpen: + case ECSCSettingsUiChange: + { + HandleListBoxSelectionL(); + break; + } + case EAknCmdHelp: + { + if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + CArrayFix* buf = AppUi()->AppHelpContextL(); + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), buf ); + } + break; + } + case EAknSoftkeyBack: + { + HandleReturnToPreviousViewL(); + break; + } + case EEikCmdExit: + case EAknSoftkeyExit: + { + HandleSettingsUiExitL(); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + + +// --------------------------------------------------------------------------- +// From CAknView +// CCSCSettingsUiMainView::DoActivateL +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::DoActivateL( + const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::DoActivateL - begin" ); + + // Create container when view is activated. + if ( !iContainer ) + { + iContainer = new ( ELeave ) CCSCSettingsUiMainContainer( iModel ); + iContainer->SetMopParent( this ); + iContainer->ConstructL( ClientRect() ); + AppUi()->AddToStackL( *this, iContainer ); + iContainer->ListBox()->SetListBoxObserver( this ); + } + + SetTitleTextL(); + UpdateSoftkeysL(); + iContainer->UpdateContainerL(); + + if (!iNaviPane) + { + iNaviPane = static_cast( + iAvkonAppUi->StatusPane()->ControlL( + TUid::Uid(EEikStatusPaneUidNavi))); + } + + if ( !iNaviDecorator ) + { + iNaviDecorator = iNaviPane->CreateNavigationLabelL(); + iNaviPane->PushL(*iNaviDecorator); + } + + CSCSETUIDEBUG( "CCSCSettingsUiMainView::DoActivateL - end" ); + } + + +// --------------------------------------------------------------------------- +// From CAknView +// CCSCSettingsUiMainView::DoDeactivate() +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::DoDeactivate() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::DoDeactivate - begin" ); + + if (iNaviPane && iNaviDecorator) + { + iNaviPane->Pop(iNaviDecorator); + } + delete iNaviDecorator; + iNaviDecorator = NULL; + + // Delete container when view is deactivated. + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + + CSCSETUIDEBUG( "CCSCSettingsUiMainView::DoDeactivate - end" ); + } + + +// --------------------------------------------------------------------------- +// From MEikListBoxObserver +// CSCSettingsUiMainView::HandleListBoxEventL +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::HandleListBoxEventL( + CEikListBox* /*aListBox*/, TListBoxEvent aEventType ) + { + TMainListBoxItem listBoxItem = iContainer->CurrentItem(); + + switch ( aEventType ) + { + case EEventEnterKeyPressed: + case EEventItemSingleClicked: + { + if ( TMainListBoxItem::EPreferredService == listBoxItem.iItem || + TMainListBoxItem::EVccPreferredService == listBoxItem.iItem || + TMainListBoxItem::EHandoverNotifTone == listBoxItem.iItem ) + { + HandleCommandL( ECSCMSKSettingsUiChange ); + } + else + { + HandleListBoxSelectionL(); + } + break; + } + + default: + break; + } + } + + +// --------------------------------------------------------------------------- +// From MEikListBoxObserver +// CCSCSettingsUiMainView::HandleListBoxSelectionL +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::HandleListBoxSelectionL() + { + TMainListBoxItem listBoxItem = iContainer->CurrentItem(); + + switch( listBoxItem.iItem ) + { + case TMainListBoxItem::EUsername: + ShowUsernameSettingPageL(); + break; + case TMainListBoxItem::EPassword: + ShowPasswordSettingPageL(); + break; + case TMainListBoxItem::EPreferredService: + ShowPrefServiceSettingPageL(); + break; + case TMainListBoxItem::EVccPreferredService: + ShowVccPrefServiceSettingPageL(); + break; + case TMainListBoxItem::EHandoverNotifTone: + iContainer->HandoverNotificationToneQueryL(); + break; + case TMainListBoxItem::EImTone: + ShowImToneSelectionListL(); + break; + case TMainListBoxItem::EAutoacceptInv: + iContainer->PresenceReqPrefQueryL(); + break; + case TMainListBoxItem::EServiceConn: + LaunchCMSettingsUiL(); + break; + default: + User::Leave( KErrNotSupported ); + break; + } + } + + +// --------------------------------------------------------------------------- +// From MEikListBoxObserver +// CCSCSettingsUiMainView::DynInitMenuPaneL +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane ) + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::DynInitMenuPaneL - begin" ); + + if ( aMenuPane && R_CSCSETTINGSUI_MAINVIEW_MENU == aResourceId ) + { + TMainListBoxItem listBoxItem = iContainer->CurrentItem(); + + switch( listBoxItem.iItem ) + { + // Hide "Change" and show "Open" + case TMainListBoxItem::EServiceConn: + aMenuPane->SetItemDimmed( ECSCSettingsUiChange, ETrue ); + aMenuPane->SetItemDimmed( ECSCSettingsUiOpen, EFalse ); + break; + // Show "Change" and hide "Open" + case TMainListBoxItem::EUsername: + case TMainListBoxItem::EPassword: + case TMainListBoxItem::EPreferredService: + case TMainListBoxItem::EVccPreferredService: + case TMainListBoxItem::EHandoverNotifTone: + case TMainListBoxItem::EAutoacceptInv: + case TMainListBoxItem::EImTone: + aMenuPane->SetItemDimmed( ECSCSettingsUiChange, EFalse ); + aMenuPane->SetItemDimmed( ECSCSettingsUiOpen, ETrue ); + break; + // Hide both of options. Case should not be possible. + default: + aMenuPane->SetItemDimmed( ECSCSettingsUiChange, ETrue ); + aMenuPane->SetItemDimmed( ECSCSettingsUiOpen, ETrue ); + break; + } + } + + CSCSETUIDEBUG( "CCSCSettingsUiMainView::DynInitMenuPaneL - end" ); + } + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ShowUsernameSettingPageL() +// Shows username setting page - for username input. +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ShowUsernameSettingPageL() + { + // Editing is allowed if service is disabled. + if ( iModel.CCHHandler().IsServiceDisabled( iModel.CurrentSPEntryId() ) ) + { + RBuf username; + CleanupClosePushL( username ); + username.CreateL( KCCHMaxUsernameLength ); + + User::LeaveIfError( + iModel.CCHHandler().GetConnectionParameter( + iModel.CurrentSPEntryId(), ECchUsername, username ) ); + + CAknTextSettingPage* dlg = + new(ELeave) CAknTextSettingPage( + R_CSCSETTINGSUI_USERNAME_SETTING_PAGE, username ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) ) + { + // Set username + User::LeaveIfError( + iModel.CCHHandler().SetConnectionParameter( + iModel.CurrentSPEntryId(), ECchUsername, username ) ); + } + + CleanupStack::PopAndDestroy( &username ); + + iContainer->UpdateContainerL(); + } + else + { + // Show unable to change settings note + HBufC* string = NULL; + string = StringLoader::LoadL( + R_CSCSETTINGSUI_UNABLE_TO_EDIT_WHILE_ONLINE ); + + if ( string ) + { + // Set text and show note. + CleanupStack::PushL( string ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *string ); + CleanupStack::PopAndDestroy( string ); + } + } + } + + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ShowPasswordSettingPageL() +// Shows password setting page - for password input. +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ShowPasswordSettingPageL() + { + // Editing is allowed if service is disabled. + if ( iModel.CCHHandler().IsServiceDisabled( iModel.CurrentSPEntryId() ) ) + { + RBuf password; + CleanupClosePushL( password ); + password.CreateL( KCCHMaxPasswordLength ); + + CAknAlphaPasswordSettingPage* dlg = + new ( ELeave ) CAknAlphaPasswordSettingPage( + R_CSCSETTINGSUI_PASSWORD_SETTING_PAGE, + password, + KNullDesC ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) ) + { + // Set password + User::LeaveIfError( + iModel.CCHHandler().SetConnectionParameter( + iModel.CurrentSPEntryId(), ECchPassword, password ) ); + } + + CleanupStack::PopAndDestroy( &password ); + + iContainer->UpdateContainerL(); + } + else + { + // Show unable to change settings note + HBufC* string = NULL; + string = StringLoader::LoadL( + R_CSCSETTINGSUI_UNABLE_TO_EDIT_WHILE_ONLINE ); + + if ( string ) + { + // Set text and show note. + CleanupStack::PushL( string ); + CAknInformationNote* note = + new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *string ); + CleanupStack::PopAndDestroy( string ); + } + } + } + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ShowPrefServiceSettingPageL() +// Shows Internet call preferred setting page - for ON/OFF setting items +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ShowPrefServiceSettingPageL() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::ShowPrefServiceSettingPageL" ); + + if ( IsEditPreferredServiceSettingAllowedL() ) + { + CDesCArrayFlat* items = + new ( ELeave ) CDesCArrayFlat( 2 ); + CleanupStack::PushL( items ); + + AppendItemL( *items, R_CSCSETTINGSUI_SETTING_PREFERRED_SERVICE_ON ); + AppendItemL( *items, R_CSCSETTINGSUI_SETTING_PREFERRED_SERVICE_OFF ); + + // Get current value of the setting + TInt value( iModel.SettingsHandler().IsPreferredTelephonyVoip() && + iModel.SettingsHandler().IsPreferredService( + iModel.CurrentSPEntryId() ) ? + ECSCSettingsPrefServiceOn : + ECSCSettingsPrefServiceOff); + + CAknRadioButtonSettingPage* dlg = new( ELeave ) + CAknRadioButtonSettingPage( + R_CSCSETTINGSUI_PREF_SERVICE_SETTING_PAGE, + value, items ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + // Change value of the preferred telephony setting and set + // current preferred service id. If preferred telephony value + // is changed as voip then we set this service as preferred + // service. Otherwise we set preferred service as not set (=0) + TUint serviceId( value == ECSCSettingsPrefServiceOn ? + iModel.CurrentSPEntryId() : + KPrefServiceNotSet ); + + iModel.SettingsHandler().SetVoipAsPrefTelephony( + value == ECSCSettingsPrefServiceOn, + serviceId ); + } + + CleanupStack::PopAndDestroy( items ); + iContainer->UpdateContainerL(); + } + } + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ShowVccPrefServiceSettingPageL() +// Shows Internet call preferred setting page - for ON/OFF setting items +// when VCC is supported +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ShowVccPrefServiceSettingPageL() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::ShowVccPrefServiceSettingPageL" ); + + if ( IsEditPreferredServiceSettingAllowedL() ) + { + CDesCArrayFlat* items = + new ( ELeave ) CDesCArrayFlat( 2 ); + CleanupStack::PushL( items ); + + AppendItemL( *items, R_CSCSETTINGSUI_SETTING_VCC_PREFERRED_SERVICE_ON ); + AppendItemL( *items, R_CSCSETTINGSUI_SETTING_VCC_PREFERRED_SERVICE_OFF ); + + // Get current value of the setting + TInt value( iModel.SettingsHandler().IsPreferredTelephonyVoip() && + iModel.SettingsHandler().IsPreferredService( + iModel.CurrentSPEntryId() ) ? + ECSCSettingsPrefServiceOn : + ECSCSettingsPrefServiceOff); + + CAknRadioButtonSettingPage* dlg = new( ELeave ) + CAknRadioButtonSettingPage( + R_CSCSETTINGSUI_VCC_PREF_SERVICE_SETTING_PAGE, + value, items ); + + if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) + { + // Change value of the preferred telephony setting and set + // current preferred service id. If preferred telephony value + // is changed as voip then we set this service as preferred + // service. Otherwise we set preferred service as not set (=0) + TUint serviceId( value == ECSCSettingsPrefServiceOn ? + iModel.CurrentSPEntryId() : + KPrefServiceNotSet ); + + iModel.SettingsHandler().SetVoipAsPrefTelephony( + value == ECSCSettingsPrefServiceOn, + serviceId ); + } + + CleanupStack::PopAndDestroy( items ); + iContainer->UpdateContainerL(); + } + } + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ShowImToneSelectionListL() +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ShowImToneSelectionListL() + { + CMediaFileList* list = CMediaFileList::NewL(); + CleanupStack::PushL( list ); + + HBufC* popupTitle = StringLoader::LoadLC( + R_CSCSETTINGSUI_IM_TONE_POPUP_HEADING ); + + HBufC* noTone = StringLoader::LoadLC( + R_CSCSETTINGSUI_NO_IM_TONE_TEXT ); + + list->SetAttrL( + CMediaFileList::EAttrAutomatedType, + CDRMHelper::EAutomatedTypeIMAlert ); + + list->SetNullItemL( + *noTone, + KNullDesC, + CMediaFileList::EMediaFileTypeAudio, + CMediaFileList::ENullItemIconOff ); + + list->SetAttrL( CMediaFileList::EAttrTitle, *popupTitle ); + + TBuf toneName; + TInt nullItem = KErrNotFound; + + TBool result = list->ShowMediaFileListL( + &toneName, &nullItem , NULL, NULL ); + + CleanupStack::PopAndDestroy( noTone ); + CleanupStack::PopAndDestroy( popupTitle ); + CleanupStack::PopAndDestroy( list ); + + if ( result ) + { + iContainer->SaveImTonePathL( toneName ); + } + else if( KErrNotFound != nullItem ) + { + iContainer->SaveImTonePathL( KNullDesC ); + } + else + { + // do nothing + } + + iContainer->UpdateContainerL(); + } + + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::HandleMskChangeSelectionL() +// Handles 'change' middle softkey selection. +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::HandleMskChangeSelectionL( + TMainListBoxItem aListBoxItem ) + { + switch ( aListBoxItem.iItem ) + { + case TMainListBoxItem::EPreferredService: + case TMainListBoxItem::EVccPreferredService: + { + ChangePrefTelephonyValueL(); + } + break; + case TMainListBoxItem::EHandoverNotifTone: + { + ChangeHandoverNotifToneValueL(); + } + break; + default: + { + User::Leave( KErrArgument ); + } + break; + } + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ChangePrefTelephonyValueL() +// Changes the value of the preferred telephony setting +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ChangePrefTelephonyValueL() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::ChangePrefTelephonyValueL" ); + + if ( IsEditPreferredServiceSettingAllowedL() ) + { + // Check is this service preferred service + TBool prefService( + iModel.SettingsHandler().IsPreferredTelephonyVoip() && + iModel.SettingsHandler().IsPreferredService( + iModel.CurrentSPEntryId() )); + + // Set preferred service id as not set (=0) if preferred telephony + // setting is changed as CS. + TUint serviceId( prefService ? KPrefServiceNotSet : + iModel.CurrentSPEntryId() ); + + // Set preferred telephony setting value and current preferred + // service id + iModel.SettingsHandler().SetVoipAsPrefTelephony( + !prefService, + serviceId ); + + iContainer->UpdateContainerL(); + } + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::ChangeHandoverNotifToneValueL() +// Changes the value of the handover notify tone setting. +// --------------------------------------------------------------------------- +void CCSCSettingsUiMainView::ChangeHandoverNotifToneValueL() + { + TOnOff onOff = iModel.SettingsHandler().HandoverNotifTonePrefL( + iModel.CurrentSPEntryId() ); + + if ( EOn == onOff ) + { + iModel.SettingsHandler().SetHandoverNotifTonePrefL( + iModel.CurrentSPEntryId(), EOff ); + } + else + { + iModel.SettingsHandler().SetHandoverNotifTonePrefL( + iModel.CurrentSPEntryId(), EOn ); + } + + iContainer->UpdateContainerL(); + } + +// ----------------------------------------------------------------------------- +// CCSCSettingsUiMainView::AppendItemL +// Appends resource texts to the des array. +// ----------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::AppendItemL( + CDesCArrayFlat& aList, TInt aItem ) + { + HBufC* string = StringLoader::LoadLC( aItem ); + aList.AppendL( *string ); + CleanupStack::PopAndDestroy( string ); + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::LaunchCMSettingsUiL +// Launches Connection Method Settings Ui for editing destinations. +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::LaunchCMSettingsUiL() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::LaunchCMSettingsUiL" ); + + // Launch Connection Method Settings Ui. + CCmSettingsUi* cmSettingsUi = CCmSettingsUi::NewL(); + CleanupStack::PushL( cmSettingsUi ); + if ( CCmSettingsUi::EExit == cmSettingsUi->RunSettingsL() ) + { + HandleCommandL( EEikCmdExit ); + } + CleanupStack::PopAndDestroy( cmSettingsUi ); + iContainer->UpdateContainerL(); + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::HandleReturnToPreviousViewL +// Handles returning to previous view where settingsui was launced. +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::HandleReturnToPreviousViewL() + { + CSCSETUIDEBUG( + "CCSCSettingsUiMainView::HandleReturnToPreviousViewL - IN" ); + + if ( iModel.ReturnViewId() != KNullUid ) + { + TUid tabview( KNullUid ); + TRAPD( err, tabview.iUid = iModel.SettingsHandler().ServiceTabViewIdL( + iModel.CurrentSPEntryId() ) ) + + if ( tabview.iUid == iModel.ReturnViewId().iUid && !err ) + { + RxSPViewServices viewServices; + TInt err = viewServices.Activate( + KPhoneBookTabUid.iUid, + iModel.ReturnViewId().iUid ); + + CSCSETUIDEBUG2( " --> ACTIVATE ERR=%d", err ); + + AppUi()->HandleCommandL( EEikCmdExit ); + } + else + { + // Not launched from service tab, activate previsous view + AppUi()->ActivateLocalViewL( iModel.ReturnViewId() ); + } + } + + CSCSETUIDEBUG( + "CCSCSettingsUiMainView::HandleReturnToPreviousViewL - OUT" ); + } + +// --------------------------------------------------------------------------- +// CCSCSettingsUiMainView::HandleSettingsUiExitL +// Handles exist from settingsui. +// --------------------------------------------------------------------------- +// +void CCSCSettingsUiMainView::HandleSettingsUiExitL() + { + CSCSETUIDEBUG( "CCSCSettingsUiMainView::HandleSettingsUiExitL - IN" ); + + if ( iModel.ReturnViewId() != KNullUid ) + { + TUid tabview( KNullUid ); + TRAPD( err, tabview.iUid = iModel.SettingsHandler().ServiceTabViewIdL( + iModel.CurrentSPEntryId() ) ) + + if ( tabview.iUid == iModel.ReturnViewId().iUid && !err ) + { + // Launched from service tab, go back there + RxSPViewServices viewServices; + viewServices.Activate( + KPhoneBookTabUid.iUid, + iModel.ReturnViewId().iUid ); + + AppUi()->HandleCommandL( EEikCmdExit ); + } + else + { + // Not launched from service tab, just exit + AppUi()->HandleCommandL( EEikCmdExit ); + } + } + + CSCSETUIDEBUG( "CCSCSettingsUiMainView::HandleSettingsUiExitL - OUT" ); + } +