gssettingsuis/Gs/GSCallPlugin/src/GSCallPluginModel.cpp
branchRCL_3
changeset 25 7e0eff37aedb
parent 0 8c5d936e5675
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gssettingsuis/Gs/GSCallPlugin/src/GSCallPluginModel.cpp	Wed Sep 01 12:20:44 2010 +0100
@@ -0,0 +1,758 @@
+/*
+* 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: 
+*        Model/Engine for Call Settings Plugin
+*
+*/
+
+
+// INCLUDE FILES
+#include "GSCallPluginModel.h"
+#include "GsLogger.h"      //for logging traces
+#include "SettingsPrivateCRKeys.h"
+
+#include <barsc.h>
+#include <barsread.h>
+#include <coecntrl.h>
+#include <f32file.h>
+#include <AknQueryDialog.h>
+#include <s32file.h>
+#include <featmgr.h>
+#include <PsetCSP.h>
+#include <generalsettingsvariant.hrh>
+#include <PSVariables.h>  //PubSub 
+#include <settingsinternalcrkeys.h>
+#include <LogsDomainCRKeys.h>
+
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+#include <spsettings.h>
+#endif // __VOIP && RD_VOIP_REL_2_2
+//CONSTANTS
+// default value for autolock period
+// default value for Sat operations
+
+_LIT( KGSNameOfClass, "CGSCallPluginModel" );
+
+// Max int size
+
+//for switching values in SwitchValue()
+const TInt KGSSettingOff = 0;
+const TInt KGSSettingOn = 1;
+const TInt KGSIndexOff = 1;
+const TInt KGSIndexOn = 0;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::NewL
+// 
+// Symbian OS two-phased constructor
+// ----------------------------------------------------------------------------
+//
+CGSCallPluginModel* CGSCallPluginModel::NewL()
+    {
+    CGSCallPluginModel* self = new( ELeave ) CGSCallPluginModel;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::CGSCallPluginModel
+// 
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ----------------------------------------------------------------------------
+//
+CGSCallPluginModel::CGSCallPluginModel()
+    {
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::ConstructL
+// 
+// EPOC default constructor can leave.
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::ConstructL()
+    {
+    FeatureManager::InitializeLibL();
+
+    InitializeCentralRepositoryL();
+
+    iBackgroundApi = CGSBackgroundImage::NewL();
+
+    SetCSPActiveL( ETrue );
+
+    User::LeaveIfError( iGSVariationRepository->Get( 
+                        KSettingsVariationFlags, iLocalVariationValues ) );
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+	iSpSettings = CSPSettings::NewL();  
+#endif // __VOIP && RD_VOIP_REL_2_2
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::~CGSCallPluginModel
+// 
+// Destructor
+// ----------------------------------------------------------------------------
+//
+CGSCallPluginModel::~CGSCallPluginModel()
+    {
+    FeatureManager::UnInitializeLib();
+	UninitializeCentralRepository();
+    
+    if ( GetCSPStatus() )
+        {
+        TRAP_IGNORE( SetCSPActiveL( EFalse ) );
+        }
+    
+    if ( iBackgroundApi )
+        {
+        delete iBackgroundApi;
+        }
+    
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+    delete iSpSettings;
+#endif // __VOIP && RD_VOIP_REL_2_2
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::InitializeCentralRepositoryL
+//
+// Creating and setting keys for the Central Repository
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::InitializeCentralRepositoryL()
+    {
+    iTelephonyRepository = CRepository::NewL( KCRUidTelephonySettings );
+    iCommonTelephonyRepository = 
+            CRepository::NewL( KCRUidCommonTelephonySettings );
+    iGSVariationRepository = CRepository::NewL( KCRUidSettingsVariation );
+    iRichCallRepository = CRepository::NewL( KCRUidRichCallSettings );
+    iLogsRepository = CRepository::NewL( KCRUidLogs );
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::UninitializeCentralRepositoryL
+//
+// Removes Central Repository objects
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::UninitializeCentralRepository()
+    {
+    if ( iTelephonyRepository )
+        {
+        delete iTelephonyRepository;
+        iTelephonyRepository = NULL;
+        }
+    if ( iCommonTelephonyRepository )
+        {
+        delete iCommonTelephonyRepository;
+        iCommonTelephonyRepository = NULL;
+        }
+    if ( iGSVariationRepository )
+        {
+        delete iGSVariationRepository;
+        iGSVariationRepository = NULL;
+        }
+    if ( iRichCallRepository )
+        {
+        delete iRichCallRepository;
+        iRichCallRepository = NULL;
+        }
+    if ( iLogsRepository )
+        {
+        delete iLogsRepository;
+        iLogsRepository = NULL;
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::GetCallSettingValue
+// Gets one of the call related values (anykey answer, automatic redial,
+// summary after call or one key dialing) from Central Repository (Working OK)
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::GetCallSettingValue( const TCallSettId aCallId,
+                                            TInt& aId )
+    {
+    TInt ret = KErrNone;
+    if ( aCallId == EGSSummaryAfterCall )
+        {
+        ret = 
+            iCommonTelephonyRepository->Get( KSettingsSummaryAfterCall, aId );
+        }
+    else
+        {        
+        switch ( aCallId )
+            {     
+            case EGSOpeningSlideAnswerCall:
+                ret = iTelephonyRepository->
+                    Get( KSettingsOpeningSlideAnswer, aId );
+                break;
+            case EGSClosingSlideEndCall:
+                ret = iTelephonyRepository->
+                    Get( KSettingsClosingSlideEnd, aId );
+                break;            
+            case EGSSoftRejectDefault:
+                ret = iTelephonyRepository->
+                   Get( KSettingsSoftRejectDefaultInUse, aId );
+                break;
+            default:
+                break;
+            };
+        }
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetCallSettingValue
+// Sets one of the call related values (anykey answer, automatic redial,
+// summary after call or one key dialing) from Central Repository (working OK)
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::SetCallSettingValue( const TCallSettId aCallId,
+                                            TInt aId )
+    {
+    TInt ret = KErrNone;
+    if ( aCallId == EGSSummaryAfterCall )
+        {
+        ret = 
+            iCommonTelephonyRepository->Set( KSettingsSummaryAfterCall, aId );
+        }
+    else
+        {
+        switch ( aCallId )
+            {
+            case EGSOpeningSlideAnswerCall:
+                ret = iTelephonyRepository->
+                    Set( KSettingsOpeningSlideAnswer, aId );
+                break;
+            case EGSClosingSlideEndCall:
+                ret = iTelephonyRepository->
+                    Set( KSettingsClosingSlideEnd, aId );
+                break;    
+            case EGSSoftRejectDefault:
+                ret = iTelephonyRepository->
+                    Set( KSettingsSoftRejectDefaultInUse, aId );
+                break;
+            default:
+                break;
+            };
+        }
+        
+    return ret;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::GetCSPStatus
+// 
+// Get Customer Service Profile status
+// ----------------------------------------------------------------------------
+//
+TBool CGSCallPluginModel::GetCSPStatus()
+    {
+    if ( iCSP )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }    
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetCSPActiveL
+// 
+// Set Customer Service Profile active
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetCSPActiveL( TBool aValue )
+    {
+    if ( aValue )
+        {
+        iCSP = CPsetCustomerServiceProfile::NewL();
+        User::LeaveIfError( iCSP->OpenCSProfileL() );
+        }
+    else
+        {        
+        delete iCSP;
+        iCSP = NULL;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::IsSettingSupported
+// 
+// Check if a given setting is supported
+// ----------------------------------------------------------------------------
+//
+TBool CGSCallPluginModel::IsSettingSupported( TInt aSettingNumber )
+    {
+    __ASSERT_ALWAYS( iCSP != NULL, User::Panic( KGSNameOfClass, 
+                                   EGSCallPluinModelPanicNullPtr ) );
+    TBool settingSupported = EFalse;
+    TInt retVal = KErrNone;
+
+    switch ( aSettingNumber )
+        {
+        case EGSCSPCallWaiting:
+            retVal = iCSP->IsCWSupported( settingSupported );
+            break;
+        case EGSCSPAlternateLine:
+            retVal = iCSP->IsALSSupported( settingSupported );
+            break;
+        default:
+            break;
+        }
+    if ( retVal != KErrNone )
+        {
+        //if a CSP error occurs, by default service is available
+        settingSupported = ETrue;
+        }
+
+    return settingSupported;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::GetSoftRejectText
+// Gets soft reject text from shared data.
+// ----------------------------------------------------------------------------
+//
+TBool CGSCallPluginModel::GetSoftRejectText( TDes& aText )
+    {
+    TInt ret = iTelephonyRepository->Get( KSettingsSoftRejectText, aText );
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetSoftRejectText
+// Sets user defined text to shared data for soft reject.
+// ----------------------------------------------------------------------------
+//
+TBool CGSCallPluginModel::SetSoftRejectText( TDes& aText )
+    {
+    TInt ret = iTelephonyRepository->Set( KSettingsSoftRejectText, aText );
+    return ret;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::VTStillImageL
+// 
+// VT Still Image mode.
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::VTStillImageL()
+    {
+    TInt StImg = KGSSettingOff;
+    
+    User::LeaveIfError( iTelephonyRepository->Get( KSettingsVTStillImage, 
+                                                   StImg ) );
+    return StImg;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetVTStillImageL
+// 
+// Sets VT Still Image mode to Shared Data
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetVTStillImageL( const TInt aValue )
+    {
+    User::LeaveIfError( iTelephonyRepository->Set( KSettingsVTStillImage, 
+                                                   aValue ) );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::PrefixChangeModeL
+// 
+// Get the Japanese prefix change mode value from shared data.
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::PrefixChangeModeL()
+    {
+    TInt mode = KGSSettingOff;
+    User::LeaveIfError( iTelephonyRepository->
+                Get( KSettingsDialPrefixChangeMode, mode ) );
+    SwitchValue( mode );
+    return mode;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetPrefixChangeModeL
+// 
+// Set the Japanese prefix change mode value to shared data. CenRep OK
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetPrefixChangeModeL( TInt aMode )
+    {
+    SwitchValue( aMode );
+    User::LeaveIfError( iTelephonyRepository->
+                Set( KSettingsDialPrefixChangeMode, aMode ) );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::PrefixChangeDataL
+// 
+// Reads prefix change text from shared data and returns it
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::PrefixChangeDataL( TDes& aText )
+    {
+    User::LeaveIfError( iTelephonyRepository->
+                Get( KSettingsDialPrefixText, aText ) );
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetPrefixChangeDataL
+// 
+// Writes prefix change text to shared data
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetPrefixChangeDataL( const TDesC& aText )
+    {
+    User::LeaveIfError( iTelephonyRepository->
+                Set( KSettingsDialPrefixText, aText ) );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SwitchValue
+// 
+// Switching value from 1 to 0 and back
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SwitchValue( TInt& aValue )
+    {
+    switch( aValue )   
+        {
+        case KGSSettingOff: //0
+            aValue = KGSIndexOff; //1
+            break;
+        case KGSSettingOn: //1
+            aValue = KGSIndexOn; //0
+            break;
+        default:
+            aValue = KErrNotFound;
+        };
+    }
+
+
+// ---------------------------------------------------------
+// CGSCallPluginModel::RestrictedSendCallerIdSupportedL
+// 
+// Check if Restricted Send Caller ID is supported.
+// ---------------------------------------------------------
+//
+TBool CGSCallPluginModel::RestrictedSendCallerIdSupportedL()
+    {
+    TBool supported = EFalse;    
+
+    if ( iLocalVariationValues & EGSConfigRestrictedSendCallerId )
+        {
+        supported = ETrue;
+        }
+
+    return supported;
+
+    }
+
+// ---------------------------------------------------------
+// CGSCallPluginModel::SecureSendCallerIdSupportedL
+// 
+// Check if Secure Send Caller ID is supported.
+// ---------------------------------------------------------
+//
+TBool CGSCallPluginModel::SecureSendCallerIdSupportedL()
+    {
+    TBool supported = EFalse;    
+
+    if ( iLocalVariationValues & EGSConfigSecureSendCallerId )
+        {
+        supported = ETrue;
+        }
+
+    return supported;
+
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::GetVoIPCallSettingValue
+// Gets one of the VoIP call related values (send my Int. call id, 
+// Internet call waiting, preferred call type, do not disturb or 
+// Internet call barring) from Central Repository
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::GetVoIPCallSettingValue( 
+    const TGSVoIPSetting aVoipSettingId, TInt& aVoipId ) 
+    {
+    TInt ret( KErrNone );
+   
+    switch ( aVoipSettingId )
+        {
+        case EGSVoIPSendIntCallId:
+            ret = iRichCallRepository->Get( KRCSEClir, aVoipId );
+            break;
+        case EGSVoIPCW:
+            ret = iRichCallRepository->Get( KRCSPSCallWaiting, aVoipId );
+            break;
+        case EGSVoIPPreType:
+            ret = iRichCallRepository->Get( KRCSEPreferredTelephony, aVoipId );
+            break;
+        case EGSVoIPDnd:
+            ret = iRichCallRepository->Get( KRCSEDoNotDisturb, aVoipId );
+            break;
+        case EGSVoIPBarring:
+            ret = iRichCallRepository->Get( KRCSEAnonymousCallBlockRule, aVoipId );
+            break;
+        default:
+            break;
+        }
+    
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetVoIPCallSettingValue
+// Sets one of the VoIP call related values (send my Int. call id, 
+// Internet call waiting, preferred call type, do not disturb or 
+// Internet call barring) from Central Repository
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::SetVoIPCallSettingValue( 
+    const TGSVoIPSetting aVoipSettingId, TInt aVoipId )
+    {
+    TInt ret( KErrNone );
+    
+    switch( aVoipSettingId )
+        {
+        case EGSVoIPSendIntCallId:
+            ret = iRichCallRepository->Set( KRCSEClir, aVoipId );
+            break;
+        case EGSVoIPCW:
+            ret = iRichCallRepository->Set( KRCSPSCallWaiting, aVoipId );
+            break;
+        case EGSVoIPPreType:
+            ret = iRichCallRepository->Set( KRCSEPreferredTelephony, aVoipId );
+            break;
+        case EGSVoIPDnd:
+            ret = iRichCallRepository->Set( KRCSEDoNotDisturb, aVoipId );
+            break;
+        case EGSVoIPBarring:
+            ret = iRichCallRepository->Set( KRCSEAnonymousCallBlockRule, aVoipId );
+            break;
+        default:
+            break;
+        }
+        
+    return ret;    
+    }
+    
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::GetSCCPStatus
+// Gets SCCP status from Central Repository
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::GetSCCPStatus( TInt& aStatus )
+    {
+    TInt ret( KErrNone );
+    ret = iTelephonyRepository->Get( KSCCPinstallUpgrade, aStatus );
+    return ret;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::CallDurationL
+// 
+// Get the Call duration setting value
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::CallDurationL()
+    {
+    TInt value = KGSSettingOff;
+    User::LeaveIfError( iLogsRepository->
+                Get( KLogsShowCallDuration, value ) );
+    
+	SwitchValue ( value );
+
+    return value;
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetCallDurationL
+// 
+// Set the Call duration setting value
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetCallDurationL( TInt aValue )
+    {
+    SwitchValue ( aValue );
+    User::LeaveIfError( iLogsRepository->
+                Set( KLogsShowCallDuration, aValue ) );
+    }
+
+// ---------------------------------------------------------
+// CGSTelPluginModel::VoIPSupported
+// 
+// Check if VoIP is supported.
+// ---------------------------------------------------------
+//    
+TBool CGSCallPluginModel::VoIPSupported()
+    {
+    TInt supported( KGSSettingOff );
+#if defined(__VOIP) && defined(RD_VOIP_REL_2_2)
+    if ( iSpSettings->IsFeatureSupported( ESupportVoIPFeature ) &&
+        iSpSettings->IsFeatureSupported( ESupportVoIPSSFeature ) )
+        {
+        supported = KGSSettingOn;
+        }
+#else // __VOIP && RD_VOIP_REL_2_2
+    if ( FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) )
+        {
+        iTelephonyRepository->Get( KDynamicVoIP, supported );
+        }
+#endif // __VOIP && RD_VOIP_REL_2_2
+    return KGSSettingOff != supported;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::LongPressCallKeyL
+// 
+// Get the Long Press Call Key setting value
+// 0,1 --> Inactive (Default value is 1 and when RFS Default value is 0) 
+// 2 --> Video call
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::LongPressCallKeyL()
+    {
+    TInt value = EGSLongPressCallKeyVoiceCall;
+  #ifdef RD_VT_LONG_SEND_KEY
+    User::LeaveIfError( iTelephonyRepository->
+                Get( KSettingsUiLongCallKeyPress, value ) );
+  #endif
+    return value;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetLongPressCallKeyL
+// 
+// Set the Long Press Call Key setting value
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetLongPressCallKeyL( const TInt aValue )
+    {
+#ifdef RD_VT_LONG_SEND_KEY
+    User::LeaveIfError( iTelephonyRepository->
+                Set( KSettingsUiLongCallKeyPress, aValue ) );
+#endif
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::MapLongPressKeyCallKeyValue
+// 
+// Maps the Long Press Call Key setting value
+// NOTE : EGSLongPressCallKeyVoiceCall is the default value normally
+// NOTE: When Restore Factory Settings is done, the default value 
+//       is set to EGSLongPressCallKeyInActive
+// Three key values are used for a CenRep key though we have two
+// two setting items because these values are also been used by
+// CallUi and Phone Application.
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::MapLongPressKeyCallKeyValue( TInt &aValue )
+    {
+#ifdef RD_VT_LONG_SEND_KEY
+  	switch ( aValue )
+  		{
+  		case EGSLongPressCallKeyVoiceCall:
+  			 aValue = EGSLongPressCallKeyNotSet;
+  			 break;
+  		case EGSLongPressCallKeyVideoCall:
+  		     aValue = EGSLongPressCallKeyVoiceCall;
+  			 break;
+  		default:
+  			 break;
+  		}
+#endif
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::OwnImageVtCallStatusL
+// 
+// Get the Own Image sending during vt call setting value
+// 0,1 --> Inactive (Default value is 1 and when RFS Default value is 0) 
+// 2 --> Video call
+// ----------------------------------------------------------------------------
+//
+TInt CGSCallPluginModel::OwnImageVtCallStatusL()
+    {
+    TInt value;
+    User::LeaveIfError( iTelephonyRepository->
+                Get( KSettingsVTVideoSending, value ) );
+    return value;
+    }
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SetOwnImageVtCallStatusL
+// 
+// Set the Long Press Call Key setting value
+// ----------------------------------------------------------------------------
+//
+void CGSCallPluginModel::SetOwnImageVtCallStatusL( const TInt aValue )
+    {
+    User::LeaveIfError( iTelephonyRepository->
+                Set( KSettingsVTVideoSending, aValue ) );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CGSCallPluginModel::SlideSettingsShown
+// 
+// Check if slide settings items should be shown
+// ----------------------------------------------------------------------------
+//
+TBool CGSCallPluginModel::SlideSettingsShownL() const
+    {
+    TInt value( EGSNotShowSlideSettings );
+    
+    User::LeaveIfError( 
+            iTelephonyRepository->Get( KSettingsShowSlideSettings,value ) );
+
+    if ( EGSShowSlideSettings == value )
+        {
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+//  End of File