diff -r 000000000000 -r f0cf47e981f9 mmshplugins/mmshsettingsuiplugin/src/mussettingscontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmshplugins/mmshsettingsuiplugin/src/mussettingscontainer.cpp Thu Dec 17 08:44:37 2009 +0200 @@ -0,0 +1,452 @@ +/* +* Copyright (c) 2006-2007 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: Container for MUSSettingsPlugin. +* Version : %version: 15.2.4.1.7 % << Don't touch! Updated by Synergy at check-out. +* +*/ + + + +#include "mussettingscontainer.h" +#include "mussettingsplugin.h" +#include "mussettingsmodel.h" +#include "gslistbox.h" +#include "mussettingsplugin.hrh" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#ifdef RD_MULTIPLE_DRIVE +#include + +#endif + +/** default SIP profile is selected */ +const TInt KDefaultSipProfile = 0; + +/** No SIP profile is selected */ +const TInt KNoSipProfileSelected = -1; + +// UID of Multimedia Sharing. +// This UID is used for accessing the help IDs controlled by MUSH help files +const TUid KUidMUSH = { 0x10282391 }; + +// ======== MEMBER FUNCTIONS ======== + + +CMusSettingsContainer::CMusSettingsContainer( CMusSettingsModel& aModel ) : + iModel( aModel ) + { + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::CMusSettingsContainer()" ) + } + + +void CMusSettingsContainer::ConstructL( const TRect& aRect ) + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::ConstructL()" ) + + iOperatorVariant = iModel.VSSettingsOperatorVariantL(); + + iListBox = new( ELeave ) CAknSettingStyleListBox; + + if ( iOperatorVariant == MusSettingsKeys::EStandard ) + { + BaseConstructL( aRect, R_GS_VSSETTINGS_VIEW_TITLE, R_VS_LBX ); + } + else + { + BaseConstructL( aRect, R_GS_VSSETTINGS_VIEW_TITLE, R_VS_LBX_OPERATOR ); + } + + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::ConstructL()" ) + } + + +CMusSettingsContainer::~CMusSettingsContainer() + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::~CMusSettingsContainer()" ) + delete iActivationItems; + delete iProfileItems; + delete iAutoRecordItems; + delete iListboxItemArray; + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::~CMusSettingsContainer()" ) + } + + +// --------------------------------------------------------------------------- +// Constructs a listbox from a specified resource id. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::ConstructListBoxL( TInt aResLbxId ) + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::ConstructListBoxL()" ) + iListBox->ConstructL( this, EAknListBoxSelectionList ); + iListboxItemArray = CGSListBoxItemTextArray::NewL( + aResLbxId, *iListBox, *iCoeEnv ); + iListBox->Model()->SetItemTextArray( iListboxItemArray ); + iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + // OCC: removed "Automatic in home network" choice + iActivationItems = + iCoeEnv->ReadDesC16ArrayResourceL( + R_OPERATOR_ACTIVATION_SETTING_PAGE_LBX ); + + iAutoRecordItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_VS_VIDEO_SAVING_SETTING_PAGE_LBX ); + + iProfileItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_SIP_PROFILE_SETTING_PAGE_LBX ); + + CreateListBoxItemsL(); + + // Operator variant mode needs some item should not be visible to user. + // Hide those items. + if ( iOperatorVariant == MusSettingsKeys::EOperatorSpecific ) + { + // Hide VS Activation Settings. If needed in future it can be made + // visible. + // + //HideItemsL( KGSSettIdVSActivation ); + // Hide SIP Profile choosing option.If needed in future it can be made + // visible. + HideItemsL( KGSSettIdSIPProfile ); + } + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::ConstructListBoxL()" ) + } + + +// --------------------------------------------------------------------------- +// Populates listbox items. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::CreateListBoxItemsL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::CreateListBoxItemsL()" ) + if ( iOperatorVariant == MusSettingsKeys::EStandard ) + { + MakeActivationItemL(); + } + else + { + MakeOperatorActivationItemL(); + } + MakeSIPProfileItemL(); + MakeAutoRecordItemL(); + MakeRecordedVideoSavingItemL(); + MakeNoteItemL(); + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::CreateListBoxItemsL()" ) + } + + +// --------------------------------------------------------------------------- +// Updates a specified feature (item in listbox). +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::UpdateListBoxL( TInt aFeatureId ) + { + MUS_LOG1( "[MUSSET] <- CMusSettingsContainer::UpdateListBoxL()( %d )", + aFeatureId ) + switch ( aFeatureId ) + { + case KGSSettIdVSActivation: + if ( iOperatorVariant == MusSettingsKeys::EStandard ) + { + MakeActivationItemL(); + } + else + { + MakeOperatorActivationItemL(); + } + break; + case KGSSettIdSIPProfile: + MakeSIPProfileItemL(); + break; + case KGSSettIdAutoRecord: + MakeAutoRecordItemL(); + break; + case KGSSettIdRecordedVideoSaving: + MakeRecordedVideoSavingItemL(); + break; + case KGSSettIdNote: + MakeNoteItemL(); + break; + default: + break; + } + + iListBox->HandleItemAdditionL(); + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::UpdateListBoxL()" ) + } + + +// --------------------------------------------------------------------------- +// Generic method to add an item to listbox and make it visible. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::AddItemL( TInt aId, const TPtrC aText ) + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::AddItemL()" ) + iListboxItemArray->SetDynamicTextL( aId, aText ); + iListboxItemArray->SetItemVisibilityL( aId, + CGSListBoxItemTextArray::EVisible ); + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::AddItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Adds activation setting item to listbox. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::MakeActivationItemL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeActivationItemL()" ) + + iVSActication = iModel.VSSettingsActivationL(); + AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iVSActication ] ); + + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeActivationItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Adds operator specific activation setting item to listbox. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::MakeOperatorActivationItemL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeOperatorActivationItemL()" ) + MUS_LOG1( "Activation item( %d )", + iModel.ActivationItem() ) + AddItemL( KGSSettIdVSActivation, ( *iActivationItems )[ iModel.ActivationItem() ] ); + + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeOperatorActivationItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Adds SIP profile setting item to settings listbox. Item will contain +// indication of [no SIP profile selected], [using default SIP profile] or +// [name of SIP profile specified to be used] +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::MakeSIPProfileItemL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeSIPProfileItemL()" ) + + TInt profile = iModel.VSSettingsProfileL(); + + if ( profile != KDefaultSipProfile && profile != KNoSipProfileSelected ) + { + // profile id defined, get profile name + HBufC* name = iModel.ProfileNameL( profile ); + + if ( name ) + { + CleanupStack::PushL( name ); + AddItemL( KGSSettIdSIPProfile, *name ); + CleanupStack::PopAndDestroy( name ); + } + else + { + // show profile value not selected + AddItemL( KGSSettIdSIPProfile, + ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] ); + } + } + else if ( profile == KNoSipProfileSelected ) + { + AddItemL( KGSSettIdSIPProfile, + ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileSelectNone ] ); + } + else + { + AddItemL( + KGSSettIdSIPProfile, + ( *iProfileItems )[ CMusSettingsModel::KVsSipProfileDefault ] ); + } + + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeSIPProfileItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Adds autorecord item to listbox. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::MakeAutoRecordItemL() + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::MakeAutoRecordItemL()" ) + TInt autoRecordMode = iModel.VSSettingsAutoRecordL(); + + MUS_LOG1( "[MUSSET] autoRecordMode: %d", autoRecordMode ) + MUS_LOG1( "[MUSSET] iAutoRecordItems.Count: %d", iAutoRecordItems->Count() ) + + if ( autoRecordMode > iAutoRecordItems->Count() - 1 ) + { + MUS_LOG2( "[MUSSET] autoRecordMode too big: %d, should be max %d => leave", + autoRecordMode, iAutoRecordItems->Count() -1 ); + User::Leave( KErrOverflow ); + } + + AddItemL( KGSSettIdAutoRecord, ( *iAutoRecordItems )[ autoRecordMode ] ); + + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::MakeAutoRecordItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Adds recorded video saving item to listbox. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::MakeRecordedVideoSavingItemL() + { + MUS_LOG( + "[MUSSET] -> CMusSettingsContainer::MakeRecordedVideoSavingItemL()" ) + + TInt savingMode = iModel.VSSettingsRecordedVideoSavingL(); + + CAknMemorySelectionDialogMultiDrive* dlg = + iModel.MemorySelectionDialogLC(); + TDriveNumber driveNumber = ( TDriveNumber )savingMode; + TInt index = dlg->FindIndexByDrive( driveNumber ); + + if ( index == KErrNotFound ) + { + MUS_LOG( "[MUSSET] -> preferred drive doesn't exist anymore \ +(e.g. remote drive deleted), taking system drive..." ) + + driveNumber = RFs::GetSystemDrive(); + index = dlg->FindIndexByDrive( driveNumber ); + iModel.SetVSSettingsRecordedVideoSavingL( driveNumber ); + } + + TFileName item( KNullDesC ); + dlg->GetItem( index, item ); + MUS_LOG1( "[MUSSET] Current drive:%d", driveNumber ) + MUS_LOG_TDESC( "[MUSSET] pref. mem: " , item ) + + AddItemL( KGSSettIdRecordedVideoSaving, item ); + CleanupStack::PopAndDestroy( dlg ); + + MUS_LOG( + "[MUSSET] <- CMusSettingsContainer::MakeRecordedVideoSavingItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Adds note item to listbox. (Alerts setting). Present only with operator +// variant set. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::MakeNoteItemL() + { + MUS_LOG( + "[MUSSET] -> CMusSettingsContainer::MakeNoteItemL()" ) + + TInt savingMode = iModel.VSSettingsNoteL(); + + MUS_LOG1( "[MUSSET] -> CMusSettingsContainer::Mode:%d()", savingMode ); + + // If unset, use and set default value + if ( savingMode < 0 || savingMode > 1 ) + { + MUS_LOG( "[MUSSET] -> SetVSSettingsNoteL" ); + savingMode = 0; + iModel.SetVSSettingsNoteL( + MusSettingsKeys::EAuditoryNotificationOff ); + MUS_LOG( "[MUSSET] <- SetVSSettingsNoteL" ); + } + MUS_LOG( "[MUSSET] -> AddItemL" ); + AddItemL( KGSSettIdNote, ( *iActivationItems )[ savingMode ] ); + MUS_LOG( "[MUSSET] <- SetVSSettingsNoteL" ); + MUS_LOG( + "[MUSSET] <- CMusSettingsContainer::MakeNoteItemL()" ) + } + + +// --------------------------------------------------------------------------- +// Gets help context. +// --------------------------------------------------------------------------- +// +void CMusSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + MUS_LOG( "[MUSSET] -> CMusSettingsContainer::GetHelpContext()" ) + aContext.iMajor = KUidMUSH; + aContext.iContext = KMSH_HLP_SETTINGS; + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::GetHelpContext()" ) + } + + +// --------------------------------------------------------------------------- +// Returns currently selected feature (listbox item). +// --------------------------------------------------------------------------- +// +TInt CMusSettingsContainer::CurrentFeatureId() const + { + MUS_LOG( "[MUSSET] <- CMusSettingsContainer::CurrentFeatureId()" ) + return iListboxItemArray->CurrentFeature( ); + } + + +// ---------------------------------------------------------------------------- +// If call is on, informs user with note that new profile is going to be active +// after current call. +// ---------------------------------------------------------------------------- +// +void CMusSettingsContainer::ShowNewProfileActiveAfterCallL() + { + MUS_LOG( + "[MUSSET] -> CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" ) + TPSCTsyCallState callState; + User::LeaveIfError( RProperty::Get( KPSUidCtsyCallInformation, + KCTsyCallState, + (TInt&)callState) ); + if ( callState == EPSCTsyCallStateAlerting || + callState == EPSCTsyCallStateRinging || + callState == EPSCTsyCallStateDialling || + callState == EPSCTsyCallStateAnswering || + callState == EPSCTsyCallStateDisconnecting || + callState == EPSCTsyCallStateConnected || + callState == EPSCTsyCallStateHold) + { + HBufC* infoTxt = StringLoader::LoadLC( R_QTN_MSH_SET_PROFILE_NOTE ); + CAknInformationNote* note = new ( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( infoTxt->Des() ); + CleanupStack::PopAndDestroy( infoTxt ); + MUS_LOG( + "[MUSSET] <- CMusSettingsContainer::ShowNewProfileActiveAfterCallL()" ) + } + } + +// ---------------------------------------------------------------------------- +// void CMusSettingsContainer::HideItemsL(TInt aItemIndex) +// Some items are unwanted by operators.Hide those items from listbox item +// ---------------------------------------------------------------------------- +// +void CMusSettingsContainer::HideItemsL(TInt aItemIndex) + { + MUS_LOG1("[MUSSET] -> CMusSettingsContainer::HideItemsL() %d",aItemIndex ) + iListboxItemArray->SetItemVisibilityL( aItemIndex, + CGSListBoxItemTextArray::EInvisible ); + MUS_LOG("[MUSSET] <- CMusSettingsContainer::HideItemsL()" ) + }