cellular/SSSettings/src/RSSSettings.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/cellular/SSSettings/src/RSSSettings.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1195 +0,0 @@
-/*
-* Copyright (c) 2002-2005 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:  Class for getting information about the Clir, Cug, Als and 
-*                Als blocking status in the phone. 
-*
-*/
-
-
-
-// INCLUDE FILES
-#include    <bldvariant.hrh> // for feature definitions
-#include    <e32base.h>
-#include    <rmmcustomapi.h>
-#include    <mmtsy_names.h>
-#include    <PSVariables.h> 
-#include    <startupdomainpskeys.h>
-#include    <centralrepository.h> // central repository 
-#include    <sssettingsprivatecrkeys.h> // settings central repository keys. 
-#include    <telservicesinternalcrkeys.h>
-#include    <telservicesvariant.hrh>
-
-#include    "rsssettings.h" 
-#include    "msssettingsobserver.h" 
-#include    "csssettingsnotifier.h" 
-#include    "csssettingsalsnotifier.h" 
-#include    "sssettingslogger.h" 
-
-// CONSTANTS
-_LIT( KPanicCat, "SSSettings" );
-#define KSSSettingsTSYName KMmTsyModuleName
-const TInt KSSSettingsTSYNameMaxLength( 80 );
-const TInt KSSSettingsLastSetting(ESSSettingsDefaultCug);
-const TInt KSSSettingsMaxETelRetryCount(7);
-const TInt KSSSettingsETelRetryCountTimeout(100000); 
-
-// ================= LOCAL FUNCTIONS =======================
-TInt SSSettingsDoOpenEtelConnection( RTelServer& aEtel, RPhone& aPhone )
-    {
-    TInt phones(0);
-    if ( aEtel.EnumeratePhones( phones) == KErrNone )
-        {
-        for ( TInt p = 0 ; p < phones ; p++ )
-            {
-            TBuf<KSSSettingsTSYNameMaxLength> tsyName;
-            if ( aEtel.GetTsyName( p,tsyName ) == KErrNone )
-                {
-                if ( tsyName.CompareF( KSSSettingsTSYName ) == 0 )
-                    {
-                    RTelServer::TPhoneInfo info;
-                    if ( aEtel.GetPhoneInfo( p,info ) == KErrNone )
-                        {
-                        if ( aPhone.Open( aEtel, info.iName ) == KErrNone )
-                            {
-                            return KErrNone;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    return KErrGeneral;
-    }
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-EXPORT_C RSSSettings::RSSSettings()
-    {
-    iData = NULL;
-    }
-
-
-// ---------------------------------------------------------
-// RSSSettings::Close
-// ---------------------------------------------------------
-//
-EXPORT_C void RSSSettings::Close()
-   {
-   __SSSLOGSTRING("[SSS]--> RSSSettings::Close");
-   DeleteSettingsData();
-   __SSSLOGSTRING("[SSS] <--RSSSettings::Close");
-   }
-
-// ---------------------------------------------------------
-// RSSSettings::Open#1
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::Open()
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::Open");
-    TInt ret(KErrNone);
-    ret = Open( NULL );
-    __SSSLOGSTRING("[SSS] <--RSSSettings::Open");
-    return ret;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::Open#3
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::Open( RTelServer* aTelServer )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::Open3");
-    TRAPD( error, OpenL( aTelServer ) );
-    if ( error != KErrNone )
-        {
-        DeleteSettingsData();
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::Open3");
-    return error;
-
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::OpenL
-// ---------------------------------------------------------
-//
-void RSSSettings::OpenL( RTelServer* aTelServer )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::OpenL");
-    if ( iData )
-        {
-        DeleteSettingsData();
-        }
-
-    iData = new ( ELeave ) TSSSettingsData;
-
-    iData->iOwnTelServer = ETrue;
-    iData->iTelServer = NULL;
-    iData->iCallBack = NULL;
-    iData->iCallBackSetting = KErrBadDescriptor;
-    iData->iCallBackValue = KErrBadDescriptor;
-    iData->iNotifier = NULL;
-    iData->iCustomPhone = NULL;
-    iData->iCUGDefault = NULL;
-    iData->iRepository = NULL;
-
-    // Create Notifier
-    // ConstructL is called later when the sessions are opened.
-    iData->iNotifier = new ( ELeave ) CSSSettingsNotifier( *this );
-
-    // Crate call back  for async inform
-    TCallBack callBack( InformCallBack, this );
-    iData->iCallBack = new ( ELeave ) 
-        CAsyncCallBack( callBack, CActive::EPriorityStandard );
-
-    // Check central repository connection.
-    iData->iRepository = CRepository::NewL(
-        KCRUidSupplementaryServiceSettings );
-
-    // Check ETel connecion
-    if ( aTelServer )
-        {
-        iData->iOwnTelServer = EFalse;
-        iData->iTelServer = aTelServer;
-        // Given ETel connection must be open.
-        if ( iData->iTelServer->Handle() == 0 )
-            {
-            User::Leave( KErrBadHandle );
-            }
-        }
-    else
-        {
-        iData->iOwnTelServer = ETrue;
-        iData->iTelServer = new ( ELeave ) RTelServer();
-
-        // Retry ETel connection:
-        TInt err(KErrNone);
-        for ( TInt i = 0 ; i < KSSSettingsMaxETelRetryCount ; i++ )
-            {
-            err = iData->iTelServer->Connect();
-            if ( err == KErrNone )
-                {
-                break;
-                }
-            User::After( KSSSettingsETelRetryCountTimeout );
-            }
-
-        User::LeaveIfError( err );
-        }
-
-    // Open phones
-    TInt error = iData->iTelServer->LoadPhoneModule( KSSSettingsTSYName );
-    if (( error != KErrNone ) && ( error != KErrAlreadyExists ))
-        {
-        User::Leave( error );
-        }
-
-    User::LeaveIfError( SSSettingsDoOpenEtelConnection( 
-        *iData->iTelServer, iData->iMobilePhone ) );
-
-    iData->iCustomPhone = new ( ELeave ) RMmCustomAPI;
-    iData->iCustomPhone->Open( iData->iMobilePhone );
-
-
-    // Finish off the notifier construct.
-    iData->iNotifier->ConstructL();
-
-    // Create arrays:
-    for ( TInt i = 0 ; i <= KSSSettingsLastSetting ; i++ )
-        {
-        RSSSettingsObserverArray newArray;
-        User::LeaveIfError( iData->iObservers.Append( newArray ) );
-        }
-
-    //Get default CUG
-    error = GetDefaultCugL( iData->iCUGDefault );
-    if ( error != KErrNone )
-        {
-        //Support legacy, if error occurs
-        iData->iCUGDefault = ESSSettingsCugDefault; 
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::OpenL");
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::DeleteSettingsData
-// ---------------------------------------------------------
-//
-void RSSSettings::DeleteSettingsData()
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::DeleteSettingsData");
-    if ( iData == NULL )
-        {
-        return;
-        }
-
-    // if some event is waiting for the observer calls..
-    if (( iData->iCallBackSetting != KErrBadDescriptor ||
-          iData->iCallBackValue != KErrBadDescriptor ) &&
-          iData->iCallBack )
-        {
-        iData->iCallBack->Cancel();
-        InformCallBack( this );
-        }
-
-    // close array
-    MSSSettingsObserver* observer = FindOneObserver();
-    while ( observer )
-        {
-        CancelAll( *observer );
-        observer = FindOneObserver();
-        }
-
-    iData->iObservers.Reset();
-
-    // delete callback
-    if ( iData->iCallBack )
-        {
-        iData->iCallBack->Cancel();
-        delete iData->iCallBack;
-        iData->iCallBack = NULL;
-        }
-
-    // Delete notifier
-    delete iData->iNotifier;
-    iData->iNotifier = NULL;
-
-    delete iData->iRepository;
-    iData->iRepository = NULL;
-    
-    // close phones
-    if ( iData->iCustomPhone )
-        {
-        iData->iCustomPhone->Close();
-        delete iData->iCustomPhone;
-        iData->iCustomPhone = NULL;
-        }
-
-    iData->iMobilePhone.Close();
-
-    // close ETel session
-    if (( iData->iTelServer ) && ( iData->iOwnTelServer ))
-        {
-        if ( iData->iTelServer->Handle() )
-            {
-            iData->iTelServer->Close();
-            }
-        delete iData->iTelServer;
-        iData->iTelServer = NULL;
-        }
-
-    // delete data object
-    delete iData;
-    iData = NULL;
-    __SSSLOGSTRING("[SSS] <--RSSSettings::DeleteSettingsData");
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::InformCallBack
-// KErrBadDescriptor is used as not defined.
-// ---------------------------------------------------------
-//
-TInt RSSSettings::InformCallBack( TAny* aPtr )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::InformCallBack");
-    RSSSettings* settings = static_cast <RSSSettings*> ( aPtr );
-
-    if ( !settings->iData )
-        {
-        return KErrNone;
-        }
-
-    // We need to have both setting and value to make observer call.
-    if ( settings->iData->iCallBackSetting == KErrBadDescriptor ||
-         settings->iData->iCallBackValue == KErrBadDescriptor )
-        {
-        settings->iData->iCallBackSetting = KErrBadDescriptor;
-        settings->iData->iCallBackValue = KErrBadDescriptor;
-        return KErrNone;
-        }
-
-    settings->InformChange(
-        (TSSSettingsSetting)settings->iData->iCallBackSetting , 
-        settings->iData->iCallBackValue );
-
-    settings->iData->iCallBackSetting = KErrBadDescriptor;
-    settings->iData->iCallBackValue = KErrBadDescriptor;
-    
-    __SSSLOGSTRING("[SSS] <--RSSSettings::InformCallBack");
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::InformChange
-// ---------------------------------------------------------
-//
-void RSSSettings::InformChange( TSSSettingsSetting aSetting, TInt aNewValue )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::InformChange");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-
-    RSSSettingsObserverArray& array = iData->iObservers[aSetting];
-    for ( TInt i = 0 ; i < array.Count() ; i++ )
-        {
-        array[i]->PhoneSettingChanged( aSetting, aNewValue );
-        }
-
-    __SSSLOGSTRING("[SSS] <--RSSSettings::InformChange");
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::RegisterAll
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::RegisterAll( MSSSettingsObserver& aObserver )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::RegisterAll");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-
-    TInt error(KErrNone);
-    for ( TInt i = 0 ; i <= KSSSettingsLastSetting ; i++ )
-        {
-        error = Register( static_cast <TSSSettingsSetting >( i ), aObserver );
-        // KErrAlreadyExists: it's already registered.
-        // KErrNotSupported: ALS and ALS blocking may return this.
-        if (( error != KErrNone ) && 
-            ( error != KErrAlreadyExists ) && 
-            ( error != KErrNotSupported ))
-            {
-            CancelAll( aObserver );
-            break;
-            }
-        error = KErrNone;
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::RegisterAll");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::Register
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::Register( 
-    TSSSettingsSetting aSetting, 
-    MSSSettingsObserver& aObserver )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::Register");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-    __ASSERT_DEBUG( aSetting <= KSSSettingsLastSetting, 
-                    Panic( SSSettingsPanicInvalidRequest ) );
-
-    if ( ExistsObserver( aSetting, aObserver ) )
-        {
-        return KErrAlreadyExists;
-        }
-
-    RSSSettingsObserverArray& array = iData->iObservers[aSetting];
-
-    // When the first observer is set, the notifier is activated.
-    TInt error(KErrNone);
-    if ( array.Count() == 0 )
-        {
-        error = iData->iNotifier->AddNotifier( aSetting );
-        // if BT Sim Access Profile(SAP) is turned on then ETEL returns KErrNotReady.
-        if ( error != KErrNone )
-            {
-            __SSSLOGSTRING1("[SSS]--> RSSSettings::Register -> Error code: %d", error );
-            return error;
-            }
-        }
-    error = array.Append( &aObserver );
-
-    __SSSLOGSTRING("[SSS] <--RSSSettings::Register");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::CancelAll
-// ---------------------------------------------------------
-//
-EXPORT_C void RSSSettings::CancelAll( 
-    MSSSettingsObserver& aObserver )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::CancelAll");
-    if ( !iData )
-        {
-        return;
-        }
-
-    for ( TInt i = 0 ; i <= KSSSettingsLastSetting ; i++ )
-        {
-        Cancel( static_cast <TSSSettingsSetting> ( i ), aObserver );
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::CancelAll");
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::Cancel
-// ---------------------------------------------------------
-//
-EXPORT_C void RSSSettings::Cancel( 
-    TSSSettingsSetting aSetting,
-    MSSSettingsObserver& aObserver )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::Cancel");
-    if ( !iData )
-        {
-        return;
-        }
-    __ASSERT_ALWAYS( aSetting <= KSSSettingsLastSetting, 
-                     Panic( SSSettingsPanicInvalidRequest ) );
-
-    RSSSettingsObserverArray& array = iData->iObservers[aSetting];
-
-    TInt index = array.Find( &aObserver );
-    if ( index == KErrNotFound )
-        {
-        return;
-        }
-
-    array.Remove( index );
-    array.Compress();
-
-    // When the last observer is removed the notifier is cancelled.
-    if ( array.Count() == 0 )
-        {
-        iData->iNotifier->RemoveNotifier( aSetting );
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::Cancel");
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::Get
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::Get( TSSSettingsSetting aSetting, TInt& aValue )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::Get");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-
-    __ASSERT_DEBUG( aSetting <= KSSSettingsLastSetting, 
-                    Panic( SSSettingsPanicInvalidRequest ) );
-
-    TInt error(KErrNone);
-    TInt value(0);
-    if ( error != KErrNone )
-        {
-        return error;
-        }
-
-    // If Get fails, we try to save the default data.
-    switch ( aSetting )
-        {
-        case ESSSettingsCug:
-            error = GetCug( value );
-            if (( error != KErrNone ) && ( error != KErrNotFound ))
-                {
-                break;
-                }
-            if ( error == KErrNotFound )
-                {
-                error = iData->iRepository->Set(
-                    KSettingsCUG,
-                    iData->iCUGDefault );
-                    
-                if ( error != KErrNone )
-                    {
-                    break;
-                    }
-                value = iData->iCUGDefault;
-                }
-            //If value outside of 0-32767 and not 65535, value is not accepted.
-            if ( iData->iCUGDefault == ESSSettingsAltCugDefault )
-                {
-                if ((( value < ESSSettingsCugSuppress ) || 
-                     ( value > ESSSettingsCugMax )) &&
-                     ( value != ESSSettingsAltCugDefault ))
-                    {
-                    error = KErrCorrupt;
-                    break;
-                    }
-                }
-            //If value outside of 1-32767, it is not accepted.
-            else
-                {
-                if (( value < ESSSettingsCugSuppress ) || 
-                    ( value > ESSSettingsCugMax ))
-                    {
-                    error = KErrCorrupt;
-                    break;
-                    }
-                }
-            aValue = value;
-            break;
-        case ESSSettingsClir:
-            error = iData->iRepository->Get(
-                KSettingsCLIR,
-                value );
-            if ( ( error != KErrNone ) && ( error != KErrNotFound ) )
-                {
-                break;
-                }
-            if ( error == KErrNotFound )
-                {
-                error = iData->iRepository->Set( 
-                    KSettingsCLIR,
-                    ESSSettingsClirNetworkDefault );
-                if ( error != KErrNone )
-                    {
-                    break;
-                    }
-                value = ESSSettingsClirNetworkDefault;
-                }
-
-            if (( value < ESSSettingsClirNetworkDefault ) || 
-                ( value > ESSSettingsClirExplicitSuppress ))
-                {
-                error = KErrCorrupt;
-                break;
-                }
-            aValue = value;
-            break;
-            
-        case ESSSettingsAls:
-            {
-            TInt simState(0);
-            error = RProperty::Get( KPSUidStartup, KPSSimStatus, simState );
-            
-            __SSSLOGSTRING2("[SSS] ESSSettingsAls: SIM State: %d Error: %d", simState, error );
-           if ( error == KErrNone )
-                {
-                error = GetALSSettingValue( value, simState );
-                aValue = value;
-                __SSSLOGSTRING1("[SSS]     RSSSettings::Get: ALS Value: %d", aValue );
-                }
-            break;
-            }
-        case ESSSettingsAlsBlocking:
-            {
-            RMmCustomAPI::TGetAlsBlockStatus alsBlockStatus = 
-                RMmCustomAPI::EBlockStatusUnknown;
-            error = iData->iCustomPhone->GetAlsBlocked( alsBlockStatus );
-
-            if ( error != KErrNone )
-                {
-                aValue = ESSSettingsAlsBlockingNotSupported;
-                return KErrNone;
-                }
-            switch ( alsBlockStatus )
-                {
-                case RMmCustomAPI::EBlockStatusNotSupported: 
-                    aValue = ESSSettingsAlsBlockingNotSupported;
-                    break;
-                case RMmCustomAPI::EBlockStatusActive: 
-                    aValue = ESSSettingsAlsBlockingOn;
-                    break;
-                case RMmCustomAPI::EBlockStatusInactive: 
-                    aValue = ESSSettingsAlsBlockingOff;
-                    break;
-                case RMmCustomAPI::EBlockStatusUnknown: 
-                    error = KErrNotSupported;
-                    break;
-                default:
-                    error = KErrNotSupported;
-                    break;
-                }
-            break;
-            }
-        case ESSSettingsDefaultCug:
-            aValue = iData->iCUGDefault;
-            break;
-        default:
-            error = KErrNotSupported;
-            break;
-        }
-
-    __SSSLOGSTRING("[SSS] <--RSSSettings::Get");
-    __SSSLOGSTRING1("[SSS] <--RSSSettings::Get Error code: %d", error );
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::GetALSSettingValue
-// ---------------------------------------------------------
-//
-TInt RSSSettings::GetALSSettingValue( TInt& aValue, const TInt aSimState )
-    {
-    __SSSLOGSTRING1("[SSS]--> RSSSettings::GetALSSettingValue SIMSTATE: %d", aSimState );
-    TInt value(0);
-    TBool simAlsValue(EFalse);
-    TBool ppAlsValue(EFalse);
-    TBool alsCSPSupport(EFalse);
-    TInt error(KErrNone);
-    /* aValue is set to ESSSettingsAlsNotSupported value because if SimState isnt 
-    ESimUsable or ALS handler doesnt exist then value should always be Not Supported.*/ 
-    aValue = ESSSettingsAlsNotSupported;
-    
-    // als is NULL when ALS is not supported by PP als, SIM als and SIM csp als bits.
-    CSSSettingsAlsNotifier* als = iData->iNotifier->GetAlsHandler();
-    __SSSLOGSTRING1("[SSS] AlsHandler value: %d", als );
-    
-     // Make sure that SIM state is OK otherwise parameters coming from SIM are mess.
-    if ( ( aSimState == ESimUsable ) && als )    
-        {
-        error = als->GetAlsValue( (TSSSettingsAlsValue&) value );
-        if ( error == KErrNone )
-            {
-            if (( value < ESSSettingsAlsNotSupported ) || 
-                ( value > ESSSettingsAlsAlternate ))
-                {
-                error = KErrCorrupt;
-                return error;
-                }
-            
-            TInt alsCSPError(KErrNone);
-            als->GetAlsSupport( ppAlsValue, simAlsValue, alsCSPSupport, alsCSPError );
-            if ( alsCSPError == KErrNotReady || alsCSPError == KErrServerBusy )
-                {
-                __SSSLOGSTRING1("[SSS] ALS - CSP specific Error code: %d", alsCSPError );
-                return alsCSPError;                             
-                }
-                                        
-            // Decides if ALS is wanted to be shown.
-            if ( KErrNotSupported == IsALSSupported( ppAlsValue, simAlsValue, alsCSPSupport, error ) )
-                {
-                value = ESSSettingsAlsNotSupported;
-                }
-            aValue = value;
-            }
-        }
-    __SSSLOGSTRING1("[SSS]<-- RSSSettings::GetALSSettingValue Error: %d", error );
-    return error;
-    }
-
-// ---------------------------------------------------------------------------
-// RSSSettings::IsALSSupported
-// List all cases when als is shown. If there is some special SIM that doesn't
-// support ALS then add case below and give error code KErrNotSupported.
-// ---------------------------------------------------------------------------
-// 
-TInt RSSSettings::IsALSSupported( TInt aPpAlsValue, TInt aSimAlsValue, 
-    TBool aAlsCspSupport, TInt aAlsCspError ) const
-    {
-    TInt error(KErrNotSupported);
-    
-    __SSSLOGSTRING1("[SSS]    RSSSettings::IsALSSupported ppAlsValue value: %d", aPpAlsValue );
-    __SSSLOGSTRING1("[SSS]    RSSSettings::IsALSSupported simAlsValue value:  %d", aSimAlsValue );
-    __SSSLOGSTRING1("[SSS]    RSSSettings::IsALSSupported alsCSPSupport value: %d", aAlsCspSupport );
-    __SSSLOGSTRING1("[SSS]    RSSSettings::IsALSSupported alsCSPError value: %d", aAlsCspError );
-    
-    // When PP ALS is on and used SIM card suppports CSP ALS then alsCSPSupport returns EFALSE and alsCSPError KErrNotSupported but ALS functionality
-    // needs to be shown therefore KErrNone is returned.
-    if ( aPpAlsValue && !aSimAlsValue && aAlsCspSupport == FALSE && aAlsCspError == KErrNotSupported  )
-        {
-        error = KErrNone;
-        }          
-    else if ( aPpAlsValue && aSimAlsValue && aAlsCspSupport == FALSE )
-        {
-        error = KErrNone;
-        }
-    else if ( aPpAlsValue && aSimAlsValue && aAlsCspSupport == TRUE  )
-        {
-        error = KErrNone;
-        }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
-    else if ( aPpAlsValue && !aSimAlsValue && aAlsCspSupport == FALSE  )
-        {
-        error = KErrNone;
-        }
-    else if ( aPpAlsValue && !aSimAlsValue && aAlsCspSupport == TRUE  )
-        {
-        error = KErrNone;
-        }
-    else if ( !aPpAlsValue && aSimAlsValue && aAlsCspSupport == TRUE  )
-        {
-        error = KErrNone;
-        }
-    else if ( !aPpAlsValue && aSimAlsValue && aAlsCspSupport == FALSE  )
-        {
-        error = KErrNotSupported;
-        }
-    else if ( !aPpAlsValue && !aSimAlsValue && aAlsCspSupport == TRUE  )
-        {
-        error = KErrNone;
-        }
-                            
-    return error;   
-    }
-    
-// ---------------------------------------------------------
-// RSSSettings::Set
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::Set( TSSSettingsSetting aSetting, TInt aValue )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::Set");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-
-    __ASSERT_DEBUG( aSetting <= KSSSettingsLastSetting, 
-                    Panic( SSSettingsPanicInvalidRequest ) );
-
-    TInt error(KErrNone);
-    if ( error != KErrNone )
-        {
-        return error;
-        }
-
-    switch ( aSetting )
-        {
-        case ESSSettingsCug:
-            {
-            if ( iData->iCUGDefault == ESSSettingsAltCugDefault )
-                {
-                if ((( aValue < ESSSettingsCugSuppress ) || 
-                    ( aValue > ESSSettingsCugMax )) &&
-                    ( aValue != iData->iCUGDefault ))
-                    {
-                    error = KErrArgument;
-                    break;
-                    }
-                }
-            else
-                {
-                if (( aValue < ESSSettingsCugSuppress ) || 
-                    ( aValue > ESSSettingsCugMax ))
-                    {
-                    error = KErrArgument;
-                    break;
-                    }
-                }
-            if ( error == KErrNone )
-                {
-                error = SetCug( aValue, iData->iCUGDefault );
-                }
-            }
-            break;
-        case ESSSettingsClir:
-            if (( aValue < ESSSettingsClirNetworkDefault ) || 
-                ( aValue > ESSSettingsClirExplicitSuppress ))
-                {
-                error = KErrArgument;
-                break;
-                }
-            error = iData->iRepository->Set(
-                KSettingsCLIR,
-                aValue );
-            break;
-        case ESSSettingsAls:
-            {
-            // ESSSettingsAlsBlockingNotSupported is not allowed to write
-            if (( aValue < ESSSettingsAlsBlockingOff ) || 
-                ( aValue > ESSSettingsAlsAlternate ))
-                {
-                error = KErrArgument;
-                break;
-                }
-
-            CSSSettingsAlsNotifier* als = iData->iNotifier->GetAlsHandler();
-            if ( als )
-                {
-                error = als->SetAlsValue( (TSSSettingsAlsValue)aValue );   
-                }
-            else
-                {
-                error = KErrNotSupported;
-                }
-            break;
-            }
-        case ESSSettingsAlsBlocking:
-            switch ( aValue )
-                {
-                case ESSSettingsAlsBlockingOn:
-                    error = iData->iCustomPhone->SetAlsBlocked( 
-                        RMmCustomAPI::EActivateBlock );
-                    break;
-                case ESSSettingsAlsBlockingOff:
-                    error = iData->iCustomPhone->SetAlsBlocked( 
-                        RMmCustomAPI::EDeactivateBlock );
-                    break;
-                default:
-                    error = KErrArgument;
-                    break;
-                }
-            break;
-        case ESSSettingsDefaultCug:
-            return KErrNotSupported;
-        default:
-            error = KErrArgument;
-            break;
-        }
-
-    if ( error == KErrNone )
-        {
-        // If old request is still waiting, force it to end.
-        if (( iData->iCallBackSetting != KErrBadDescriptor ) ||
-            ( iData->iCallBackValue != KErrBadDescriptor ))
-            {
-            iData->iCallBack->Cancel();
-            InformCallBack( this );
-            }
-
-        // activate call back
-        iData->iCallBackSetting = aSetting;
-        iData->iCallBackValue = aValue;
-        iData->iCallBack->CallBack();
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::Set");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::HandleSIMChanged
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::HandleSIMChanged()
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::HandleSIMChanged");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-    TInt error = Set( ESSSettingsCug, iData->iCUGDefault );
-    if ( error != KErrNone )
-        {
-        return error;
-        }
-    else
-        {
-        // Reset also the previous Cug value.
-        error = ResetPreviousCugValue();
-        if ( error != KErrNone )
-            {
-            return error;
-            }
-        }
-
-    error = Set( ESSSettingsClir, ESSSettingsClirNetworkDefault );
-    if ( error != KErrNone )
-        {
-        return error;
-        }
-
-    // Set als to primary only if it's stored in Shared Data.
-    CSSSettingsAlsNotifier* als = iData->iNotifier->GetAlsHandler();
-    if ( als )
-        {
-        TBool simAls(EFalse);
-        TBool ppAls(EFalse);
-        TBool cspAls(EFalse);
-        TInt cspError(KErrNone);
-        als->GetAlsSupport( ppAls, simAls, cspAls, cspError );
-        __SSSLOGSTRING2("[SSS]     RSSSettings::HandleSIMChanged: ppAls: %d, simAls: %d", ppAls, simAls );
-        if ( !simAls )
-            {
-            error = Set( ESSSettingsAls, ESSSettingsAlsPrimary );
-            }
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::HandleSIMChanged");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::ExistsObserver
-// ---------------------------------------------------------
-//
-TBool RSSSettings::ExistsObserver( TSSSettingsSetting aSetting, 
-                    MSSSettingsObserver& aObserver )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::ExistsObserver");
-    if ( !iData )
-        {
-        return EFalse;
-        }
-
-    __ASSERT_ALWAYS( aSetting <= KSSSettingsLastSetting, 
-                    Panic( SSSettingsPanicInvalidRequest ) );
-
-    TInt index = iData->iObservers[aSetting].Find( &aObserver );
-    if ( index == KErrNotFound )
-        {
-        return EFalse;
-        }
-
-    __SSSLOGSTRING("[SSS] <--RSSSettings::ExistsObserver");
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::FindOneObserver
-// ---------------------------------------------------------
-//
-MSSSettingsObserver* RSSSettings::FindOneObserver() const
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::FindOneObserver");
-    if ( iData == NULL )
-        {
-        return NULL;
-        }
-
-    for ( TInt settingIndex = 0 ; 
-          settingIndex < iData->iObservers.Count() ; 
-          settingIndex++ )
-        {
-        RSSSettingsObserverArray& array = iData->iObservers[settingIndex];
-        if ( array.Count() )
-            {
-            return array[0];
-            }
-        }
-
-    __SSSLOGSTRING("[SSS] <--RSSSettings::FindOneObserver");
-    return NULL;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::GetCug
-// ---------------------------------------------------------
-//
-TInt RSSSettings::GetCug( TInt& aValue ) const
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::GetCug");
-    TInt value(KErrNone);
-    TInt error(KErrNone);
-    error = iData->iRepository->Get(
-        KSettingsCUG,
-        value );
-
-    if ( error == KErrNone )
-        {
-        aValue = value;
-        }
-
-    __SSSLOGSTRING1("[SSS]     RSSSettings::GetCug: value: %d", value );
-    __SSSLOGSTRING("[SSS] <--RSSSettings::GetCug");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::GetDefaultCugL
-// ---------------------------------------------------------
-//
-TInt RSSSettings::GetDefaultCugL( TInt& aValue ) const
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::GetDefaultCugL");
-    TInt value(0);
-    TBool useDefault(EFalse);
-    TInt error(KErrNone);
-    CRepository* repository = CRepository::NewL( KCRUidTelSrvVariation );
-    error = repository->Get(
-            KTelSrvVariationFlags,
-            value );
-    delete repository;
-    repository = NULL;
-    __SSSLOGSTRING1("[SSS]--> RSSSettings::GetDefaultCugL: value: %d", value);
-    
-    if ( error == KErrNotFound )
-        {
-        useDefault = ETrue;
-        }
-    else if ( error != KErrNone )
-        {
-        return error;
-        }
-
-    if (( useDefault ) || 
-       !( value & KTelephonyLVFlagStandardCugIndexing ))
-        {
-        value = ESSSettingsCugDefault;
-        }
-    else
-        {
-        value = ESSSettingsAltCugDefault;
-        }
-    //Return directly (i.e. no shifting).
-    aValue = value;
-
-    __SSSLOGSTRING1("[SSS]--> RSSSettings::GetDefaultCugL: value: %d", value);
-    __SSSLOGSTRING("[SSS] <--RSSSettings::GetDefaultCugL");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::SetCug
-// Reads existing CUG value from shared data. If new CUG
-// value is between 1 and 32767 (or between 0 and 32767), 
-// value is to shared data.
-// Change also the previous cug to be the old current one.
-// ---------------------------------------------------------
-//
-TInt RSSSettings::SetCug( const TInt aValue, const TInt aCugDefault ) const
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::SetCug");
-    TInt value(KErrNone);
-    TInt error(KErrNone);
-    error = iData->iRepository->Get( KSettingsCUG, value );
-    __SSSLOGSTRING1("[SSS]--> RSSSettings::SetCug: value: %d", value);
-    if ( error == KErrNone )
-        {
-        TInt previousCug(value);
-
-        // CUG default must be saved as shared data default, to support
-        // different platform versions. Do not write default Cug again to 
-        // Central Repository, if already exists.
-        if ( ( aValue != aCugDefault ) ||
-             ( ( aValue == aCugDefault ) && ( previousCug != aCugDefault ) ) )
-            {
-            // Write the current cug value to Central Repository.
-            error = iData->iRepository->Set( KSettingsCUG, aValue );
-            __SSSLOGSTRING1("[SSS]--> RSSSettings::SetCug: aValue: %d", aValue);
-            if ( error == KErrNone )
-                {
-                if ( ( previousCug != ESSSettingsCugSuppress ) &&
-                     ( previousCug != aCugDefault ) )
-                    {
-                    // Write previous cug value to Central Repository.
-                    // Default or Suppress value can not be previousCug.
-                    error = iData->iRepository->Set( 
-                        KSettingsPreviousCUGIndex,
-                        previousCug );
-                    __SSSLOGSTRING1("[SSS]--> RSSSettings::SetCug: previousCug: %d", previousCug);
-                    }
-                }
-            }
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::SetCug");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::PreviousCugValue
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::PreviousCugValue( TInt& aPreviousValue )
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::PreviousCugValue");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-    TInt value(KErrNone);
-    TInt error = iData->iRepository->Get( 
-        KSettingsPreviousCUGIndex,
-        value );
-
-    if ( error == KErrNone )
-        {
-        aPreviousValue = value;
-        }
-
-    __SSSLOGSTRING1("[SSS]--> RSSSettings::PreviousCugValue: value: %d", value);
-    __SSSLOGSTRING("[SSS] <--RSSSettings::PreviousCugValue");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::ResetPreviousCugValue
-// Reset PreviousCugValue
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::ResetPreviousCugValue()
-    {
-    __SSSLOGSTRING("[SSS]--> RSSSettings::ResetPreviousCugValue");
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-
-    TInt value(KErrNone);
-    TInt error(KErrNone);
-    error = iData->iRepository->Get(
-        KSettingsPreviousCUGIndex,
-        value );
-    __SSSLOGSTRING1("[SSS]--> RSSSettings::PreviousCugValue; before setting: value: %d", value);
-    if ( error == KErrNone )
-        {
-        // Set cug to default one.
-        value = iData->iCUGDefault;
-        error = iData->iRepository->Set(
-            KSettingsPreviousCUGIndex,
-            value );
-        __SSSLOGSTRING1("[SSS]--> RSSSettings::PreviousCugValue; after setting: value: %d", value);
-        }
-    __SSSLOGSTRING("[SSS] <--RSSSettings::ResetPreviousCugValue");
-    return error;
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::HandleRefresh
-// ---------------------------------------------------------
-//
-EXPORT_C TInt RSSSettings::HandleRefresh()
-    {
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-
-    return iData->iNotifier->HandleRefresh();
-    }
-
-// ---------------------------------------------------------
-// RSSSettings::IsValueValidCugIndex
-// ---------------------------------------------------------
-//
-EXPORT_C TBool RSSSettings::IsValueValidCugIndex( const TInt& aValue ) const
-    {
-    __ASSERT_DEBUG( iData, Panic( SSSettingsPanicOpenNotDone ) );
-    if ( !iData )
-        {
-        return KErrBadHandle;
-        }
-
-    TBool validCugIndex = !(( aValue > ESSSettingsCugMax ) ||
-                            ( aValue < ESSSettingsCugMin ));
-
-    if ( iData->iCUGDefault != ESSSettingsCugDefault )
-        {
-        validCugIndex = validCugIndex || 
-                        aValue == ESSSettingsAltCugMin;
-        }
-    return validCugIndex;
-    }
-
-// ================= OTHER EXPORTED FUNCTIONS ==============
-// Panic
-GLREF_C void Panic( TSSSettingsPanic aPanic )
-    {
-    User::Panic( KPanicCat, aPanic );
-    }
-    
-//  End of File