diff -r 8bda91a87a00 -r 8ee96d21d9bf gssettingsuis/Gs/GSCallPlugin/src/GSCallPlugin.cpp --- a/gssettingsuis/Gs/GSCallPlugin/src/GSCallPlugin.cpp Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2177 +0,0 @@ -/* -* 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: Call submenu in General Settings. -* -*/ - - -// INCLUDE FILES -#include "GSCallPlugin.h" //for CGSCallPlugin -#include "GSCallPluginContainer.h" //for CGSCallPluginContainer -#include "GsLogger.h" -#include "GSCallPlugin.h" //for pluginUID -#include // for title pane -#include -#include // For HlpLauncher -#include //for Note Wrappers -#include //for Radiobutton pages -#include //for TextSettings pages -#include //for Message Query Dialog -#include -#include -#include -#include - -// headers for still image -#include -#include // Image selection -#include - -#include //for menu bar -#include //for container -#include //for CPsuiContainer -#include -#include //for PIN2 query -#include //for TSecUi -#include //for CSecuritySettings -#include //for resource IDs -#include -#include -#include //for CGSListBoxItemTextArray - -#include -#include -#include - -// LOCAL CONSTANTS -_LIT( KGSNameOfClass, "GSCallPlugin" ); -_LIT( KGSVTStillImgPath, "" ); -//Use default values for external calls. -const TInt KGSUseDefault = 0; -//Call Prefix setting page items -const TInt KGSSettingItemOff = 1; -const TInt KGSSettingItemOn = 0; -//Lines in setting page. -const TInt KGSFirstLine = 0; -const TInt KGSSecondLine = 1; -// Middle Softkey control ID. -const TInt KGSMSKControlID = 3; - -// VT still image values. Basically everything above 0 should be considered as -// 'On' value so do not compare with 1 -const TInt KGSVTStillImageOff = 0; - - -// ========================= MEMBER FUNCTIONS ================================ -// --------------------------------------------------------------------------- -// -// Constructor. -// -// --------------------------------------------------------------------------- -CGSCallPlugin::CGSCallPlugin() - :iMskCommandFlag( ETrue ) - { - } - -// --------------------------------------------------------------------------- -// -// Symbian OS two-phased constructor (second phase) -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::ConstructL() - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::ConstructL"); - OpenLocalizedResourceFileL( KGSCallPluginResourceFileName, - iResourceLoader ); - - BaseConstructL( R_GS_CALL_VIEW ); - - iModel = CGSCallPluginModel::NewL(); - iRestrictedClir = iModel->RestrictedSendCallerIdSupportedL(); - iSecureClir = iModel->SecureSendCallerIdSupportedL(); - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - Model created"); - iSettings = CPsetContainer::NewL(); - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - PSetContainer created"); - iObsContainer = CPsuiContainer::NewL(); - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - PsuiContainer created"); - iCwObserver = iObsContainer->CreateCWObsL(); - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - CreateCWObsL done"); - iWaiting = iSettings->CreateCWObjectL( *iCwObserver ); - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - CreateCWObjectL done"); - iSsSettings = new (ELeave) RSSSettings; - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - SSSettings created"); - - User::LeaveIfError( iSsSettings->Open() ); - User::LeaveIfError( iSsSettings->RegisterAll( *this ) ); - __GSLOGSTRING("[GSCallPlugin]--> ConstructL - SSSettings opening successful"); - -#ifndef __WINS__ - iSsSettings->Get( ESSSettingsAls, iAls ); - iSsSettings->Get( ESSSettingsAlsBlocking, iAlsBlock ); -#endif //__WINS__ - - iVTImageSelectionOngoing = EFalse; - - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::ConstructL"); - } - -// --------------------------------------------------------------------------- -// -// Symbian OS two-phased constructor (first phase) -// -// --------------------------------------------------------------------------- -CGSCallPlugin* CGSCallPlugin::NewLC() - { - CGSCallPlugin* self = new ( ELeave ) CGSCallPlugin; - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::NewL() -// Static constructor -// -// --------------------------------------------------------------------------- -// -CGSCallPlugin* CGSCallPlugin::NewL( TAny* /*aInitParams*/ ) - { - CGSCallPlugin* self = new(ELeave) CGSCallPlugin(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// -// Destructor -// -// --------------------------------------------------------------------------- -CGSCallPlugin::~CGSCallPlugin() - { - __GSLOGSTRING("[GSCallPlugin] ~CGSCallPlugin()|->"); - - delete iObsContainer; - delete iCwObserver; - if ( iWaiting ) - { - delete iWaiting; - } - delete iSettings; - - if ( iSsSettings ) - { - iSsSettings->CancelAll( *this ); - iSsSettings->Close(); - delete iSsSettings; - } - - if( iModel ) - { - delete iModel; - } - - if( iImageHandler ) - { - delete iImageHandler; - } - - __GSLOGSTRING("[GSCallPlugin] ~CGSCallPlugin()-|"); - } - -// --------------------------------------------------------------------------- -// -// Returns Id of the Call submenu -// -// --------------------------------------------------------------------------- -TUid CGSCallPlugin::Id() const - { - return KCallPluginUID; - } - -// --------------------------------------------------------------------------- -// -// Handles user inputs in Options menu -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::HandleCommandL( TInt aCommand ) - { - __GSLOGSTRING1("[GSCallPlugin] HandleCommandL(%d)|->", aCommand ); - switch ( aCommand ) - { - case EGSMSKCmdAppChange: - HandleListBoxSelectionL(); - break; - // Command Obtained from Context Options - // set in ProcessCommandL() - case ECFCmdActivate: - case EGSCmdCallWaitActivate: - iWaiting->SetCallWaitingL( MPsetCallWaiting::EActivateCallWaiting, - EAllTeleAndBearer ); - break; - // Command Obtained from Context Options - // set in ProcessCommandL() - case ECFCmdCheckStatus: - case EGSCmdCallWaitInquiry: - iWaiting->GetCallWaitingStatusL(); - break; - // Command Obtained from Context Options - // set in ProcessCommandL() - case ECFCmdCancel: - case EGSCmdCallWaitDeactivate: - iWaiting->SetCallWaitingL( MPsetCallWaiting::EDeactivateCallWaiting, - EAllTeleAndBearer ); - break; - case EAppCmdCreatePopupList: - { - const TInt currentFeatureId = Container()->CurrentFeatureId(); - HandleCreatePopupL( currentFeatureId ); - } - break; - case EAknSoftkeyBack: - iAppUi->ActivateLocalViewL( KGSTelPluginUid ); - break; - case EAknCmdHelp: - { - if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - HlpLauncher::LaunchHelpApplicationL( - iEikonEnv->WsSession(), iAppUi->AppHelpContextL() ); - } - break; - } - default: - iAppUi->HandleCommandL( aCommand ); - break; - } - __GSLOGSTRING("[CGSCallPlugin] HandleCommandL()-|"); - } - - -// --------------------------------------------------------------------------- -// -// Handles user inputs in Options menu -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::ProcessCommandL( TInt aCommand ) - { - MenuBar()->SetContextMenuTitleResourceId( R_CALL_DIVERT_MSK_CONTEXTMENUBAR ); - // Call base class - CAknView::ProcessCommandL( aCommand ); - } -// --------------------------------------------------------------------------- -// -// Activates the view -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::DoActivateL( const TVwsViewId& aPrevViewId , - TUid aCustomMessageId, - const TDesC8& aCustomMessage ) - { - __GSLOGSTRING( "[GSCallPlugin] DoActivateL()|->" ); - CGSBaseView::DoActivateL( aPrevViewId, aCustomMessageId, aCustomMessage ); - Container()->SetMiddleSoftkeyObserver( this ); - SetMiddleSoftKeyLabelL( R_CALL_MSK_CHANGE, EGSMSKCmdAppChange ); - // This way we set which command is set for MSK - iMskCommandFlag = ETrue; -// iContainer->iListBox->SetTopItemIndex( iTopItemIndex ); - -// if ( iCurrentItem >= 0 && -// iCurrentItem < iContainer->iListBox->Model()->NumberOfItems() ) -// { -// iContainer->iListBox->SetCurrentItemIndexAndDraw( iCurrentItem ); -// } - CheckMiddleSoftkeyLabelL(); - - // If AppUid is different or placeholderview is used, this view has been launched from outside GS - if ( iPrevViewId.iAppUid != KUidGS || iPrevViewId.iViewUid == TUid::Uid(0x0DEADBED ) ) - { - CEikButtonGroupContainer* cbaGroup = Cba(); - if( cbaGroup ) - { - HBufC* rightSKText = StringLoader::LoadLC ( R_GS_CBA_EXIT ); - TPtr rskPtr = rightSKText->Des(); - cbaGroup->SetCommandL( 2, EAknSoftkeyExit, *rightSKText ); - CleanupStack::PopAndDestroy( rightSKText ); - } - } - - __GSLOGSTRING( "[GSCallPlugin] DoActivateL()-|" ); - } - -// --------------------------------------------------------------------------- -// -// Deactivates the view -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::DoDeactivate() - { - __GSLOGSTRING("[GSCallPlugin]--> DoDeactivate"); - if ( iContainer ) - { - if ( iContainer->iListBox && iContainer->iListBox->View() ) - { - iTopItemIndex = iContainer->iListBox->TopItemIndex(); - iCurrentItem = iContainer->iListBox->CurrentItemIndex(); - } - CGSBaseView::DoDeactivate(); - } - __GSLOGSTRING("[GSCallPlugin] <--DoDeactivate"); - } - - - -// --------------------------------------------------------------------------- -// -// Handle status pane size changed -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::HandleStatusPaneSizeChange() - { - if ( Container() ) - Container()->SetRect( ClientRect()); - } - - -// --------------------------------------------------------------------------- -// -// Shows setting page - for ON/OFF setting items -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::ShowSettingPageL( TGSCallItemIds aPage ) - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::ShowSettingPageL"); - - CDesCArrayFlat* items = - new ( ELeave ) CDesCArrayFlat( KGSCallPopupMenuItems ); - CleanupStack::PushL( items ); - - TInt titleID = 0; - TInt currentSettingItem = KErrNone; - TCallSettId keyName = EGSNotSet; - - switch ( aPage ) - { - case EGSOpeningSlideAnswerCallItemId: - keyName = EGSOpeningSlideAnswerCall; - titleID = R_CP_SETTING_TITLE_OPENING_SLIDE; - AppendItemL( *items, R_CP_SETTING_OPENING_SLIDE_ANSWER ); - AppendItemL( *items, R_CP_SETTING_OPENING_SLIDE_NOT_ANSWER ); - break; - case EGSClosingSlideEndCallItemId: - keyName = EGSClosingSlideEndCall; - titleID = R_CP_SETTING_TITLE_CLOSING_SLIDE; - AppendItemL( *items, R_CP_SETTING_CLOSING_SLIDE_END ); - AppendItemL( *items, R_CP_SETTING_CLOSING_SLIDE_NOT_END ); - break; - case EGSICSendIntCallIdItemId: - titleID = R_SET_IC_CLIR; - AppendItemL( *items, R_SET_IC_CLIR_ON ); - AppendItemL( *items, R_SET_IC_CLIR_OFF ); - break; - case EGSICWaitingItemId: - titleID = R_SET_IC_WAITING; - AppendItemL( *items, R_SET_IC_WAITING_ACTIVE ); - AppendItemL( *items, R_SET_IC_WAITING_NOT_ACTIVE ); - break; - case EGSICPreferredTelephonyId: - titleID = R_SET_IC_PREFERRED_TELEPHONE; - AppendItemL( *items, R_SET_IC_PREFERRED_TELEPHONE_CS ); - AppendItemL( *items, R_SET_IC_PREFERRED_TELEPHONE_PS ); - break; - case EGSDndItemId: - titleID = R_SET_IC_DND; - AppendItemL( *items, R_SET_IC_DND_ACTIVE ); - AppendItemL( *items, R_SET_IC_DND_NOT_ACTIVE ); - break; - case EGSCliItemId: - titleID = R_OWN_NUMBER_SENDING_HEADING; - - // Restrict the default option if necessary - if ( !iRestrictedClir ) - { - AppendItemL( *items, R_CLI_SENDING_DEFAULT ); - } - - AppendItemL( *items, R_CLI_SENDING_ON ); - AppendItemL( *items, R_CLI_SENDING_OFF ); - break; - case EGSSummaryAfterCallItemId: - keyName = EGSSummaryAfterCall; - titleID = R_CTERM_SETTING; - AppendItemL( *items, R_CALL_TERMINATION_NOTE_ON ); - AppendItemL( *items, R_CALL_TERMINATION_NOTE_OFF ); - break; - default: - Panic( KGSNameOfClass, EInvalidIndex ); - break; - } - - if ( aPage == EGSICSendIntCallIdItemId || - aPage == EGSICWaitingItemId || - aPage == EGSICPreferredTelephonyId || - aPage == EGSDndItemId ) - { - currentSettingItem = GetLineForSelectedVoipSetting( aPage ); - } - // CLI item does not have a keyName and/or literal, hence - // this additional checking for CLI item. - else if ( aPage != EGSCliItemId && keyName != EGSNotSet ) - { - iModel->GetCallSettingValue( keyName, currentSettingItem ); - __GSLOGSTRING1("[GSCallPlugin] ShowSettingPageL: currentSettingItem: %d", currentSettingItem); - // switch value to settings page value - SwitchValue( currentSettingItem ); - } - else - { - TInt err = iSsSettings->Get( ESSSettingsClir, currentSettingItem ); - __GSLOGSTRING1("[GSCallPlugin] ShowSettingPageL: currentSettingItem1: %d", currentSettingItem); - if ( err == KErrNone ) - { - CliConvertValue( currentSettingItem ); - - if ( iRestrictedClir ) - { - // For indexing listbox which does not include KGSCliDefault - currentSettingItem--; - } - } - } - - HBufC* buffer = NULL; - - buffer = HBufC::NewLC( KGSMaxStringLength ); - TPtr str = buffer->Des(); - StringLoader::Load( str, titleID ); - - TPtr string = buffer->Des(); - const TInt oldSettingItem = currentSettingItem; - CAknRadioButtonSettingPage* dlg = new ( ELeave ) - CAknRadioButtonSettingPage( - &string, - EAknSettingPageNoOrdinalDisplayed, - KGSUseDefault, - KGSUseDefault, - R_SETTING_PAGE, - currentSettingItem, - items ); - - if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - const TBool settingItemChanged = oldSettingItem != currentSettingItem; - - if ( aPage == EGSICSendIntCallIdItemId || - aPage == EGSICWaitingItemId || - aPage == EGSICPreferredTelephonyId || - aPage == EGSDndItemId ) - { - // Change new VoIP setting based selected line. - SetVoipSettingBasedSelectedLine( aPage, currentSettingItem ); - } - else - { - if ( aPage != EGSCliItemId && keyName != EGSNotSet ) - { - // switch settings page value to shared data value - SwitchValue( currentSettingItem ); - iModel->SetCallSettingValue( keyName, currentSettingItem ); - __GSLOGSTRING1("[GSCallPlugin] ShowSettingPageL: currentSettingItem2: %d", currentSettingItem); - } - else - { - if ( iRestrictedClir ) - { - // For indexing listbox which does not include KGSCliDefault - currentSettingItem++; - } - - CliConvertValue( currentSettingItem ); - - // Secure setting of Send Caller Id if required - if ( !iSecureClir ) - { - iSsSettings->Set( ESSSettingsClir, currentSettingItem ); - } - else - { - if ( settingItemChanged && MakeSecCodeQueryL() ) - { - iSsSettings->Set( ESSSettingsClir, currentSettingItem ); - } - } - __GSLOGSTRING1("[GSCallPlugin] ShowSettingPageL: currentSettingItem3: %d", currentSettingItem); - } - } - - UpdateListBoxL( aPage, currentSettingItem ); - } - - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( items ); - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::ShowSettingPageL"); - } - -// --------------------------------------------------------------------------- -// -// Shows ALS setting page - either line blocking or line selected -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::ShowAlsSettingPageL( TGSCallItemIds aPage ) - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::ShowAlsSettingPageL"); - CDesCArrayFlat* items = new ( ELeave ) CDesCArrayFlat( KGSCallPopupMenuItems ); - CleanupStack::PushL( items ); - - TInt currentItem = 0; - - switch ( aPage ) - { - case EGSLineChangeItemId: - //causes PIN2 query to launch, if necessary - if ( iAlsBlock == ESSSettingsAlsBlockingOn ) - { - TInt pin = MakePin2QueryL(); - if ( pin != KGSPinQueryOk ) - { - CleanupStack::PopAndDestroy( items ); - return; //User failed in Pin2 Query - } - } - AppendItemL( *items, R_ALS_LINE1 ); - AppendItemL( *items, R_ALS_LINE2 ); - currentItem = iAls - 1; - break; - case EGSALSBlockItemId: - { - TInt pin = MakePin2QueryL(); - if ( pin != KGSPinQueryOk ) - { - CleanupStack::PopAndDestroy( items ); - return; //User failed in Pin2 Query - } - AppendItemL( *items, R_ALS_LINE_BLOCKING_ON ); - AppendItemL( *items, R_ALS_LINE_BLOCKING_OFF ); - if ( iAlsBlock == ESSSettingsAlsBlockingOn ) - { - currentItem = KGSAlsBlockOn; - } - else - { - currentItem = KGSAlsBlockOff; - } - break; - } - default: - Panic( KGSNameOfClass, EInvalidIndex ); - break; - } - HBufC* buffer = - HBufC::NewLC( KGSMaxStringLength ); - TPtr string( buffer->Des() ); - StringLoader::Load( - string, - ( aPage == EGSLineChangeItemId ) ? - R_ALS_LINE_SELECTION_MODE : - R_ALS_PHONELINE_BLOCK_MODE ); - - CAknRadioButtonSettingPage* dlg = new ( ELeave ) - CAknRadioButtonSettingPage( - &string, - EAknSettingPageNoOrdinalDisplayed, - KGSUseDefault, - KGSUseDefault, - R_SETTING_PAGE, - currentItem, - items ); - - // handle als and blocking separately... - if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - if ( aPage == EGSALSBlockItemId ) - { - AlsBlockConvertValue( currentItem ); - iSsSettings->Set( ESSSettingsAlsBlocking, iAlsBlock ); - } - else if ( aPage == EGSLineChangeItemId ) - { - iAls = currentItem + 1; - iSsSettings->Set( ESSSettingsAls, iAls ); - } - } - CleanupStack::PopAndDestroy( 2 ); // items, string - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::ShowAlsSettingPageL"); - } - - -// --------------------------------------------------------------------------- -// -// Changes value from 0 to 1 and vice versa -// Used when Central Repository is enabled -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::SwitchOnOffSetting( TCallSettId aSetting ) - { - TInt value = KGSSettingOff; - // Reads a value and switches value (0 -> 1, 1 -> 0). - iModel->GetCallSettingValue( aSetting, value ); - SwitchValue( value ); - iModel->SetCallSettingValue( aSetting, value ); - } - -// --------------------------------------------------------------------------- -// -// Appends given item to given list -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::AppendItemL( CDesCArrayFlat& aList, TInt aItem ) - { - HBufC* string = StringLoader::LoadLC( aItem ); - aList.AppendL( *string ); - CleanupStack::PopAndDestroy( string ); - } - -// --------------------------------------------------------------------------- -// -// Selects what kind of menu is created -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::HandleCreatePopupL( TInt aIndex ) - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::HandleCreatePopupL"); - switch ( aIndex ) - { - case EGSCallWaitingItemId: - break; - case EGSLineChangeItemId: - ShowAlsSettingPageL( EGSLineChangeItemId ); - break; - case EGSALSBlockItemId: - ShowAlsSettingPageL( EGSALSBlockItemId ); - break; - case EGSSoftRejectTextItemId: - ShowSoftRejectSettingPageL(); - UpdateListBoxL( EGSSoftRejectTextItemId, KGSNotUsed ); - break; - case EGSStillImageItemId: - if ( FeatureManager::FeatureSupported( - KFeatureIdCsVideoTelephony ) ) - { - ShowVTStillImageSettingPageL(); - } - break; - case EGSOwnImageVtCallItemId: - if ( FeatureManager::FeatureSupported( - KFeatureIdCsVideoTelephony ) ) - { - ShowOwnImageVtCallSettingPageL(); - } - break; - case EGSReplacePrefixItemId: - if ( FeatureManager::FeatureSupported( KFeatureIdJapanPrefixChange ) ) - { - ChangePrefixSettingL( ETrue ); - UpdateListBoxL( EGSReplacePrefixItemId, KGSNotUsed ); - } - break; - case EGSShowCallDurationItemId: - ChangeCallDurationSettingL( ETrue ); - UpdateListBoxL( EGSShowCallDurationItemId, KGSNotUsed ); - break; - case EGSLongPressCallKeyItemId: - #ifdef RD_VT_LONG_SEND_KEY - ChangeLongPressCallKeySettingL( ETrue ); - #endif - break; - default: - ShowSettingPageL( static_cast ( aIndex ) ); - break; - } - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::HandleCreatePopupL"); - } - -// --------------------------------------------------------------------------- -// -// Sets title text to a setting page -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::SetTitleToSettingL( CAknRadioButtonSettingPage& aDlg, - TInt aTitleID ) - { - HBufC* title = StringLoader::LoadLC ( aTitleID ); - aDlg.SetSettingTextL( *title ); - CleanupStack::PopAndDestroy( title ); - } - - -/*// --------------------------------------------------------------------------- -// -// Sets title text to a status pane -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::SetTitleL( TInt aTitleID ) - { - CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane(); - CleanupStack::PushL(statusPane); - CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid( - EEikStatusPaneUidTitle)); - CleanupStack::PushL( titlePane ); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, aTitleID ); - titlePane->SetFromResourceL( reader ); - - CleanupStack::PopAndDestroy();//reader - - CleanupStack::Pop(titlePane); - CleanupStack::Pop(statusPane); - } -*/ - -// --------------------------------------------------------------------------- -// -// Switches value between setting page and shared data. -// Values in shared data do not map nicely to values in setting menu, -// therefore sharedData:SettingOn(1) => settingPage:IndexOn(0). -// --------------------------------------------------------------------------- -TInt CGSCallPlugin::SwitchValue( TInt& aValue ) - { - if ( aValue == KGSSettingOn ) - { - aValue = KGSIndexOn; - } - else if ( aValue == KGSSettingOff ) - { - aValue = KGSIndexOff; - } - return aValue; - } - -// --------------------------------------------------------------------------- -// -// Observes changes to ALS, ALS Block and CLIR values. -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::PhoneSettingChanged( TSSSettingsSetting aSetting, - TInt aNewValue ) - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::PhoneSettingChanged"); - TInt updateMe = KErrNone; - switch( aSetting ) - { - case ESSSettingsClir: - iClir = aNewValue; - updateMe = EGSCliItemId; - break; - case ESSSettingsAls: - iAls = aNewValue; - updateMe = EGSLineChangeItemId; - break; - case ESSSettingsAlsBlocking: - iAlsBlock = aNewValue; - updateMe = EGSALSBlockItemId; - TRAP_IGNORE( ShowAlsBlockNoteL() ); - break; - default: - break; - } - __GSLOGSTRING1("[GSCallPlugin] PhoneSettingChanged: aNewValue: %d", aNewValue); - if ( ( iContainer ) && ( updateMe != KErrNone ) ) - { - TRAP_IGNORE( UpdateListBoxL( updateMe, aNewValue ) ); - } - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::PhoneSettingChanged"); - } - -// --------------------------------------------------------------------------- -// -// Shows notes when Als Block value has been changed. -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::ShowAlsBlockNoteL() - { - TInt noteText; - if ( iAlsBlock == ESSSettingsAlsBlockingOn ) - { - noteText = R_ALS_LINE_BLOCKING_ON_SEL; - } - else - { - noteText = R_ALS_LINE_BLOCKING_OFF_SEL; - } - - HBufC* string = StringLoader::LoadLC( noteText ); - CAknInformationNote* note = new ( ELeave ) CAknInformationNote(); - note->ExecuteLD( *string ); - CleanupStack::PopAndDestroy( string ); - } - -// --------------------------------------------------------------------------- -// -// Creates new iContainer. -// -// --------------------------------------------------------------------------- -void CGSCallPlugin::NewContainerL() - { - __GSLOGSTRING("[GSCallPlugin]--> NewContainerL"); - iContainer = new (ELeave) CGSCallPluginContainer; - __GSLOGSTRING("[GSCallPlugin] <--NewContainerL"); - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::HandleListBoxSelectionL -// -// Handle user selection in the listbox to perform an associated action -// --------------------------------------------------------------------------- -void CGSCallPlugin::HandleListBoxSelectionL() - { - TBool updateValue = EFalse; - TInt value( KErrNone ); - CEikMenuBar* menuBar = this->MenuBar(); - - const TInt currentFeatureId = Container()->CurrentFeatureId(); - - TBool featureVoipSupported = iModel->VoIPSupported(); - - switch ( currentFeatureId ) - { - case EGSOpeningSlideAnswerCallItemId: - SwitchOnOffSetting( EGSOpeningSlideAnswerCall ); - updateValue = ETrue; - break; - case EGSClosingSlideEndCallItemId: - SwitchOnOffSetting( EGSClosingSlideEndCall ); - updateValue = ETrue; - break; - case EGSCliItemId: - ShowSettingPageL( EGSCliItemId ); - break; - case EGSCallWaitingItemId: - iRockerPress = ETrue; - menuBar->SetMenuType(CEikMenuBar::EMenuContext); - menuBar->TryDisplayMenuBarL(); - menuBar->SetMenuType(CEikMenuBar::EMenuOptions); - iRockerPress = EFalse; - break; - case EGSICSendIntCallIdItemId: // Send my Internet call id. - if ( featureVoipSupported ) - { - iModel->GetVoIPCallSettingValue( EGSVoIPSendIntCallId, value ); - - if ( value == EGSSendIntCallIdOff ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPSendIntCallId, EGSSendIntCallIdOn ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPSendIntCallId, EGSSendIntCallIdOff ); - - TInt status( KErrNone ); - iModel->GetSCCPStatus( status ); - - if ( status == 1 ) - { - HBufC* prompt = StringLoader:: - LoadLC( R_QTN_VOIP_SCCP_NO_CLIR ); - CAknInformationNote* note = - new(ELeave) CAknInformationNote( ETrue ); - note->ExecuteLD( *prompt ); - CleanupStack::PopAndDestroy( prompt ); - } - } - updateValue = ETrue; - } - break; - case EGSICWaitingItemId: // Internet call waiting item. - if ( featureVoipSupported ) - { - iModel->GetVoIPCallSettingValue( EGSVoIPCW, value ); - - if ( value == EGSCSCallWaitingOff ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPCW, EGSCSCallWaitingOn ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPCW, EGSCSCallWaitingOff ); - } - updateValue = ETrue; - } - break; - case EGSICPreferredTelephonyId: // Preferred call type. - if ( featureVoipSupported ) - { - iModel->GetVoIPCallSettingValue( EGSVoIPPreType, value ); - - if ( value == EGSPreferredCS ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPPreType, EGSPreferredPS ); - - // Show message query dialog if preferred call - // setting was changed to the Int. Telephone. - ShowPreferredTelephonyNoteL(); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPPreType, EGSPreferredCS ); - } - updateValue = ETrue; - } - break; - case EGSDndItemId: // Do not disturb. - if ( featureVoipSupported ) - { - iModel->GetVoIPCallSettingValue( EGSVoIPDnd, value ); - - if ( value == EGSCSCallDndOff ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPDnd, EGSCSCallDndOn ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPDnd, EGSCSCallDndOff ); - } - updateValue = ETrue; - } - break; - case EGSSoftRejectTextItemId: - ShowSoftRejectSettingPageL(); - updateValue = ETrue; - break; - case EGSSummaryAfterCallItemId: - SwitchOnOffSetting( EGSSummaryAfterCall ); - updateValue = ETrue; - break; - case EGSLineChangeItemId: - SwitchAlsSettingL(); - break; - case EGSALSBlockItemId: - ShowAlsSettingPageL( EGSALSBlockItemId ); - break; - //Still image listbox creating - case EGSStillImageItemId: - if ( FeatureManager::FeatureSupported( - KFeatureIdCsVideoTelephony ) && - !iVTImageSelectionOngoing ) - { - //Locking listbox selection so user cannot click - //VT still image item twice - iVTImageSelectionOngoing = ETrue; - - //This takes some time - ShowVTStillImageSettingPageL(); - - //Releasing lock - iVTImageSelectionOngoing = EFalse; - } - break; - case EGSOwnImageVtCallItemId: - if ( FeatureManager::FeatureSupported( - KFeatureIdCsVideoTelephony ) ) - { - ShowOwnImageVtCallSettingPageL(); - } - break; - case EGSReplacePrefixItemId: - if ( FeatureManager::FeatureSupported( KFeatureIdJapanPrefixChange ) ) - { - ChangePrefixSettingL( EFalse ); - updateValue = ETrue; - } - break; - case EGSShowCallDurationItemId: - ChangeCallDurationSettingL( EFalse ); - updateValue = ETrue; - break; - case EGSLongPressCallKeyItemId: - #ifdef RD_VT_LONG_SEND_KEY - ChangeLongPressCallKeySettingL( EFalse ); - #endif - break; - default: - break; - } - if ( updateValue ) - { - UpdateListBoxL( currentFeatureId, KGSNotUsed ); - } - } - -// --------------------------------------------------------------------------- -// -// Converts value from setting page to SsSettings: -// settin page: line change disabled(0) => ESSSettingsAlsBlockingOn(2) -// settin page: line change enabled(1) => ESSSettingsAlsBlockingOff(1) -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::AlsBlockConvertValue( TInt& aValue ) - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::AlsBlockConvertValue"); - __GSLOGSTRING1("[GSCallPlugin] AlsBlockConvertValue: aValue: %d", aValue); - if ( aValue == KGSAlsBlockOn ) - { - iAlsBlock = ESSSettingsAlsBlockingOn; - } - else - { - iAlsBlock = ESSSettingsAlsBlockingOff; - } - __GSLOGSTRING1("[GSCallPlugin] AlsBlockConvertValue: aValue: %d", aValue); - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::AlsBlockConvertValue"); - } - -// --------------------------------------------------------------------------- -// -// Converts value from setting page to SsSettings: -// settin page: own number sending default(0) => -// SsSettings: ESSSettingsClirNetworkDefault(0) -// settin page: own number sending on (1) => -// SsSettings: ESSSettingsClirExplicitSuppress(2) -// settin page: own number sending off (2) => -// SsSettings: ESSSettingsClirExplicitInvoke(1) -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::CliConvertValue( TInt& aValue ) - { - switch ( aValue ) - { - case KGSCliDefault: - aValue = ESSSettingsClirNetworkDefault; - break; - case KGSCliOn: - aValue = ESSSettingsClirExplicitSuppress; - break; - case KGSCliOff: - aValue = ESSSettingsClirExplicitInvoke; - break; - default: - //error, return to-be converted value w/o changes - break; - } - } - -// --------------------------------------------------------------------------- -// -// Updates specific value to container. -// -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::UpdateListBoxL( const TInt& aListItem, - TInt aNewValue ) - { - /*if ( aListItem == EGSStillImageItemId ) - { - TRAP_IGNORE( iAvkonAppUi->StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ) ); - SetTitleL( R_GS_CALL_VIEW_TITLE ); - TRAP_IGNORE( iAvkonAppUi->StatusPane()->DrawNow() ); - }*/ - if ( Container() ) - { - Container()->UpdateListBoxL( aListItem, aNewValue ); - } - CheckMiddleSoftkeyLabelL(); - } - -// --------------------------------------------------------------------------- -// -// Before showing a options menu -// -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::DynInitMenuPaneL( TInt aResourceId, - CEikMenuPane* aMenuPane ) - { - __GSLOGSTRING("[GSCallPlugin]--> DynInitMenuPaneL"); - const TInt currentFeatureId = Container()->CurrentFeatureId(); - CEikMenuBar* menuBar = this->MenuBar(); - if ( aResourceId == R_GS_CALL_VIEW_MENU ) - { - if ( currentFeatureId == EGSCallWaitingItemId ) - { - //add CW menu - if (MenuBar()->ItemSpecificCommandsEnabled() || MenuBar()->GetMenuType() == CEikMenuBar::EMenuContext) - { - aMenuPane->AddMenuItemsL( R_GS_CALL_WAIT_VIEW_MENU,EAppCmdCreatePopupList ); - } - - //hide Change if call waiting is selected - aMenuPane->SetItemDimmed( EAppCmdCreatePopupList, ETrue ); - - if ( iRockerPress ) - { - aMenuPane->SetItemDimmed( EAknCmdExit, ETrue ); - } - - if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) - && !iRockerPress ) - { - aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); - } - else - { - aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); - } - } - else - { - //for other items than call waiting - if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) - { - aMenuPane->SetItemDimmed( EAknCmdHelp, EFalse ); - } - else - { - aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); - } - } - } - - __GSLOGSTRING("[GSCallPlugin] <--DynInitMenuPaneL"); - } - -// --------------------------------------------------------------------------- -// -// Requests user to enter PIN2 -// -// --------------------------------------------------------------------------- -// -TInt CGSCallPlugin::MakePin2QueryL() - { - TInt retValue = KErrNone; - TSecUi::InitializeLibL(); - - CSecuritySettings* settings = CSecuritySettings::NewL(); - CleanupStack::PushL( settings ); - - if ( settings->AskPin2L() ) - { - retValue = KGSPinQueryOk; - } - - CleanupStack::PopAndDestroy( settings ); - TSecUi::UnInitializeLib(); - - return retValue; - } - -// --------------------------------------------------------------------------- -// -// Requests user to enter security code -// -// --------------------------------------------------------------------------- -// -TInt CGSCallPlugin::MakeSecCodeQueryL() - { - TBool retValue = EFalse; - TSecUi::InitializeLibL(); - - CSecuritySettings* settings = CSecuritySettings::NewL(); - CleanupStack::PushL( settings ); - - retValue = settings->AskSecCodeL(); - - CleanupStack::PopAndDestroy( settings ); - TSecUi::UnInitializeLib(); - - return retValue; - } - -// --------------------------------------------------------------------------- -// -// Changes value in shared data for Als -// -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::SwitchAlsSettingL() - { - __GSLOGSTRING("[GSCallPlugin]--> CGSCallPlugin::SwitchAlsSettingL"); - //causes PIN2 query to launch, if necessary - if ( iAlsBlock == ESSSettingsAlsBlockingOn ) - { - TInt pin = MakePin2QueryL(); - if ( pin != KGSPinQueryOk ) - { - __GSLOGSTRING("[GSCallPlugin] SwitchAlsSettingL: User failed in Pin2 Query"); - return; //User failed in Pin2 Query - } - } - iSsSettings->Get( ESSSettingsAls, iAls ); - if ( iAls == ESSSettingsAlsPrimary ) - { - iAls = ESSSettingsAlsAlternate; - } - else - { - iAls = ESSSettingsAlsPrimary; - } - iSsSettings->Set( ESSSettingsAls, iAls ); - __GSLOGSTRING("[GSCallPlugin] <--CGSCallPlugin::SwitchAlsSettingL"); - } - - -// --------------------------------------------------------------------------- -// -// Show Soft Reject Text setting page -// -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ShowSoftRejectSettingPageL() - { - __GSLOGSTRING("[GSCallPlugin]--> ShowSoftRejectSettingPageL"); - HBufC* dynamicText = HBufC::NewLC( KGSSMSTxtEditorLength ); - TPtr string( dynamicText->Des() ); - - Container()->GetSoftRejectTextL( string ); - - HBufC* title = Container()->ReadFromResourceL( R_SOFT_REJECT_TXT_TITLE ); - CleanupStack::PushL( title ); - - // Open resource file, to get the resource texts for setting page. - // 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 ) - { - User::Leave( KErrGeneral ); - } - CleanupClosePushL( loader ); - - CAknSettingPage* dlg = new( ELeave )CAknTextSettingPage( - title, - EAknSettingPageNoOrdinalDisplayed, - KGSUseDefault, - KGSUseDefault, - R_TEXT_SETTING_PAGE, - string, - CAknTextSettingPage::EZeroLengthAllowed | - CAknTextSettingPage::EPredictiveTextEntryPermitted ); - - if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - TInt value = KGSSettingOn; - iModel->SetCallSettingValue( EGSSoftRejectDefault, value ); - AknTextUtils::StripCharacters( string, KAknStripTabs ); - iModel->SetSoftRejectText( string ); - } - - CleanupStack::PopAndDestroy( 3 ); //title, dynamicText, loader - __GSLOGSTRING("[GSCallPlugin] <--ShowSoftRejectSettingPageL"); - } - - -// --------------------------------------------------------------------------- -// -// Show Replace Prefix setting page -// -// --------------------------------------------------------------------------- -// -TBool CGSCallPlugin::ShowPrefixSettingPageL( TInt& aCurrentValue ) - { - __GSLOGSTRING("[GSCallPlugin]--> ShowPrefixSettingPageL"); - CDesCArrayFlat* items = - iCoeEnv->ReadDesC16ArrayResourceL( R_GS_REPLACE_PREFIX_SETTING_PAGE_LBX ); - CleanupStack::PushL( items ); - - CAknRadioButtonSettingPage* dlg = - new (ELeave) CAknRadioButtonSettingPage( R_GS_REPLACE_PREFIX_SETTING_PAGE, - aCurrentValue, items ); - - TBool ret = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); - CleanupStack::PopAndDestroy( items ); - - __GSLOGSTRING1("[GSCallPlugin] ShowPrefixSettingPageL: aCurrentValue: %d", aCurrentValue); - __GSLOGSTRING("[GSCallPlugin] <--ShowPrefixSettingPageL"); - return ret; - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ChangePrefixSettingL -// -// Change replace prefix setting. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ChangePrefixSettingL( TBool aSettingPage ) - { - __GSLOGSTRING("[GSCallPlugin]--> ChangePrefixSettingL"); - - TInt changeMode = iModel->PrefixChangeModeL(); - TInt prevChangeMode = changeMode; - TBool updateValue = ETrue; - TBool rockerPress = EFalse; - - __GSLOGSTRING1("[GSCallPlugin] ChangePrefixSettingL: prevChangeMode: %d", prevChangeMode); - if ( aSettingPage ) - { - updateValue = ShowPrefixSettingPageL( changeMode ); - } - else - { - rockerPress = ETrue; - if( changeMode == KGSSettingItemOff ) - { - changeMode = KGSSettingItemOn; - } - else - { - changeMode = KGSSettingItemOff; - } - } - - __GSLOGSTRING1("[GSCallPlugin] ChangePrefixSettingL: changeMode: %d", changeMode); - if ( updateValue ) - { - //if the value is changed and is set to ON, display the query dialog - if ( changeMode == KGSSettingItemOn ) - { - HBufC* replacePrefix = HBufC::NewLC( KGSReplacePrefixTextLength ); - TPtr string( replacePrefix->Des() ); - string.Zero(); - - iModel->PrefixChangeDataL( string ); - - CAknTextQueryDialog* dlg = new( ELeave ) CAknTextQueryDialog( string ); - - TBool ret = dlg->ExecuteLD( R_REPLACE_PREFIX_DATA_QUERY ); - if( ret ) - { - rockerPress = ETrue; - iModel->SetPrefixChangeDataL( string ); - } - else - { - rockerPress = EFalse; - } - CleanupStack::PopAndDestroy( replacePrefix ); - - } - else - { - rockerPress = ETrue; - } - } - - if ( prevChangeMode != changeMode && rockerPress ) - { - iModel->SetPrefixChangeModeL( changeMode ); - } - - __GSLOGSTRING("[GSCallPlugin] <--ChangePrefixSettingL"); - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::SetVoipSettingBasedSelectedLine -// -// Set the new changes to VOIP variables. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::SetVoipSettingBasedSelectedLine( - const TGSCallItemIds aPage, TInt aCurrentSetting ) - { - switch ( aPage ) - { - case EGSICSendIntCallIdItemId: - if ( aCurrentSetting == KGSFirstLine ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPSendIntCallId, EGSSendIntCallIdOn ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPSendIntCallId, EGSSendIntCallIdOff ); - } - break; - case EGSICWaitingItemId: - if ( aCurrentSetting == KGSFirstLine ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPCW, EGSCSCallWaitingOn ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPCW, EGSCSCallWaitingOff ); - } - break; - case EGSICPreferredTelephonyId: - if ( aCurrentSetting == KGSFirstLine ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPPreType, EGSPreferredCS ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPPreType, EGSPreferredPS ); - - // Show message query dialog if preferred call - // setting was changed to the Int. Telephone. - TRAP_IGNORE( ShowPreferredTelephonyNoteL() ); - } - break; - case EGSDndItemId: - if ( aCurrentSetting == KGSFirstLine ) - { - iModel->SetVoIPCallSettingValue( - EGSVoIPDnd, EGSCSCallDndOn ); - } - else - { - iModel->SetVoIPCallSettingValue( - EGSVoIPDnd, EGSCSCallDndOff ); - } - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::Container -// -// Returns call container item -// --------------------------------------------------------------------------- -// -CGSCallPluginContainer* CGSCallPlugin::Container() - { - return static_cast ( iContainer ); - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::GetLineForSelectedVoipSetting -// -// Returns selected line based on setting value. -// --------------------------------------------------------------------------- -// -TInt CGSCallPlugin::GetLineForSelectedVoipSetting( - const TGSCallItemIds aPage ) - { - if ( !iModel->VoIPSupported() ) - { - return KErrNone; - } - - TInt value( KErrNone ); - - // Get value based from setting page. - switch ( aPage ) - { - case EGSICSendIntCallIdItemId: // No swap. - iModel->GetVoIPCallSettingValue( EGSVoIPSendIntCallId, value ); - break; - case EGSICWaitingItemId: - iModel->GetVoIPCallSettingValue( EGSVoIPCW, value ); - break; - case EGSICPreferredTelephonyId: // No swap. - iModel->GetVoIPCallSettingValue( EGSVoIPPreType, value ); - break; - case EGSDndItemId: - iModel->GetVoIPCallSettingValue( EGSVoIPDnd, value ); - break; - default: - break; - } - - // Swap items. - if ( aPage != EGSICPreferredTelephonyId && - aPage != EGSICSendIntCallIdItemId ) - { - if ( value == KGSSecondLine ) - { - value = KGSFirstLine; - } - else - { - value = KGSSecondLine; - } - } - - return value; - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ShowVTStillImageSettingPageL -// -// Display Video Telephony Still Image setting page. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ShowVTStillImageSettingPageL() - { - iVtStillImage = iModel->VTStillImageL(); - // Store previous in case something goes wrong. - iPreviousVtStillImage = iVtStillImage; - - CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( - R_GS_STILL_IMAGE_SETTING_PAGE_LBX ); - CleanupStack::PushL( items ); - - // Map CenRep value to lbx items: - TInt dialogSelection = EGSVtStillImageNotInUse; - if ( iVtStillImage != KGSVTStillImageOff ) dialogSelection = EGSVtStillImageInUse; - - CAknRadioButtonSettingPage* dlg = - new( ELeave ) CAknRadioButtonSettingPage( R_GS_STILL_IMAGE_SETTING_PAGE, - dialogSelection, items ); - - TBool ret = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); - - if ( ret ) - { - if ( dialogSelection == EGSVtStillImageNotInUse ) - { - // Still image not used - iModel->SetVTStillImageL( KGSVTStillImageOff ); - } - else - { - // User decided to update still image - ShowStillImageListL(); - } - - // Update VT item in CGSCallPlugin listbox. iVtStillImage value is - // irrelevant as UpdateListBoxL actually reads the new value from - // CenRep and converts it to lbx item value correctly (Off/On). - UpdateListBoxL( EGSStillImageItemId, iVtStillImage ); - } - CleanupStack::PopAndDestroy( items ); - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ShowStillImageListL() -// -// Display background image list from media gallery. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ShowStillImageListL() - { - CDesCArray* selectedFiles = new ( ELeave ) CDesCArrayFlat( 1 ); - CleanupStack::PushL( selectedFiles ); - - TBool ret = MGFetch::RunL( *selectedFiles, EImageFile, EFalse, this ); - - if ( ret && selectedFiles->MdcaCount() == 1 ) - { - iImageHandler = CGSAsyncImageHandling::NewL( iCoeEnv->FsSession(), - this, KGSVTStillImgPath ); - - TPtrC imagePath = selectedFiles->MdcaPoint( 0 ); - - TRAPD( error, iModel->iBackgroundApi->SetVTStillImagePathL( imagePath, - *iImageHandler ) ); - if ( error == KErrNone ) - { - // Show wait note - ShowImageLoadWaitNoteL(); - } - else - { - HandleImageErrorsL( error ); - } - } - CleanupStack::PopAndDestroy( selectedFiles ); - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ImageHandlingComplete() -// -// Method derived from MGSSyncImageHandlingObserver -// Run when the asynchronous image converting is complete -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ImageHandlingCompleteL( TInt aError ) - { - if ( aError != KErrNone ) - { - HandleImageErrorsL( aError ); - } - else - { - // Needs to increment iVtStillImage value so CenRep will send - // notificatios to VT (only changing value will fire notification). - iModel->SetVTStillImageL( ++iVtStillImage ); - UpdateListBoxL( EGSStillImageItemId, EGSVtStillImageInUse ); - } - - HideImageLoadWaitNoteL(); - - delete iImageHandler; - iImageHandler = NULL; - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ShowImageLoadWaitNoteL() -// -// Display image load wait note dialog. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ShowImageLoadWaitNoteL() - { - if ( !iWaitDialog ) - { - iWaitDialog = new( ELeave ) CAknWaitDialog( - ( REINTERPRET_CAST(CEikDialog**, - &iWaitDialog ) ), ETrue ); - - iWaitDialog->ExecuteDlgLD( CAknNoteDialog::ENoTone, - R_IMAGE_LOAD_WAIT_NOTE ); - } - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::HideImageLoadWaitNoteL() -// -// Hide image load wait note dialog. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::HideImageLoadWaitNoteL() - { - if ( iWaitDialog ) - { - iWaitDialog->ProcessFinishedL(); // deletes the dialog - iWaitDialog = NULL; - } - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::HandleImageErrorsL -// -// Prompt image related errors to the user -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::HandleImageErrorsL( TInt aError ) - { - TInt resourceId; - switch( aError ) - { - case KErrNotSupported: - case KErrUnderflow: - // Image is corrupted or in wrong format - resourceId = R_GS_IMAGE_CORRUPTED; - break; - case KErrDiskFull: - case KErrNoMemory: - // Image is too large - resourceId = R_GS_IMAGE_TOO_LARGE; - break; - default: - // Better to give some error message than result in CONE5 panic: - resourceId = R_GS_IMAGE_CORRUPTED; - break; - } - // Show information note - HBufC* prompt = iCoeEnv->AllocReadResourceLC( resourceId ); - CAknInformationNote* note = new( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( *prompt ); - - // Setting previous VT still image value (rollback) - iModel->SetVTStillImageL( iPreviousVtStillImage ); - UpdateListBoxL( EGSStillImageItemId, iPreviousVtStillImage ); - CleanupStack::PopAndDestroy( prompt ); - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::VerifySelectionL() -// -// An overloaded method from MMGFetchVerifier interface class -// --------------------------------------------------------------------------- -// -TBool CGSCallPlugin::VerifySelectionL( const MDesCArray* aSelectedFiles ) - { - const TBool KGSDrmProtectedContent = ETrue; - - TBool ret = ETrue; - // - if ( aSelectedFiles->MdcaCount() == 1 ) - { - const TPtrC fileName( aSelectedFiles->MdcaPoint( 0 ) ); - - // First, check if the selected file is DRM protected - if ( ret && CheckDRMProtectionL( fileName ) == - KGSDrmProtectedContent ) - { - // display the note to user - // Show information note - HBufC* prompt = iCoeEnv->AllocReadResourceLC( - R_GS_DRM_NOT_ALLOWED ); - - CAknInformationNote* note = - new( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD( *prompt ); - - CleanupStack::PopAndDestroy( prompt ); - ret = EFalse; - } - - // Next, check whether the image header is valid - if ( ret ) - { - CImageDecoder* imageDecoder = NULL; - TRAPD( err, imageDecoder = CImageDecoder::FileNewL( - iCoeEnv->FsSession(), fileName, ContentAccess::EPeek ) ); - - if ( err != KErrNone ) - { - // Show information note - HBufC* prompt = iCoeEnv->AllocReadResourceLC( - R_GS_IMAGE_CORRUPTED ); - CAknInformationNote* note = - new( ELeave ) CAknInformationNote( ETrue ); - note->ExecuteLD(*prompt); - CleanupStack::PopAndDestroy( prompt ); - - ret = EFalse; - } - delete imageDecoder; - } - } - - return ret; - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::CheckDRMProtectionL -// -// Check if the selected image file is DRM protected. -// --------------------------------------------------------------------------- -// -TBool CGSCallPlugin::CheckDRMProtectionL( const TDesC& aOriginalFileName ) - { - TBool isProtected( EFalse ); - DRMCommon* drmClient = DRMCommon::NewL(); - CleanupStack::PushL( drmClient ); - TInt error = drmClient->Connect(); - if ( error != DRMCommon::EOk ) - { - User::Leave( KErrCorrupt ); - } - - if ( aOriginalFileName != KNullDesC ) - { - error = drmClient->IsProtectedFile( aOriginalFileName, isProtected ); - if ( error != DRMCommon::EOk ) - { - User::Leave( KErrCorrupt ); - } - } - - CleanupStack::PopAndDestroy( drmClient ); - return isProtected; - } - -// --------------------------------------------------------------------------- -// -// Show Call Duration setting page -// -// --------------------------------------------------------------------------- -// -TBool CGSCallPlugin::ShowCallDurationSettingPageL( TInt& aCurrentValue ) - { - __GSLOGSTRING("[GSCallPlugin]--> ShowCallDurationSettingPageL"); - CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( - R_GS_SHOW_CALL_DURATION_SETTING_PAGE_LBX ); - CleanupStack::PushL( items ); - - CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( - R_GS_SHOW_CALL_DURATION_SETTING_PAGE, - aCurrentValue, items ); - - TBool ret = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); - CleanupStack::PopAndDestroy( items ); - - __GSLOGSTRING("[GSCallPlugin] <--ShowCallDurationSettingPageL"); - return ret; - } - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ChangeCallDurationSettingL -// -// Change Call Duration setting. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ChangeCallDurationSettingL( TBool aSettingPage ) - { - __GSLOGSTRING("[GSCallPlugin]--> ChangeCallDurationSettingL"); - - TInt callState = CheckCallStateL(); - - // Get information of whether there are open connections or not - if ( callState != EPSCTsyCallStateUninitialized && - callState != EPSCTsyCallStateNone ) - { - HBufC* prompt = iCoeEnv->AllocReadResourceLC( R_TEXT_ACTIVE_CALL ); - - CAknInformationNote* note = - new( ELeave ) CAknInformationNote( ETrue ); - - note->ExecuteLD( *prompt ); - - CleanupStack::PopAndDestroy( prompt ); - - return; - } - - TInt duration = iModel->CallDurationL(); - TBool updateValue = ETrue; - - if ( aSettingPage ) - { - updateValue = ShowCallDurationSettingPageL( duration ); - } - else - { - if( duration == KGSSettingItemOff ) - { - duration = KGSSettingItemOn; - } - else - { - duration = KGSSettingItemOff; - } - } - - if ( updateValue ) - { - iModel->SetCallDurationL( duration ); - UpdateListBoxL( EGSShowCallDurationItemId, KGSNotUsed ); - } - - __GSLOGSTRING("[GSCallPlugin] <--ChangePrefixSettingL"); - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::CheckCallStateL -// -// Check call state using PubSub or SA -// --------------------------------------------------------------------------- -// -TInt CGSCallPlugin::CheckCallStateL() - { - TInt callState = KErrNone; - //here are open connections or not - RProperty::Get( KPSUidCtsyCallInformation, - KCTsyCallState, - callState ); - return callState; - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ShowPreferredTelephonyNoteL -// -// Shows note if preferred call setting was changed to the Int. Telephone. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ShowPreferredTelephonyNoteL() - { - // Create message query dialog. - HBufC* text = StringLoader::LoadLC( R_IC_PREFERRED_TELEPHONE_QUERY_TEXT ); - CAknMessageQueryDialog* query = CAknMessageQueryDialog::NewL( *text ); - query->SetMessageTextL( text->Des() ); - - // Show message query dialog. - query->ExecuteLD( R_IC_PREFERRED_TELEPHONE_QUERY ); - - CleanupStack::PopAndDestroy( text ); - } - - -// ----------------------------------------------------------------------------- -// When this method is called, view checks based on highlight focus, if the MSK -// label is correct. -// ----------------------------------------------------------------------------- -// -void CGSCallPlugin::CheckMiddleSoftkeyLabelL() - { - const TInt currentFeatureId = Container()->CurrentFeatureId(); - RemoveCommandFromMSK( iMskCommandFlag ); - if ( currentFeatureId == EGSCallWaitingItemId ) - { - // First remove any prevous commands. - SetMiddleSoftKeyLabelL( R_CALL_SOFTKEY_OPTION, - EAknSoftkeyContextOptions ); - // This way we set which command is set for MSK - iMskCommandFlag = EFalse; - } - else - { - //Set middle softkey as Change. - SetMiddleSoftKeyLabelL( R_CALL_MSK_CHANGE, - EGSMSKCmdAppChange ); - // This way we set which command is set for MSK - iMskCommandFlag = ETrue; - } - } - -// ----------------------------------------------------------------------------- -// Remove unnecessary commands from Middle softkey. -// @flag = ETrue means presently MSK value is "Change" so we remove that -// @flag = EFalse means presently MSK value is "Context Options" so we remove that -// ----------------------------------------------------------------------------- -// -void CGSCallPlugin::RemoveCommandFromMSK(const TBool flag ) - { - CEikButtonGroupContainer* cbaGroup = Cba(); - if ( cbaGroup ) - { - if ( flag ) - { - cbaGroup->RemoveCommandFromStack( - KGSMSKControlID, EGSMSKCmdAppChange ); - } - else - { - cbaGroup->RemoveCommandFromStack( - KGSMSKControlID, EAknSoftkeyContextOptions ); - } - } - } -// --------------------------------------------------------------------------- -// Sets middle softkey label. -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::SetMiddleSoftKeyLabelL( - const TInt aResourceId, const TInt aCommandId ) - { - CEikButtonGroupContainer* cbaGroup = Cba(); - if ( cbaGroup ) - { - HBufC* middleSKText = StringLoader::LoadLC( aResourceId ); - TPtr mskPtr = middleSKText->Des(); - cbaGroup->AddCommandToStackL( - KGSMSKControlID, - aCommandId, - mskPtr ); - CleanupStack::PopAndDestroy( middleSKText ); - } - } - -// ----------------------------------------------------------------------------- -// CGSCallPlugin::HandleClientRectChange -// -// -// ----------------------------------------------------------------------------- -// -void CGSCallPlugin::HandleClientRectChange() - { - if ( iContainer ) - { - iContainer->SetRect( ClientRect() ); - } - } - -// ========================= From CGSPluginInterface ================== - -// ----------------------------------------------------------------------------- -// CGSCallPlugin::GetCaptionL -// -// -// ----------------------------------------------------------------------------- -// -void CGSCallPlugin::GetCaptionL( TDes& aCaption ) const - { - HBufC* result = StringLoader::LoadL( R_GS_CALL_PLUGIN_CAPTION ); - aCaption.Copy( *result ); - delete result; - } - - -// ----------------------------------------------------------------------------- -// CGSCallPlugin::PluginProviderCategory -// -// -// ----------------------------------------------------------------------------- -// -TInt CGSCallPlugin::PluginProviderCategory() const - { - //This plugin is created by 3rd party. - return KGSPluginProviderInternal; - } - - -// ----------------------------------------------------------------------------- -// CGSCallPlugin::CreateIconL() -// -// -// ----------------------------------------------------------------------------- -// -CGulIcon* CGSCallPlugin::CreateIconL( const TUid aIconType ) - { - //EMbm - CGulIcon* icon; - TParse* fp = new( ELeave ) TParse(); - CleanupStack::PushL( fp ); - fp->Set( KGSCallPluginIconDirAndName, &KDC_BITMAP_DIR, NULL ); - - if( aIconType == KGSIconTypeLbxItem ) - { - icon = AknsUtils::CreateGulIconL( - AknsUtils::SkinInstance(), - KAknsIIDQgnPropSetCallSub, - fp->FullName(), - EMbmGscallpluginQgn_prop_set_call_sub, - EMbmGscallpluginQgn_prop_set_call_sub_mask ); - } - else - { - icon = CGSPluginInterface::CreateIconL( aIconType ); - } - - CleanupStack::PopAndDestroy( fp ); - - return icon; - } - - -// --------------------------------------------------------------------------- -// CGSCallPlugin::ChangeLongPressCallKeySettingL -// -// Change Long Press Call Key setting. -// values: 0,1 --> Inactive (Default Value is 1 and when RFS default value is 0) -// 2 --> Video call -// --------------------------------------------------------------------------- -// -void CGSCallPlugin::ChangeLongPressCallKeySettingL( const TBool aShowSettingPage ) - { - __GSLOGSTRING("[GSCallPlugin]--> ChangeLongPressCallKeySettingL"); - TInt statusLongPressCallKey = iModel->LongPressCallKeyL(); - TBool updateValue = ETrue; - - if ( aShowSettingPage ) - { - // If the status of Long Key is not active then we decrement to - // the value of statusLongPressCallKey so that the values are - // then tuned to launch the setting page normally with two setting - // items InActive and Video Call - // Refer to GSCallPlugin.hrh file for more info for the description - iModel->MapLongPressKeyCallKeyValue( statusLongPressCallKey ); - updateValue = ShowLongPressCallKeySettingPageL( - statusLongPressCallKey ); - - // Here if the selected index is 1 it means Video Call from the setting page - // we then again map this value back to 2 which is EGSLongPressCallKeyVideoCall - // Refer to GSCallPlugin.hrh for more details - if ( statusLongPressCallKey == EGSLongPressCallKeyVoiceCall ) - { - statusLongPressCallKey = EGSLongPressCallKeyVideoCall; - } - else // If selected index in setting page is InActive ( 0) we map - // this to EGSLongPressCallKeyVoiceCall which is 1 - { - statusLongPressCallKey = EGSLongPressCallKeyVoiceCall; - } - } - else // switch the value - { - if ( statusLongPressCallKey == EGSLongPressCallKeyNotSet || - statusLongPressCallKey == EGSLongPressCallKeyVoiceCall ) - { - statusLongPressCallKey = EGSLongPressCallKeyVideoCall; - } - else - { - statusLongPressCallKey = EGSLongPressCallKeyVoiceCall; - } - } - if ( updateValue ) - { - iModel->SetLongPressCallKeyL( statusLongPressCallKey ); - UpdateListBoxL( EGSLongPressCallKeyItemId, KGSNotUsed ); - } - - __GSLOGSTRING("[GSCallPlugin] <--ChangeLongPressCallKeySettingL"); - } - -// --------------------------------------------------------------------------- -// -// Launching Long Press Key setting page -// -// --------------------------------------------------------------------------- -// -TBool CGSCallPlugin::ShowLongPressCallKeySettingPageL( TInt& aCurrentValue ) - { - __GSLOGSTRING("[GSCallPlugin]--> ShowLongPressCallKeySettingPageL"); - CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( - R_GS_LONG_PRESS_CALL_SETTING_PAGE_LBX ); - CleanupStack::PushL( items ); - - CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( - R_GS_LONG_PRESS_CALL_SETTING_PAGE, - aCurrentValue, items ); - - TBool ret = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); - CleanupStack::PopAndDestroy( items ); - - __GSLOGSTRING("[GSCallPlugin] <--ShowLongPressCallKeySettingPageL"); - return ret; - } - - -// ---------------------------------------------------------------------------- -// CGSCallPlugin::ShowOwnImageVtCallSettingPageL -// -// Displaying settings page for Own Image during video call setting -// ---------------------------------------------------------------------------- -// -void CGSCallPlugin::ShowOwnImageVtCallSettingPageL() - { - __GSLOGSTRING("[GSCallPlugin]--> ShowOwnImageVtCallSettingPageL"); - TInt currentValue = iModel->OwnImageVtCallStatusL(); - CDesCArrayFlat* items = iCoeEnv->ReadDesC16ArrayResourceL( - R_GS_OWN_IMAGE_VT_CALL_SETTING_PAGE_LBX ); - CleanupStack::PushL( items ); - - CAknRadioButtonSettingPage* dlg = new (ELeave) CAknRadioButtonSettingPage( - R_GS_OWN_IMAGE_VT_CALL_SETTING_PAGE, - currentValue, items ); - - TBool ret = dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); - - if( ret ) - { - iModel->SetOwnImageVtCallStatusL( currentValue ); - UpdateListBoxL( EGSOwnImageVtCallItemId, currentValue ); - } - - CleanupStack::PopAndDestroy( items ); - - __GSLOGSTRING("[GSCallPlugin] <--ShowOwnImageVtCallSettingPageL"); - } - -//End of File