--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/gssettingsuis/Gs/GSCallPlugin/src/GSCallPluginContainer.cpp Thu Dec 17 08:52:52 2009 +0200
@@ -0,0 +1,1064 @@
+/*
+* Copyright (c) 2002-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 the Call folder
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "GSCallPluginContainer.h" //for CGSCallPluginContainer
+#include "GsLogger.h" //for logging traces
+#include "gssettingid.h" //for constants
+#include "GSCallPluginModel.h" //plug-in model
+#include "GSCallPlugin.h"
+
+
+#include <aknlists.h> //for CAknSettingStyleListBox
+#include <PsetCli.h> //for CPsetCli
+#include <PsetSAObserver.h> //for CPsetSAObserver
+#include <PsetCSP.h> //for CSP features
+#include <GSCallPluginRsc.rsg> //for resource IDs
+#include <csxhelp/cp.hlp.hrh>
+#include <featmgr.h>
+#include <bldvariant.hrh>
+#include <gslistbox.h> //for listbox clases
+#include <aknViewAppUi.h>
+#include <eikappui.h>
+#include <gsfwviewuids.h>
+
+//LOCAL CONSTANTS
+_LIT( KGSNameOfClass, "CGSCallPluginContainer" );
+_LIT(KGSReplaceListControlChars, "\n\t\x2029");
+
+// ========================= MEMBER FUNCTIONS ================================
+// ---------------------------------------------------------------------------
+//
+// Symbian OS two phased constructor
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::ConstructL( const TRect& aRect )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::ConstructL");
+
+ __GSLOGSTRING("[CGSCallPluginContainer] Creating model...");
+ iModel = CGSCallPluginModel::NewL();
+ __GSLOGSTRING("[CGSCallPluginContainer] Model created.");
+
+ iListBox = new ( ELeave ) CAknSettingStyleListBox;
+
+ __GSLOGSTRING("[CGSCallPluginContainer]--> ConstructL - Model created");
+
+ iSsSettings = new (ELeave) RSSSettings;
+ User::LeaveIfError( iSsSettings->Open() );
+ __GSLOGSTRING("[CGSCallPluginContainer]--> ConstructL - SSSettings created & opened");
+
+ BaseConstructL( aRect,
+ R_GS_CALL_VIEW_TITLE,
+ R_CALL_LBX );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::ConstructL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Destructor
+//
+// ---------------------------------------------------------------------------
+CGSCallPluginContainer::~CGSCallPluginContainer()
+ {
+ if ( iSsSettings )
+ {
+ iSsSettings->Close();
+ }
+ delete iSsSettings;
+
+ delete iClirItems;
+ delete iCWItems;
+ delete iPCTItems;
+ delete iDndItems;
+
+ if ( iStillImgValues )
+ {
+ delete iStillImgValues;
+ }
+ if ( iChangeModeItems &&
+ FeatureManager::FeatureSupported ( KFeatureIdJapanPrefixChange ) )
+ {
+ delete iChangeModeItems;
+ }
+ if ( iCallDurationItems )
+ {
+ delete iCallDurationItems;
+ }
+ if ( iLongPressCallKeyItems )
+ {
+ delete iLongPressCallKeyItems;
+ }
+ if ( iListboxItemArray )
+ {
+ delete iListboxItemArray;
+ }
+ if ( iOwnImageVtCallItems )
+ {
+ delete iOwnImageVtCallItems;
+ }
+ if ( iModel )
+ {
+ delete iModel;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates list box
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::ConstructListBoxL( TInt aResLbxId )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::ConstructListBoxL");
+
+ iListBox->ConstructL( this, EAknListBoxSelectionList );
+
+ iListboxItemArray = CGSListBoxItemTextArray::NewL( aResLbxId,
+ *iListBox, *iCoeEnv );
+ iListBox->Model()->SetItemTextArray( iListboxItemArray );
+ iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ iStillImgValues = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_GS_STILL_IMAGE_SETTING_PAGE_LBX );
+
+ if ( iModel->VoIPSupported() )
+ {
+ iClirItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_IC_CLIR_SETTING_PAGE_LBX );
+ iCWItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_IC_WAITING_SETTING_PAGE_LBX );
+ iPCTItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_IC_PREFERRED_CALL_TYPE_SETTING_PAGE_LBX );
+ iDndItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_IC_DND_SETTING_PAGE_LBX );
+ }
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdJapanPrefixChange ) )
+ {
+ iChangeModeItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_GS_REPLACE_PREFIX_SETTING_PAGE_LBX );
+ }
+
+ iCallDurationItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_GS_SHOW_CALL_DURATION_SETTING_PAGE_LBX );
+
+ iLongPressCallKeyItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_GS_LONG_PRESS_CALL_SETTING_PAGE_LBX );
+
+ iOwnImageVtCallItems = iCoeEnv->ReadDesC16ArrayResourceL(
+ R_GS_OWN_IMAGE_VT_CALL_SETTING_PAGE_LBX );
+
+ CreateListBoxItemsL();
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::ConstructListBoxL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates List box items
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::CreateListBoxItemsL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::CreateListBoxItemsL");
+// do not get check CSP if not using WINS
+#ifndef __WINS__
+ //Set CSP on, if it is not already
+ if ( !iModel->GetCSPStatus() )
+ {
+ iModel->SetCSPActiveL( ETrue );
+ }
+#endif //__WINS__
+
+ //create slide settings items
+ if ( iModel->SlideSettingsShownL() )
+ {
+ MakeSlideSettingsItem( EGSOpeningSlideAnswerCallItemId );
+ MakeSlideSettingsItem( EGSClosingSlideEndCallItemId );
+ }
+
+ //Create own number sending, call waiting soft-reject items and ccbs
+ MakeONSItemL();
+ MakeCWItemL();
+
+ if ( iModel->VoIPSupported() )
+ {
+ MakeICClirItemL();
+ MakeICWaitingItemL();
+#ifndef RD_VOIP_REL_2_2
+ MakeICPreferredCallTypeItemL();
+#endif // !RD_VOIP_REL_2_2
+ MakeDndItemL();
+ }
+
+
+ MakeSoftRejectTxtItemL();
+
+ if ( FeatureManager::FeatureSupported(
+ KFeatureIdCsVideoTelephony ) )
+ {
+ MakeStillImageItemL(); //Still Image item
+ MakeOwnImageVtCallItemL(); //VT call own image mute item
+ }
+
+ if ( FeatureManager::FeatureSupported( KFeatureIdJapanPrefixChange ) )
+ {
+ MakeReplacePrefixItemL();
+ }
+
+ // Create on/off settings
+ MakeCallItemL( KGSSettIdSummaryAfterCall );
+
+ //Create line in use
+ TInt als = ESSSettingsAlsNotSupported;
+ TInt alsError = iSsSettings->Get( ESSSettingsAls, als );
+
+ if ( als != ESSSettingsAlsNotSupported && alsError == KErrNone )
+ {
+ MakePLUItemL( als );
+
+ //Create Line blocking
+ TInt alsBlock = ESSSettingsAlsBlockingNotSupported;
+ alsError = iSsSettings->Get( ESSSettingsAlsBlocking, alsBlock );
+ if ( alsBlock != ESSSettingsAlsBlockingNotSupported &&
+ alsError == KErrNone )
+ {
+ MakePLBItemL( alsBlock );
+ }
+ }
+ MakeCallDurationItemL();
+
+ #ifdef RD_VT_LONG_SEND_KEY
+ MakeLongPressCallKeyItemL();
+ #endif
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::CreateListBoxItemsL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Updates list box with a changed item
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::UpdateListBoxL( TInt aFeatureId, TInt aNewValue )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::UpdateListBoxL");
+ switch( aFeatureId )
+ {
+ case EGSOpeningSlideAnswerCallItemId:
+ case EGSClosingSlideEndCallItemId:
+ if ( iModel->SlideSettingsShownL() )
+ {
+ MakeSlideSettingsItem( aFeatureId );
+ }
+ break;
+ case EGSCliItemId:
+ MakeONSItemL();
+ break;
+// case EGSCCBSItemId:
+ case EGSCallWaitingItemId:
+ return; //CW and CCBS does not have a value => no need to update
+ case EGSICSendIntCallIdItemId:
+ if ( iModel->VoIPSupported() )
+ {
+ MakeICClirItemL();
+ }
+ break;
+ case EGSICWaitingItemId:
+ if ( iModel->VoIPSupported() )
+ {
+ MakeICWaitingItemL();
+ }
+ break;
+ case EGSICPreferredTelephonyId:
+ if ( iModel->VoIPSupported() )
+ {
+ MakeICPreferredCallTypeItemL();
+ }
+ break;
+ case EGSDndItemId:
+ if ( iModel->VoIPSupported() )
+ {
+ MakeDndItemL();
+ }
+ break;
+ case EGSSummaryAfterCallItemId:
+ MakeCallItemL( KGSSettIdSummaryAfterCall );
+ break;
+ case EGSALSBlockItemId:
+ MakePLBItemL( aNewValue );
+ break;
+ case EGSLineChangeItemId:
+ MakePLUItemL( aNewValue );
+ break;
+
+ case EGSSoftRejectTextItemId:
+ MakeSoftRejectTxtItemL();
+ break;
+ case EGSStillImageItemId:
+ if ( FeatureManager::FeatureSupported(
+ KFeatureIdCsVideoTelephony ) )
+ {
+ MakeStillImageItemL();
+ }
+ break;
+ case EGSReplacePrefixItemId:
+ if ( FeatureManager::FeatureSupported( KFeatureIdJapanPrefixChange ) )
+ {
+ MakeReplacePrefixItemL();
+ }
+ break;
+ case EGSShowCallDurationItemId:
+ MakeCallDurationItemL();
+ break;
+ case EGSLongPressCallKeyItemId:
+ #ifdef RD_VT_LONG_SEND_KEY
+ MakeLongPressCallKeyItemL();
+ #endif
+ break;
+ case EGSOwnImageVtCallItemId:
+ if ( FeatureManager::FeatureSupported(
+ KFeatureIdCsVideoTelephony ) )
+ {
+ MakeOwnImageVtCallItemL();
+ }
+ break;
+ default:
+ Panic( KGSNameOfClass, EInvalidIndex );
+ break;
+ }
+
+ //iListBox->HandleItemAdditionL();
+ iListBox->DrawDeferred();
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::UpdateListBoxL");
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// Creates StillImage list item.
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakeStillImageItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeStillImageItemL");
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ TInt dialogSelection = EGSVtStillImageNotInUse;
+ if ( iModel->VTStillImageL() )
+ dialogSelection = EGSVtStillImageInUse;
+ ptrBuffer = (*iStillImgValues)[ dialogSelection ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSStillImageItemId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSStillImageItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeStillImageItemL");
+ }
+
+
+
+// ---------------------------------------------------------------------------
+//
+// Creates OwnNumberSending list item.
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakeONSItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeONSItemL");
+ HBufC16* dynamicText = NULL;
+
+ TInt clir = ESSSettingsClirNetworkDefault;
+ //to allow emulator usage without phone, do not retrieve values.
+ TInt err = iSsSettings->Get( ESSSettingsClir, clir );
+ __GSLOGSTRING2("[CGSCallPluginContainer] MakeONSItemL: clir: %d, Error: %d", clir, err);
+ if ( err != KErrNone )
+ {
+ return;
+ }
+
+ switch( clir )
+ {
+ case ESSSettingsClirExplicitSuppress:
+ dynamicText = StringLoader::LoadL( R_CLI_SENDING_ON );
+ break;
+ case ESSSettingsClirExplicitInvoke:
+ dynamicText = StringLoader::LoadL( R_CLI_SENDING_OFF );
+ break;
+ default:
+ if ( iModel->RestrictedSendCallerIdSupportedL() )
+ {
+ //set initially to ON if restricted CLIR is supported
+ dynamicText = StringLoader::LoadL( R_CLI_SENDING_ON );
+ TInt err = iSsSettings->Set(
+ ESSSettingsClir, ESSSettingsClirExplicitSuppress );
+ if ( err != KErrNone )
+ {
+ delete dynamicText;
+ return;
+ }
+ }
+ else
+ {
+ dynamicText = StringLoader::LoadL( R_CLI_SENDING_DEFAULT );
+ }
+ break;
+ }
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSCliItemId, *dynamicText );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSCliItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ delete dynamicText;
+ dynamicText = NULL;
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeONSItemL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates CallWaiting list item.
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakeCWItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeCWItemL");
+#ifndef __WINS__
+ //Create call waiting
+ if ( iModel->IsSettingSupported( EGSCSPCallWaiting ) )
+ {
+#endif //__WINS__
+ iListboxItemArray->SetItemVisibilityL( EGSCallWaitingItemId,
+ CGSListBoxItemTextArray::EVisible );
+#ifndef __WINS__
+ }
+#endif //__WINS__
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeCWItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::MakeICClirItemL()
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeICClirItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeICClirItemL");
+ TInt value( KErrNone );
+ iModel->GetVoIPCallSettingValue( EGSVoIPSendIntCallId, value );
+
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ ptrBuffer = ( *iClirItems )[ value ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSICSendIntCallIdItemId, ptrBuffer );
+
+ iListboxItemArray->SetItemVisibilityL( EGSICSendIntCallIdItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeICClirItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::MakeICWaitingItemL()
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeICWaitingItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeICWaitingItemL");
+ TInt value( KErrNone );
+ iModel->GetVoIPCallSettingValue( EGSVoIPCW, value );
+
+ // Swap items because of different order.
+ if ( value == EGSCSCallWaitingOff )
+ {
+ value = EGSCSCallWaitingOn;
+ }
+ else
+ {
+ value = EGSCSCallWaitingOff;
+ }
+
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ ptrBuffer = ( *iCWItems )[ value ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSICWaitingItemId, ptrBuffer );
+ iListboxItemArray->SetItemVisibilityL( EGSICWaitingItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ CleanupStack::PopAndDestroy( dynamicText );
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeICWaitingItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::MakeICPreferredCallTypeItemL()
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeICPreferredCallTypeItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeICPreferredCallTypeItemL");
+ TInt value( KErrNone );
+ iModel->GetVoIPCallSettingValue( EGSVoIPPreType, value );
+
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ ptrBuffer = ( *iPCTItems )[ value ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSICPreferredTelephonyId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ iListboxItemArray->SetItemVisibilityL( EGSICPreferredTelephonyId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeICPreferredCallTypeItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::MakeDndItemL()
+//
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeDndItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeDndItemL");
+ TInt value( KErrNone );
+ iModel->GetVoIPCallSettingValue( EGSVoIPDnd, value );
+
+ // Swap items because of different order.
+ if ( value == EGSCSCallDndOff )
+ {
+ value = EGSCSCallDndOn;
+ }
+ else
+ {
+ value = EGSCSCallDndOff;
+ }
+
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ ptrBuffer = ( *iDndItems )[ value ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSDndItemId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ iListboxItemArray->SetItemVisibilityL( EGSDndItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeDndItemL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates PhoneLineInUse list item.
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakePLUItemL( TInt& aAlsValue )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakePLUItemL");
+
+ if ( aAlsValue == ESSSettingsAlsNotSupported )
+ {
+ iListboxItemArray->SetItemVisibilityL( EGSLineChangeItemId,
+ CGSListBoxItemTextArray::EInvisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--MakePLUItemL:AlsNotSupported");
+ return;
+ }
+
+ HBufC* dynamicText = NULL;
+
+ if ( aAlsValue == ESSSettingsAlsAlternate )
+ {
+ dynamicText = StringLoader::LoadL( R_ALS_LINE2 );
+ }
+ else
+ {
+ dynamicText = StringLoader::LoadL( R_ALS_LINE1 );
+ }
+
+ // for A&H number conversion
+ TPtr bufPtr = dynamicText->Des();
+ AknTextUtils::DisplayTextLanguageSpecificNumberConversion( bufPtr );
+
+ iListboxItemArray->SetDynamicTextL( EGSLineChangeItemId, *dynamicText );
+
+ // Add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSLineChangeItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ delete dynamicText;
+ dynamicText = NULL;
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakePLUItemL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates PhoneLineBlocking list item. No item is created, if service is not
+// supported.
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakePLBItemL( TInt& aAlsBlockValue )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakePLBItemL");
+ HBufC* dynamicText = NULL;
+
+ if ( aAlsBlockValue == ESSSettingsAlsBlockingOn )
+ {
+ dynamicText = StringLoader::LoadL( R_ALS_LINE_BLOCKING_ON );
+ }
+ else
+ {
+ dynamicText = StringLoader::LoadL( R_ALS_LINE_BLOCKING_OFF );
+ }
+
+ iListboxItemArray->SetDynamicTextL( EGSALSBlockItemId, *dynamicText );
+
+ // Add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSALSBlockItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ delete dynamicText;
+ dynamicText = NULL;
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakePLBItemL");
+ }
+
+// ---------------------------------------------------------------------------
+//
+// Creates Speed Dialing, Anykey Answer, Summary After Call
+// and Automatic redial items.
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakeCallItemL( TInt aIndex )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeCallItemL");
+ HBufC* settingOn = NULL;
+ HBufC* settingOff = NULL;
+ TInt value = KGSSettingOff; //default is OFF for all
+ TInt settingItem = 0;
+ TBool ok = ETrue;
+
+ TCallSettId keyName = EGSNotSet;
+
+ switch ( aIndex )
+ {
+ case KGSSettIdSummaryAfterCall:
+ keyName = EGSSummaryAfterCall;
+ settingItem = EGSSummaryAfterCallItemId;
+ settingOn = StringLoader::LoadLC( R_CALL_TERMINATION_NOTE_ON );
+ settingOff = StringLoader::LoadLC( R_CALL_TERMINATION_NOTE_OFF );
+ break;
+ default:
+ Panic( KGSNameOfClass, EInvalidIndex );
+ break;
+ }
+
+ if( ok ) //if everything is ok so far
+ {
+ iModel->GetCallSettingValue( keyName, value );
+ __GSLOGSTRING1("[CGSCallPluginContainer] MakeCallItemL: value: %d", value);
+
+ // Finally, set the dynamic text
+ if ( value == KGSSettingOn )
+ {
+ iListboxItemArray->SetDynamicTextL( settingItem, settingOn->Des() );
+ }
+ else
+ {
+ iListboxItemArray->SetDynamicTextL( settingItem, settingOff->Des() );
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); //settingOn, settingOff
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( settingItem,
+ CGSListBoxItemTextArray::EVisible );
+ }
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeCallItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::GetHelpContext(TCoeHelpContext& aContext) const
+// Gets Help
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::GetHelpContext(TCoeHelpContext& aContext) const
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::GetHelpContext");
+ aContext.iMajor = KUidGS;
+ aContext.iContext = KSCP_HLP_CALL;
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::GetHelpContext");
+ }
+
+// ---------------------------------------------------------------------------
+// Creates Call Completion When Busy Subscriber item.
+//
+// ---------------------------------------------------------------------------
+//
+/*
+void CGSCallPluginContainer::MakeCCBSItemL()
+ {
+ if ( FeatureManager::FeatureSupported( KFeatureIdPhoneCcbs ) )
+ {
+ iListboxItemArray->SetItemVisibilityL( EGSCCBSItemId,
+ CGSListBoxItemTextArray::EVisible );
+ }
+ }
+*/
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::CurrentFeatureId()
+//
+// ---------------------------------------------------------------------------
+//
+TInt CGSCallPluginContainer::CurrentFeatureId( ) const
+ {
+ return iListboxItemArray->CurrentFeature( );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Creates Soft reject text item.
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeSoftRejectTxtItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeSoftRejectTxtItemL");
+ HBufC* dynamicText = HBufC::NewLC( KGSSMSTxtEditorLength );
+ TPtr string( dynamicText->Des() );
+ string.Zero();
+
+ GetSoftRejectTextL( string );
+ if ( string.Length() == 0 )
+ {
+ string = KGSEmptySpace;
+ }
+
+
+ AknTextUtils::ReplaceCharacters( string, KGSReplaceListControlChars,
+ TChar(' ') );
+
+ iListboxItemArray->SetDynamicTextL( EGSSoftRejectTextItemId, string );
+
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ iListboxItemArray->SetItemVisibilityL( EGSSoftRejectTextItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeSoftRejectTxtItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// Gets the value to the Soft Reject Txt.
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::GetSoftRejectTextL( TDes& aSoftRejectTxt )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::GetSoftRejectTextL");
+ TInt value = KGSSettingOff;
+
+ TCallSettId keyName = EGSSoftRejectDefault;
+ iModel->GetCallSettingValue( keyName, value );
+
+ if ( value == KGSSettingOff )
+ {
+ HBufC* defaultText = ReadFromResourceL( R_SOFT_REJECT_DEFAULT_TXT );
+ CleanupStack::PushL( defaultText );
+ aSoftRejectTxt = *defaultText;
+ CleanupStack::PopAndDestroy(); //defaultText
+ }
+ else
+ {
+ TGSSMSTextEditor softRejectTxt;
+ iModel->GetSoftRejectText( softRejectTxt );
+ aSoftRejectTxt = softRejectTxt;
+ }
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::GetSoftRejectTextL");
+ }
+
+// ---------------------------------------------------------
+// CGSCallPluginContainer::ReadFromResourceL
+// ---------------------------------------------------------
+//
+HBufC* CGSCallPluginContainer::ReadFromResourceL(
+ TInt aResourceId )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::ReadFromResourceL");
+ // Find the resource file
+ RConeResourceLoader loader( *iCoeEnv );
+ TParse parse;
+ parse.Set( KGSSoftRejectResource, &KDC_RESOURCE_FILES_DIR, NULL );
+ TFileName fileName( parse.FullName() );
+
+ // Get language of resource file
+ BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+
+ // Open resource file
+ TInt err = loader.Open( fileName );
+ if ( err == KErrNotFound )
+ {
+ return NULL;
+ }
+
+ CleanupClosePushL( loader );
+ HBufC* result = StringLoader::LoadL( aResourceId );
+ CleanupStack::PopAndDestroy(); //loader & it is closed also.
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::ReadFromResourceL");
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// Creates Replace Prefix list box item.
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeReplacePrefixItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> MakeReplacePrefixItemL");
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ const TInt changeMode = iModel->PrefixChangeModeL();
+ ptrBuffer = ( *iChangeModeItems )[ changeMode ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSReplacePrefixItemId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSReplacePrefixItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--MakeReplacePrefixItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// Creates Show Call Duration list box item.
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeCallDurationItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> MakeCallDurationItemL");
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ const TInt duration = iModel->CallDurationL();
+ ptrBuffer = ( *iCallDurationItems )[ duration ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSShowCallDurationItemId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSShowCallDurationItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--MakeCallDurationItemL");
+ }
+
+// ---------------------------------------------------------------------------
+// Creates Long Press Call Key list box items.
+//
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeLongPressCallKeyItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> MakeLongPressCallKeyItemL");
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ TInt statusLongPressCallKey = iModel->LongPressCallKeyL();
+ // Here we again decrement by 1 so that values resemble appropriate title
+ // EGSLongPressCallKeyVoiceCall ------> InActive in GS
+ // EGSLongPressCallKeyVideoCall ------> Video Call in GS
+ // Refer to GSCallPlugin.hrh file for more info for the description
+ iModel->MapLongPressKeyCallKeyValue( statusLongPressCallKey );
+ ptrBuffer = ( *iLongPressCallKeyItems )[ statusLongPressCallKey ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSLongPressCallKeyItemId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSLongPressCallKeyItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--MakeLongPressCallKeyItemL");
+ }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginContainer::MakeOwnImageVtCallItemL
+//
+// Own image mute status on video call
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::MakeOwnImageVtCallItemL()
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> MakeOwnImageVtCallItemL");
+ HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 );
+ TPtr ptrBuffer ( dynamicText->Des() );
+
+ TInt statusOwnImageVtCallKey = iModel->OwnImageVtCallStatusL();
+ ptrBuffer = ( *iOwnImageVtCallItems )[ statusOwnImageVtCallKey ];
+
+ // Finally, set the dynamic text
+ iListboxItemArray->SetDynamicTextL( EGSOwnImageVtCallItemId, ptrBuffer );
+ CleanupStack::PopAndDestroy( dynamicText );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL( EGSOwnImageVtCallItemId,
+ CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--MakeOwnImageVtCallItemL");
+ }
+
+
+// ---------------------------------------------------------------------------
+// Sets observer for MSK label updations.
+// ---------------------------------------------------------------------------
+//
+void CGSCallPluginContainer::SetMiddleSoftkeyObserver(
+ MGsFWMSKObserver* aObserver )
+ {
+ if ( !iMSKObserver && aObserver )
+ {
+ iMSKObserver = aObserver;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CGSCallPluginContainer::OfferKeyEventL
+// Called when a key is pressed.
+// ---------------------------------------------------------------------------
+TKeyResponse CGSCallPluginContainer::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ switch ( aKeyEvent.iCode )
+ {
+ case EKeyUpArrow:
+ case EKeyDownArrow:
+ {
+ TKeyResponse listboxResp =
+ iListBox->OfferKeyEventL( aKeyEvent, aType );
+ if ( iMSKObserver )
+ {
+ iMSKObserver->CheckMiddleSoftkeyLabelL();
+ }
+ return listboxResp;
+ }
+ case EKeyLeftArrow:
+ case EKeyRightArrow:
+ // Listbox takes all events even if it doesn't use them
+ return EKeyWasNotConsumed;
+ default:
+ break;
+ }
+
+ return iListBox->OfferKeyEventL( aKeyEvent, aType );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// CGSCallPluginContainer::MakeSlideSettingsItem
+// Create a slide settings item ( "Opening slide to answer call" or "Closing slide to end call" )
+//
+// ---------------------------------------------------------------------------
+void CGSCallPluginContainer::MakeSlideSettingsItem( TInt aItemId )
+ {
+ __GSLOGSTRING("[CGSCallPluginContainer]--> CGSCallPluginContainer::MakeSlideSettingsItem");
+
+ HBufC* settingValue = NULL;
+ TInt value(0);
+
+ switch ( aItemId )
+ {
+ case EGSOpeningSlideAnswerCallItemId:
+ iModel->GetCallSettingValue( EGSOpeningSlideAnswerCall,value );
+ if ( EGSOpeningSlideAnswerCallOn == value )
+ {
+ settingValue = StringLoader::LoadLC
+ ( R_CP_SETTING_OPENING_SLIDE_ANSWER );
+ }
+ else
+ {
+ settingValue = StringLoader::LoadLC
+ ( R_CP_SETTING_OPENING_SLIDE_NOT_ANSWER );
+ }
+ break;
+ case EGSClosingSlideEndCallItemId:
+ iModel->GetCallSettingValue( EGSClosingSlideEndCall,value );
+ if ( EGSClosingSlideEndCallOn == value )
+ {
+ settingValue = StringLoader::LoadLC
+ ( R_CP_SETTING_CLOSING_SLIDE_END );
+ }
+ else
+ {
+ settingValue = StringLoader::LoadLC
+ ( R_CP_SETTING_CLOSING_SLIDE_NOT_END );
+ }
+ break;
+ default:
+ Panic( KGSNameOfClass, EInvalidIndex );
+ }
+
+ iListboxItemArray->SetDynamicTextL( aItemId,settingValue->Des() );
+
+ CleanupStack::PopAndDestroy( settingValue );
+
+ // And add to listbox
+ iListboxItemArray->SetItemVisibilityL
+ ( aItemId,CGSListBoxItemTextArray::EVisible );
+
+ __GSLOGSTRING("[CGSCallPluginContainer] <--CGSCallPluginContainer::MakeSlideSettingsItem");
+ }
+//End of File