/*
* Copyright (c) 2004 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:  implementation of CPESettingsCommand class.
*
*/


// INCLUDES
#include "CPESettingsCommand.h"
#include "MPEPhoneModelInternal.h"
#include <mpedatastore.h>
#include <TALogger.h>


// LOCAL CONSTANTS
// None.

// ==================== LOCAL FUNCTIONS =====================================
//None.

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// CPESettingsCommand::CPESettingsCommand
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CPESettingsCommand::CPESettingsCommand(
        MPEPhoneModelInternal& aModel ) : iModel( aModel )
    {
    TEFLOGSTRING( KTAOBJECT, "PE: CPESettingsCommand::CPESettingsCommand" );
    } //CPESettingsCommand

// -----------------------------------------------------------------------------
// CPESettingsCommand::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CPESettingsCommand::ConstructL()
    {
    User::LeaveIfError( iSSSettings.Open() );
    TInt errorCode = iSSSettings.RegisterAll( *this );
    if ( errorCode == KErrNotSupported )
        {
        errorCode = KErrNone;
        }
    User::LeaveIfError( errorCode );

    TEFLOGSTRING( KTAOBJECT, "PE CPESettingsCommand::ConstructL" );
    } //ConstructLb

// -----------------------------------------------------------------------------
// CPESettingsCommand::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CPESettingsCommand* CPESettingsCommand::NewL(
        MPEPhoneModelInternal& aModel )
    {
    CPESettingsCommand* self = new ( ELeave ) CPESettingsCommand( aModel );

    CleanupStack::PushL( self );
    self->ConstructL( );
    CleanupStack::Pop( self );

    TEFLOGSTRING( KTAOBJECT, "PE CPESettingsCommand::NewL" );

    return self;

    } //NewL

// Destructor
CPESettingsCommand::~CPESettingsCommand()
    {
    iSSSettings.Close();
    TEFLOGSTRING( KTAOBJECT, "PE CPESettingsCommand::~CPESettingsCommand" );
    } //~CPESettingsCommand

// -----------------------------------------------------------------------------
// CPESettingsCommand::GetALSLineL
// Sends synchronous request to get the ALS line and returns handle to access 
// the status.
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CPESettingsCommand::GetALSLineL(
        RMobilePhone::TMobilePhoneALSLine& aALSLine )
    {
    TInt value;
    User::LeaveIfError( iSSSettings.Get( ESSSettingsAls, value ) );

    TSSSettingsAlsValue alsValue = 
        static_cast< TSSSettingsAlsValue > ( value );

    switch( alsValue )
        {
        case ESSSettingsAlsNotSupported:
            aALSLine = RMobilePhone::EAlternateLineNotAvailable;
            break;
        case ESSSettingsAlsPrimary: 
            aALSLine = RMobilePhone::EAlternateLinePrimary;       
            break;
        case ESSSettingsAlsAlternate:
            aALSLine = RMobilePhone::EAlternateLineAuxiliary;
            break;
        default:
            break;
        }
    } //GetALSLineL

// -----------------------------------------------------------------------------
// CPESettingsCommand::SetALSLineL
// Sends synchronous request to set the ALS line and returns handle to access 
// the status.
// -----------------------------------------------------------------------------
//
void CPESettingsCommand::SetALSLineL(
        RMobilePhone::TMobilePhoneALSLine& aALSLine )
    {
    TSSSettingsAlsValue alsValue = 
        static_cast<TSSSettingsAlsValue> ( aALSLine );
        
    switch( aALSLine )
        {
        case RMobilePhone::EAlternateLineUnknown:
        case RMobilePhone::EAlternateLineNotAvailable:
            alsValue = ESSSettingsAlsNotSupported;
            break;
        case RMobilePhone::EAlternateLinePrimary: 
            alsValue = ESSSettingsAlsPrimary;       
            break;
        case RMobilePhone::EAlternateLineAuxiliary:
            alsValue = ESSSettingsAlsAlternate;
            break;
        default:
            TEFLOGSTRING( KTAINT,
                "PE CPESettingsCommand::SetALSLineL: Not valid value" );
            __ASSERT_DEBUG( EFalse, Panic( EPEPanicInvalidRequest ) );
            break;
        }
    User::LeaveIfError( iSSSettings.Set( ESSSettingsAls, alsValue ) );
    } 

// -----------------------------------------------------------------------------
// CPESettingsCommand::GetClirL
// Sends synchronous request to get the CLIR value and returns handle to access 
// the status.
// -----------------------------------------------------------------------------
//
void CPESettingsCommand::GetClirL(
        RMobileCall::TMobileCallIdRestriction& aClir )
    {
    TInt value;
    User::LeaveIfError( iSSSettings.Get( ESSSettingsClir, value ) );

    TSSSettingsClirValue clir = 
        static_cast<TSSSettingsClirValue> ( value );
    TEFLOGSTRING2( KTAERROR,
        "PE CPESettingsCommand::GetClirL, clir: %d", clir );
        
    switch( clir )
        {
        case ESSSettingsClirNetworkDefault:
            aClir = RMobileCall::EIdRestrictDefault;
            break;
        case ESSSettingsClirExplicitInvoke: 
            aClir = RMobileCall::EDontSendMyId;
            break;
        case ESSSettingsClirExplicitSuppress:
            aClir = RMobileCall::ESendMyId; 
            break;
        default:
            TEFLOGSTRING2( KTAERROR,
                "PE CPESettingsCommand::GetClirL, NOT VALID aClir: %d", aClir );
            __ASSERT_DEBUG( EFalse, Panic( EPEPanicInvalidRequest ) );
            break;
        }
    }

// -----------------------------------------------------------------------------
// CPESettingsCommand::GetCugL
// Sends synchronous request to get the CUG index and returns handle to access 
// the status.
// -----------------------------------------------------------------------------
//
void CPESettingsCommand::GetCugL(
        TInt aCugIndex )
    {
    TEFLOGSTRING2( KTAINT,
        "PE CPESettingsCommand::GetCugL, aCugIndex: %d", aCugIndex );
    User::LeaveIfError( iSSSettings.Get( ESSSettingsCug, aCugIndex ) );
    }
    
// ---------------------------------------------------------
// CPESettingsCommand::PhoneSettingChanged
// ---------------------------------------------------------
//
void CPESettingsCommand::PhoneSettingChanged( 
        TSSSettingsSetting aSetting, 
        TInt aNewValue )
    {
    if ( aSetting == ESSSettingsAls )
        {
        TSSSettingsAlsValue alsValue = 
            static_cast< TSSSettingsAlsValue > ( aNewValue );
    
        RMobilePhone::TMobilePhoneALSLine 
            alsLine( RMobilePhone::EAlternateLineUnknown );

        switch( alsValue )
            {
            case ESSSettingsAlsNotSupported:
                alsLine = RMobilePhone::EAlternateLineNotAvailable;
                break;
            case ESSSettingsAlsPrimary: 
                alsLine = RMobilePhone::EAlternateLinePrimary;       
                break;
            case ESSSettingsAlsAlternate:
                alsLine = RMobilePhone::EAlternateLineAuxiliary;
                break;
            default:
                break;
            }
        iModel.DataStore()->SetALSLine( CCCECallParameters::TCCELineType( alsLine ) );
        iModel.SendMessage( MEngineMonitor::EPEMessageALSLineChanged );
        }
    } // PhoneSettingChanged

//  End of File
