diff -r 000000000000 -r ff3b6d0fd310 cellular/PsetNotesUi/Src/PsuiNoteMaster.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cellular/PsetNotesUi/Src/PsuiNoteMaster.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,772 @@ +/* +* 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: Note master class shows the actual notes. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "PsuiInternalConstants.h" +#include "PsuiNoteMaster.h" +#include "PsuiReqObserver.h" +#include "PsuiQueryDialog.h" + +#include +#include +// MACROS + +#ifdef _DEBUG + +#define RDEBUG(X) RDebug::Print(X); +#define RDEBUG_INT(X,Y) RDebug::Print(X,Y); +#else +#define RDEBUG(X) +#define RDEBUG_INT(X,Y) +#endif + +// MEMBER FUNCTIONS + +// --------------------------------------------------------------------------- +// Symbian OS two-phased constructor. +// --------------------------------------------------------------------------- +CPsuiNoteMaster* CPsuiNoteMaster::NewL() + { + CPsuiNoteMaster* self = new( ELeave ) CPsuiNoteMaster; + CleanupStack::PushL( self ); + // Sets up TLS, must be done before FeatureManager is used. + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CPsuiNoteMaster::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPsuiNoteMaster::ConstructL() + { + iReqObserver = CPsuiReqObserver::NewL( *this ); + FeatureManager::InitializeLibL(); + + iServiceRequest = CServiceRequest::NewL( *iReqObserver ); + + } + + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +CPsuiNoteMaster::~CPsuiNoteMaster() + { + //Remove FeatureManager + FeatureManager::UnInitializeLib(); + + delete iServiceRequest; + + delete iReqObserver; + + if ( iQuery ) + { + delete iQuery; + iQuery = NULL; + } + + if ( iPopupList ) + { + iPopupList->CancelPopup(); + iPopupList = NULL; + } + + iBarringEngine = NULL; + iDivertEngine = NULL; + iWaitingEngine = NULL; + iCliEngine = NULL; + + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::SetEngineContacts() +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::SetEngineContacts( MPsetCallWaiting* aWaitingEngine, + MPsetCallBarring* aBarringEngine, + MPsetCallDiverting* aDivertEngine, + MPsetCli* aCliEngine ) + { + iWaitingEngine = aWaitingEngine; + iBarringEngine = aBarringEngine; + iDivertEngine = aDivertEngine; + iCliEngine = aCliEngine; + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::ShowNoteL() +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::ShowNoteL( TPsuiNoteTypes aType, TInt aResourceID ) + { + if ( aResourceID < 0 ) + { + if ( aType == EPsuiWaitingNote ) + { + iRequesting = ETrue; + iServiceRequest->StartL( KNullDesC ); + } + return; + } + + HBufC* string = StringLoader::LoadLC( aResourceID ); + + switch ( aType ) + { + case EPsuiConfirmationNote: + { + iServiceRequest->ShowCompletionNoteL( + ETrue, // aShowNote + KErrNone, // aError + CServiceRequest::ESerqGlobalConfirmationNote, // aNoteType + string->Des() ); // aText + break; + } + case EPsuiErrorNote: + { + CServiceRequest::TSerqNoteType errorType = CServiceRequest::ESerqGlobalErrorNote; + if ( aResourceID == R_NO_SERVICE || + aResourceID == R_NOT_ALLOWED ) + { + errorType = CServiceRequest::ESerqGlobalInformationNote; + } + iServiceRequest->ShowCompletionNoteL( + ETrue, + KErrNone, + errorType, + string->Des() ); + break; + } + case EPsuiInformationNote: + { + iServiceRequest->ShowCompletionNoteL( + ETrue, + KErrNone, + CServiceRequest::ESerqGlobalInformationNote, + string->Des() ); + } + default: + break; + } + CleanupStack::PopAndDestroy( string ); + string = NULL; + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::KillStaticNoteL() +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::KillStaticNoteL() + { + if ( iRequesting ) + { + delete iServiceRequest; + iServiceRequest = NULL; + iServiceRequest = CServiceRequest::NewL( *iReqObserver ); + iRequesting =EFalse; + } + + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::KillRequestL() +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::KillRequestL() + { + if ( iWaitingEngine ) + { + iWaitingEngine->CancelProcess(); + } + else if ( iBarringEngine ) + { + iBarringEngine->CancelCurrentRequest(); + } + else if ( iDivertEngine ) + { + iDivertEngine->CancelCurrentRequest(); + } + else if ( iCliEngine ) + { + ShowCancelRequestNoteL(); + iCliEngine->CancelAll(); + } + } +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::ShowBscListL() +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::ShowBscListL( TInt aResourceHeading, + TUint8 aBsc[KPSUIMaxBscNumber] ) + { + if ( !iWaitingEngine && + !iBarringEngine && + !iDivertEngine && + !iCliEngine ) + { + return; + } + + if ( aResourceHeading < 0 ) + { + User::Leave( KErrArgument ); + } + + CAknSinglePopupMenuStyleListBox* list = + new ( ELeave ) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( list ); + + CreateListBoxL( EPsuiNoCF, list ); + + CDesCArray* items = new ( ELeave ) CDesCArrayFlat( KPSUIMaxBscNumber ); + CleanupStack::PushL( items ); + + CTextListBoxModel* model = list->Model(); + if ( !model ) + { + User::Leave( KErrGeneral ); + } + model->SetItemTextArray( items ); + model->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( items ); // listbox model now owns this + + SetTitleL( aResourceHeading ); + + TUint8 numberOfBsc = 0; + HBufC* string = NULL; + while ( ( aBsc[numberOfBsc] != KPSUINoBscGroup ) && + ( numberOfBsc < KPSUIMaxBscNumber ) ) + { + TUint8 bscCode = aBsc[numberOfBsc]; + string = SetBsGroupLC( bscCode ); + + if ( string ) + { + items->AppendL( *string ); + CleanupStack::PopAndDestroy( string ); + } + numberOfBsc++; + } + + iPopupList->ExecuteLD(); + iPopupList = NULL; + CleanupStack::PopAndDestroy( list ); + } + +// --------------------------------------------------------------------------- +// Shows additional divert information. +// --------------------------------------------------------------------------- +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +void CPsuiNoteMaster::ShowCfInfoL( TCFType& aCFType, + const RMobilePhone::TMobilePhoneCFInfoEntryV1& aSetting ) + { + if ( aCFType == EPsuiNoCF ) + { + User::Leave( KErrArgument ); + } + + // Get base text and set phone number into it. + // Note that two characters are reserved for LRM markers. + TBuf string; + StringLoader::Load( string, R_TO_NUMBER ); + string.Append( KPSUIListDivider ); + + TInt pngErr( KErrNone ); + TInt pngSupported( 0 ); + CRepository* repository = CRepository::NewL( KCRUidNumberGrouping ); + pngErr = repository->Get( KNumberGrouping, pngSupported ); + delete repository; + + if ( KErrNone == pngErr && pngSupported != 0 ) + { + CPNGNumberGrouping* numberGrouping = + CPNGNumberGrouping::NewL( KPSUIMaxPSUIItemLength ); + CleanupStack::PushL( numberGrouping ); + + //Check that number fits (with or w/o number formatting). + if ( (aSetting.iNumber.iTelNumber.Length() + 2) <= numberGrouping->MaxDisplayLength() ) + { + numberGrouping->Set( aSetting.iNumber.iTelNumber ); + AppendCFNumber( string, numberGrouping->FormattedNumber() ); + } + else + { + AppendCFNumber( string, aSetting.iNumber.iTelNumber ); + } + CleanupStack::PopAndDestroy( numberGrouping ); + } + else + { + AppendCFNumber( string, aSetting.iNumber.iTelNumber ); + } + + //AVKON utils check whether or not conversion is needed + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( string ); + string.Append( KPSUIListDivider ); + + // Add delay time. + if ( aCFType == EPsuiCFNry ) + { + //Header + divider. + HBufC* delayTime = StringLoader::LoadLC( R_DELAY_TIME ); + string.Append( *delayTime ); + CleanupStack::PopAndDestroy( delayTime ); + string.Append( KPSUIListDivider ); + + TBuf writeBuffer; + HBufC* readBuffer = StringLoader::LoadLC( R_TEXT_SS_DETAIL_DELAY_SEC ); + // format time, -1 means that there is no index in the key string. + StringLoader::Format( writeBuffer, *readBuffer, -1, aSetting.iTimeout ); + CleanupStack::PopAndDestroy( readBuffer ); + + string.Append( writeBuffer ); + } + + iQuery = CPsuiQueryDialog::NewL( CAknQueryDialog::ENoTone ); + TInt command( iQuery->ExecuteLD( R_CONFIRMATION_QUERY, string ) ); + if( command == EKeyNo ) + { + // End -key was pressed so don't relaunch previous query + aCFType = EPsuiNoCF; + } + iQuery = NULL; + } + +// --------------------------------------------------------------------------- +// Shows request cancelled note. +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::ShowCancelRequestNoteL() + { + if ( iRequesting ) + { + ShowNoteL( EPsuiInformationNote, R_REQUEST_CANCELLED_NOTE ); + } + } + +// --------------------------------------------------------------------------- +// Returns resource ID for the most common error codes. +// --------------------------------------------------------------------------- +// +TInt CPsuiNoteMaster::SetErrorNoteResourceID ( const TInt aErrorCode ) + { + RDEBUG_INT( _L("PSUI.SetErrorNoteResourceID - code %d: "), aErrorCode ) + TInt resourceID = KErrNone; + switch ( aErrorCode ) + { + case KErrGsmSSSubscriptionViolation: + resourceID = R_CONTACT_SERVICE_NOTE; + break; + case KErrGsmSSUnknownSubscriber: + case KErrGsmSSAbsentSubscriber: + case KErrGsmSSIllegalOperation: + case KErrGsmSSIllegalSubscriber: + case KErrGsmSSIllegalEquipment: + case KErrGsmSSCallBarred: + case KErrGsmSSDataMissing: + resourceID = R_NOT_ALLOWED; + break; + case KErrGsmSSIncompatibility: + resourceID = R_SERVICES_IN_CONFLICT; + break; + case KErrGsmSSSystemFailure: + resourceID = R_RESULT_UNKNOWN; + break; + case KErrGsmSSUnexpectedDataValue: + case KErrGsmSSResourcesUnavailable: + resourceID = R_REQUEST_REJECTED; + break; + case KErrGsmSSNegativePasswordCheck: + case KErrGsmSSPasswordRegistrationFailure: + resourceID = R_PASSWORD_ERROR_NOTE; + break; + case KErrGsmSSPasswordAttemptsViolation: + resourceID = R_PASSWORD_BLOCKED_NOTE; + break; + case KErrGsmSMSNoNetworkService: + case KErrGsmNoService: + resourceID = R_NO_SERVICE; + break; + case KErrSsActivationDataLost: + resourceID = R_NET_INFO_LOST; + break; + case KErrGsmOfflineOpNotAllowed: + if ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) ) + { + TInt value = EBTSapNotConnected; + RProperty::Get( + KPSUidBluetoothSapConnectionState, + KBTSapConnectionState, + value ); + if ( value == EBTSapConnected ) + { + resourceID = R_OFFLINE_MODE_SAP; + } + else + { + resourceID = R_OFFLINE_MODE; + } + } + break; + default: + resourceID = R_NOT_DONE_NOTE; + break; + } + return resourceID; + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::ShowBscCFListL() +// --------------------------------------------------------------------------- +/***************************************************** +* Series 60 Customer / ETel +* Series 60 ETel API +*****************************************************/ +TCFType CPsuiNoteMaster::ShowBscCFListL( TInt aResourceHeading, + CMobilePhoneCFList& aList, + TCFType aCFType, + TInt& aIndex ) + { + //note master was deleted - do not create another bsc-list + if ( !iWaitingEngine && + !iBarringEngine && + !iDivertEngine && + !iCliEngine ) + { + return EPsuiNoCF; + } + + if ( aResourceHeading < 0 ) + { + User::Leave( KErrArgument ); + } + + CAknSinglePopupMenuStyleListBox* list = + new ( ELeave ) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( list ); + + CreateListBoxL( aCFType, list ); + + CDesCArray* items = new ( ELeave ) CDesCArrayFlat( KPSUIMaxBscNumber ); + CleanupStack::PushL( items ); + + CTextListBoxModel* model = list->Model(); + if ( !model ) + { + User::Leave( KErrGeneral ); + } + model->SetItemTextArray( items ); + model->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( items ); + + SetTitleL( aResourceHeading ); + + TInt entries = aList.Enumerate(); + TInt numberOfBscs = 0; + RMobilePhone::TMobilePhoneCFInfoEntryV1 cfInfo; + HBufC* string = NULL; + while ( entries > numberOfBscs ) + { + cfInfo = aList.GetEntryL( numberOfBscs ); + string = SetBsGroupLC( + static_cast ( ChangeToGSM( cfInfo.iServiceGroup ) ) ); + // if no string was retrieved, ignore it. + if ( string ) + { + items->AppendL( *string ); + CleanupStack::PopAndDestroy( string ); + } + numberOfBscs++; + } + list->SetCurrentItemIndex( aIndex ); + + TInt popupRet = iPopupList->ExecuteLD(); + aIndex = list->CurrentItemIndex(); + iPopupList = NULL; + CleanupStack::PopAndDestroy( list ); + + if ( popupRet ) // if number or details softkey pressed + { + return aCFType; + } + return EPsuiNoCF; + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::CreateListBoxL +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::CreateListBoxL( TCFType aCFType, + CAknSinglePopupMenuStyleListBox* aList ) + { + TInt resourceId = 0; + if ( aCFType == EPsuiNoCF ) + { + resourceId = R_AVKON_SOFTKEYS_BACK; + } + else if ( aCFType == EPsuiCFOther ) + { + resourceId = R_PSUI_SOFTKEYS_NUMBER_BACK; + } + else + { + resourceId = R_PSUI_SOFTKEYS_DETAILS_BACK; + } + + // Create popup list + iPopupList = CAknPopupList::NewL( aList, resourceId ); + aList->ConstructL( iPopupList, CEikListBox::ELeftDownInViewRect ); + aList->CreateScrollBarFrameL( ETrue ); + aList->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + } + +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::SetTitleL +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::SetTitleL( const TInt& aResourceHeading ) + { + TRAPD ( ignore, + HBufC* string = StringLoader::LoadLC( aResourceHeading ); + iPopupList->SetTitleL( *string ); + CleanupStack::PopAndDestroy( string ); + ); + if ( ignore ) + { + HBufC16* emptyHeader = NULL; + iPopupList->SetTitleL( emptyHeader->Des() ); + delete emptyHeader; + } + } +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::AppendCFNumber +// --------------------------------------------------------------------------- +void CPsuiNoteMaster::AppendCFNumber( TDes& aString, const TDesC& aNumber ) + { + aString.Append( KLRMarker ); + aString.Append( aNumber ); + aString.Append( KLRMarker ); + } +// --------------------------------------------------------------------------- +// CPsuiNoteMaster::SetBsGroupLC +// --------------------------------------------------------------------------- +HBufC* CPsuiNoteMaster::SetBsGroupLC( TUint8 aBscCode ) + { + HBufC* string = NULL; + switch( aBscCode ) + { + case 0: + string = StringLoader::LoadLC( R_BS_ALPHA_0 ); + break; + case 10: + string = StringLoader::LoadLC( R_BS_ALPHA_10 ); + break; + case 11: + string = StringLoader::LoadLC( R_BS_ALPHA_11 ); + break; + case 12: + string = StringLoader::LoadLC( R_BS_ALPHA_12 ); + break; + case 13: + string = StringLoader::LoadLC( R_BS_ALPHA_13 ); + break; + case 16: + string = StringLoader::LoadLC( R_BS_ALPHA_16 ); + break; + case 19: + string = StringLoader::LoadLC( R_BS_ALPHA_19 ); + break; + case 20: + if ( FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony ) ) + { + string = StringLoader::LoadLC( R_BS_ALPHA_20_VT ); + } + else + { + string = StringLoader::LoadLC( R_BS_ALPHA_20 ); + } + break; + case 21: + string = StringLoader::LoadLC( R_BS_ALPHA_21 ); + break; + case 22: + string = StringLoader::LoadLC( R_BS_ALPHA_22 ); + break; + case 24: + string = StringLoader::LoadLC( R_BS_ALPHA_24 ); + break; + case 25: + string = StringLoader::LoadLC( R_BS_ALPHA_25 ); + break; + case 26: + string = StringLoader::LoadLC( R_BS_ALPHA_26 ); + break; + case 27: + string = StringLoader::LoadLC( R_BS_ALPHA_27 ); + break; + case 30: + string = StringLoader::LoadLC( R_BS_ALPHA_30 ); + break; + case 89: + string = StringLoader::LoadLC( R_BS_ALPHA_89 ); + break; + default: + // all the services that are not displayed to ui + break; + } + return string; + } + +// --------------------------------------------------------- +// CPsuiNoteMaster::ChangeToGSM +// +// --------------------------------------------------------- +TBasicServiceGroups CPsuiNoteMaster::ChangeToGSM( const TInt& aBsc ) + { + switch ( aBsc ) + { + case RMobilePhone::EAllServices: + return EAllTeleAndBearer; + case RMobilePhone::EAllTele: + return EAllTele; + case RMobilePhone::EVoiceService: + case RMobilePhone::ETelephony: + return ETelephony; + case RMobilePhone::EAllDataTele: + return EAllDataTele; + case RMobilePhone::EFaxService: + return EFax; + case RMobilePhone::EShortMessageService: + return ESms; + case RMobilePhone::EAllDataExSms: + return EAllDataExSms; + case RMobilePhone::EAllTeleExcSms: + return EAllTeleExcSms; + case RMobilePhone::EAllPlmnTele: + return EAllPlmnTele; + case RMobilePhone::EPlmnTele1: + return EPlmnTele1; + case RMobilePhone::EPlmnTele2: + return EPlmnTele2; + case RMobilePhone::EPlmnTele3: + return EPlmnTele3; + case RMobilePhone::EPlmnTele4: + return EPlmnTele4; + case RMobilePhone::EPlmnTele5: + return EPlmnTele5; + case RMobilePhone::EPlmnTele6: + return EPlmnTele6; + case RMobilePhone::EPlmnTele7: + return EPlmnTele7; + case RMobilePhone::EPlmnTele8: + return EPlmnTele8; + case RMobilePhone::EPlmnTele9: + return EPlmnTele9; + case RMobilePhone::EPlmnTeleA: + return EPlmnTeleA; + case RMobilePhone::EPlmnTeleB: + return EPlmnTeleB; + case RMobilePhone::EPlmnTeleC: + return EPlmnTeleC; + case RMobilePhone::EPlmnTeleD: + return EPlmnTeleD; + case RMobilePhone::EPlmnTeleE: + return EPlmnTeleE; + case RMobilePhone::EPlmnTeleF: + return EPlmnTeleF; + case RMobilePhone::EAllBearer: + return EAllBearer; + case RMobilePhone::EAllAsync: + return EAllAsync; + case RMobilePhone::EAllSync: + return EAllSync; + case RMobilePhone::ECircuitDataService: + case RMobilePhone::ESyncData: + return ESyncData; + case RMobilePhone::EPacketDataService: + case RMobilePhone::EAsyncData: + return EAsyncData; + case RMobilePhone::EPacketData: + return EPacketData; + case RMobilePhone::EPadAccess: + return EPadAccess; + case RMobilePhone::EAllPlmnBearer: + return EAllPlmnBearer; + case RMobilePhone::EPlmnBearerServ1: + return EPlmnBearerServ1; + case RMobilePhone::EPlmnBearerServ2: + return EPlmnBearerServ2; + case RMobilePhone::EPlmnBearerServ3: + return EPlmnBearerServ3; + case RMobilePhone::EPlmnBearerServ4: + return EPlmnBearerServ4; + case RMobilePhone::EPlmnBearerServ5: + return EPlmnBearerServ5; + case RMobilePhone::EPlmnBearerServ6: + return EPlmnBearerServ6; + case RMobilePhone::EPlmnBearerServ7: + return EPlmnBearerServ7; + case RMobilePhone::EPlmnBearerServ8: + return EPlmnBearerServ8; + case RMobilePhone::EPlmnBearerServ9: + return EPlmnBearerServ9; + case RMobilePhone::EPlmnBearerServA: + return EPlmnBearerServA; + case RMobilePhone::EPlmnBearerServB: + return EPlmnBearerServB; + case RMobilePhone::EPlmnBearerServC: + return EPlmnBearerServC; + case RMobilePhone::EPlmnBearerServD: + return EPlmnBearerServD; + case RMobilePhone::EPlmnBearerServE: + return EPlmnBearerServE; + case RMobilePhone::EPlmnBearerServF: + return EPlmnBearerServF; + case RMobilePhone::EAuxVoiceService: + case RMobilePhone::EAltTele: + return EAltTele; + case RMobilePhone::EServiceUnspecified: + default: + return EUnknown; + } + } + +// ----------------------------------------------------------------------------- +// CPsuiNoteMaster::RequestNoteCancelledL +// Called when the Requesting note is cancelled by the user. +// ----------------------------------------------------------------------------- +// +void CPsuiNoteMaster::RequestNoteCancelledL() + { + KillRequestL(); + iRequesting = EFalse; + } +// End of file