diff -r 41a7f70b3818 -r 5266b1f337bd phoneapp/phoneuiview/src/cphonevmbxhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/src/cphonevmbxhandler.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -0,0 +1,470 @@ +/* +* Copyright (c) 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: Voice mailbox handler. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cphonecenrepproxy.h" +#include "cphonevmbxhandler.h" +#include "phoneconstants.h" +#include "phonelogger.h" +#include "phoneui.pan" +// CONSTANTS + +const TInt KVideoMbxVariabilityFeatureOn = 2; + +#ifdef _DEBUG +const TInt KPhoneSpeedDialMaxLocation = 9; +#endif // _DEBUG + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::CPhoneVmbxHandler +// ----------------------------------------------------------------------------- +// +CPhoneVmbxHandler::CPhoneVmbxHandler() + { + iCsVideoTelFeature = FeatureManager::FeatureSupported + ( KFeatureIdCsVideoTelephony ); + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::NewL +// ----------------------------------------------------------------------------- +// +CPhoneVmbxHandler* CPhoneVmbxHandler::NewL() + { + CPhoneVmbxHandler* self = + new (ELeave) CPhoneVmbxHandler(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::~CPhoneVmbxHandler +// ----------------------------------------------------------------------------- +// +CPhoneVmbxHandler::~CPhoneVmbxHandler() + { + if ( iVmbx ) + { + iVmbx->Close(); + delete iVmbx; + } + } + + // ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPhoneVmbxHandler::ConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::IsStraightCallToVideoMailBox() +// ----------------------------------------------------------------------------- +// +TBool CPhoneVmbxHandler::IsStraightCallToVideoMailBox() const + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::IsStraightCallToVideoMailBox()" ); + + TInt callStraightToVideoMailBox = KErrNone; + TInt err = CPhoneCenRepProxy::Instance()->GetInt( + KCRUidTelVideoMailbox, + KTelVideoMbxKey, + callStraightToVideoMailBox ); + + if ( err == KErrNone ) + { + return ( callStraightToVideoMailBox == KVideoMbxVariabilityFeatureOn ); + } + + __PHONELOG1( EBasic, + EPhoneUIView, + "CPhoneVmbxHandler::IsStraightCallToVideoMailBox -> err = (%d)", + err ); + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::IsVideoMailBoxConfigured() +// ----------------------------------------------------------------------------- +// +TBool CPhoneVmbxHandler::IsVideoMailBoxConfigured() const + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::IsVideoMailBoxConfigured()" ); + + TInt videoMbxConfigured = KErrNone; + TInt err = CPhoneCenRepProxy::Instance()->GetInt( + KCRUidVideoMailbox, + KVideoMbxSupport, + videoMbxConfigured ); + + if ( err == KErrNone ) + { + return videoMbxConfigured; + } + + __PHONELOG1( EBasic, + EPhoneUIView, + "CPhoneVmbxHandler::IsVideoMailBoxConfigured -> err = (%d)", + err ); + + return EFalse; + } + + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::IsVideoMbxLocationAndConfigured +// ----------------------------------------------------------------------------- +// +TBool CPhoneVmbxHandler::IsVideoMbxLocationAndConfigured( + TInt aSpdLocation ) const + { + return ( aSpdLocation == KPhoneVideoMbxLocation && + IsVideoMailBoxConfigured() ); + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::GetStraightSpeedDialNumber +// ----------------------------------------------------------------------------- +// +TInt CPhoneVmbxHandler::GetStraightSpeedDialNumber( + TInt aSpdLocation, + TDes& aNumber ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::GetStraightSpeedDialNumber()" ); + + __ASSERT_DEBUG( ( aSpdLocation >=KPhoneVoiceMailBoxLocation && + aSpdLocation <= KPhoneSpeedDialMaxLocation), + Panic( EPhoneViewIndexOutOfBounds ) ); + + TInt retVal( KErrNone ); + + TBool straightCallToVideoMbx = IsStraightCallToVideoMailBox(); + + /****************************************************** + * -Separated Voice / Video + * - Key '1' to VoiceMbx and Key '2' to VideoMbx, + * if Video mailbox configured. + ******************************************************/ + if ( IsCsVideoTelFeature() && + straightCallToVideoMbx && + ( IsVideoMbxLocationAndConfigured( aSpdLocation ) || + aSpdLocation == KPhoneVoiceMailBoxLocation ) ) + { + + TRAPD( error, CreateVmbxL() ); + if ( !error ) + { + if ( aSpdLocation == KPhoneVoiceMailBoxLocation ) + { + // Get to voice mailbox number + retVal = LaunchMbx( EVmbx, aNumber ); + } + else + { + // Get to video mailbox number + retVal = LaunchMbx( EVmbxVideo, aNumber ); + } + } + else + { + retVal = error; + } + } + __PHONELOG1( EBasic, + EPhoneUIView,"CPhoneVmbxHandler::GetStraightSpeedDialNumber -> retval = (%d)", + retVal ); + + return retVal; + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::IsCsVideoTelFeature +// ----------------------------------------------------------------------------- +// +TBool CPhoneVmbxHandler::IsCsVideoTelFeature() + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::IsCsVideoTelFeature()" ); + return iCsVideoTelFeature; + } +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::LaunchMbx +// ----------------------------------------------------------------------------- +// +TInt CPhoneVmbxHandler::LaunchMbx( TInt aMailboxType, TDes& aNumber ) + { + TInt retVal( KErrNone ); + iMailboxType = aMailboxType; + + switch ( aMailboxType ) + { + case EVmbx: + { + TRAPD( error, retVal = CSVmbxL( aNumber ) ); + if ( error ) + { + retVal = error; + } + } + break; + case EVmbxIP: + { + TRAPD( error,retVal = IPVmbxL( aNumber ) ); + if ( error ) + { + retVal = error; + } + } + break; + case EVmbxVideo: + { + TRAPD( error, retVal = VideoVmbxL( aNumber ) ); + if ( error ) + { + retVal = error; + } + } + break; + + default: + break; + } + + __PHONELOG1( EBasic, + EPhoneUIView,"CPhoneVmbxHandler::LaunchMbx -> retval = (%d)", + retVal ); + return retVal; + } + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::CSVmbxL +// ----------------------------------------------------------------------------- +// +TInt CPhoneVmbxHandler::CSVmbxL( TDes& aNumber ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::CSVmbxL()" ); + CreateVmbxL(); + TInt err ( KErrNone ); + err = iVmbx->GetVmbxNumber( aNumber ); + + //check error code + if ( err != KErrNone && err != KErrNotFound ) + { + User::Leave( err ); + } + + //If not assigned + if ( err == KErrNotFound ) + { + aNumber.Zero(); + if ( !( iVmbx->QueryNumberL( EVmbxNotDefinedQuery, aNumber ) ) ) + { + err = KErrNotFound; + } + else + { + if ( aNumber.Length() != 0 ) + { + err = KErrNone; + } + else + { + err = KErrNotFound; + } + } + } + return err; + } +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::IPVmbxL +// ----------------------------------------------------------------------------- +// +TInt CPhoneVmbxHandler::IPVmbxL( TDes& aNumber ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::IPVmbxL()" ); + CreateVmbxL(); + + TInt err = iVmbx->GetVmbxAddress( aNumber, iServiceId ); + + return err; + } +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::VideoVmbxL +// ----------------------------------------------------------------------------- +// +TInt CPhoneVmbxHandler::VideoVmbxL( TDes& aNumber ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::VideoVmbxL()" ); + CreateVmbxL(); + TInt err = iVmbx->GetVideoMbxNumber( aNumber ); + //check error code + if ( err != KErrNone && err != KErrNotFound ) + { + User::Leave( err ); + } + //If not assigned + if ( err == KErrNotFound ) + { + aNumber.Zero(); + if ( !( iVmbx->QueryVideoMbxNumberL( EVmbxNotDefinedQuery, aNumber ) ) ) + { + err = KErrNotFound; + } + else + { + if ( aNumber.Length() != 0 ) + { + err = KErrNone; + } + else + { + err = KErrNotFound; + } + } + } + + __PHONELOG1( EBasic, + EPhoneUIView,"CPhoneVmbxHandler::VideoVmbxL -> err = (%d)", + err ); + return err; + } + + +// ----------------------------------------------------------------------------- +// CPhoneVmbxHandler::NetworkMode +// ----------------------------------------------------------------------------- +// +TInt CPhoneVmbxHandler::NetworkMode() + + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::NetworkMode()" ); + TInt networkMode = ENWNetworkModeUnknown; + + RProperty::Get( KPSUidNetworkInfo, + KNWTelephonyNetworkMode, + networkMode ); + __PHONELOG1( EBasic, + EPhoneUIView,"CPhoneVmbxHandler::NetworkMode -> NWMode = (%d)", + networkMode ); + return networkMode; + } + +// --------------------------------------------------------- +// CPhoneVmbxHandler::CreateVmbxL +// --------------------------------------------------------- +// +void CPhoneVmbxHandler::CreateVmbxL() + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::CreateVmbxL()" ); + if ( !iVmbx ) + { + RVmbxNumber* vmbx = new ( ELeave ) RVmbxNumber; + CleanupStack::PushL( vmbx ); + User::LeaveIfError( vmbx->Open() ); + CleanupStack::Pop( vmbx ); + iVmbx = vmbx; + } + } + +// --------------------------------------------------------- +// CPhoneVmbxHandler::GetMailboxType +// --------------------------------------------------------- +// +TInt CPhoneVmbxHandler::GetMailboxType() + { + return iMailboxType; + } + +// --------------------------------------------------------- +// CPhoneVmbxHandler::SelectMailboxTypeL +// --------------------------------------------------------- +// +TInt CPhoneVmbxHandler::SelectMailboxTypeL( TUint& aServiceId ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneVmbxHandler::SelectMailboxTypeL()" ); + CreateVmbxL(); + + TInt err( KErrNotFound ); + TInt err2( KErrNotFound ); + TInt err3( KErrNotFound ); + TInt type( EVmbxNone ); + + TBuf number; + number.Zero(); // empty the string + // Voice mbx number + err = iVmbx->GetVmbxNumber( number ); + + // Video mbx number + if( IsCsVideoTelFeature() ) + { + err2 = iVmbx->GetVideoMbxNumber( number ); + } + + if ( iVmbx->IsIpVoiceMailboxServices() ) + { + err3 = KErrNone; + } + + if ( ( err == KErrNotFound || err == KErrNotSupported ) && + ( err2 == KErrNotFound || err2 == KErrNotSupported ) && + ( err3 == KErrNotFound || err3 == KErrNotSupported ) ) + { + type = iVmbx->SelectTypeL( EVmbxDefine ); + } + else + { + type =iVmbx->SelectTypeL( EVmbxCall, iServiceId ); + aServiceId = iServiceId; + } + + return type; + } + +// --------------------------------------------------------- +// CPhoneVmbxHandler::CancelVmbx +// --------------------------------------------------------- +// +void CPhoneVmbxHandler::CancelVmbx() + { + if ( iVmbx ) + { + iVmbx->Close(); + delete iVmbx; + iVmbx = NULL; + } + } + +// End of File +