--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuiview/src/cphonevmbxhandler.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -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 <eikenv.h>
+#include <e32property.h>
+#include <featmgr.h>
+#include <exterror.h>
+#include <NetworkHandlingDomainPSKeys.h>
+#include <telvmbxsettingscrkeys.h>
+#include <vmnumber.h>
+#include <voicemailboxdomaincrkeys.h>
+
+#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<KPhoneNumberEntryBufferSize> 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
+