diff -r 35488577e233 -r 2fa1fa551b0b cellular/SSSettings/src/CSSSettingsNotifier.cpp --- a/cellular/SSSettings/src/CSSSettingsNotifier.cpp Mon Aug 23 15:50:31 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,422 +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: Notifier for changes. -* -*/ - - -// INCLUDE FILES -#include -#include -#include - -#include "csssettingsnotifier.h" -#include "msssettingsobserver.h" -#include "csssettingsalsnotifier.h" -#include "sssettingslogger.h" - - -// DATA TYPES - -/** -* It enumerates all keys to be notified from Central Repository under -* KCRUidSupplementaryServiceSettings. -* -* ESSSettingsKeyNone - No key change to be notified. -* ESSSettingsKeyAlsLine - Als line change to be notified. -* ESSSettingsKeyClir - Clir change to be notified. -* ESSSettingsKeyCug - Cug change to be notified. -* ESSSettingsKeyAll - All keys to be notified. -*/ -enum TSSSettingsCenRepNotifyKey - { - ESSSettingsKeyNone = 0x00000000, - ESSSettingsKeyAlsLine = 0x00000001, - ESSSettingsKeyClir = 0x00000002, - ESSSettingsKeyCug = 0x00000004, - - // Keep as last. - ESSSettingsKeyAll = 0xFFFFFFFF - }; - - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::CSSSettingsNotifier -// ----------------------------------------------------------------------------- -// -CSSSettingsNotifier::CSSSettingsNotifier( RSSSettings& aSettings ) -: CActive( EPriorityStandard ), - iSettings( aSettings ), - iNotifyKeys ( ESSSettingsKeyNone ) - { - CActiveScheduler::Add( this ); - } - - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::ConstructL -// ----------------------------------------------------------------------------- -// -void CSSSettingsNotifier::ConstructL() - { - iAls = CSSSettingsAlsNotifier::NewL( - iSettings.iData->iMobilePhone, - *iSettings.iData->iCustomPhone, - *this ); - - iRepository = CRepository::NewL( KCRUidSupplementaryServiceSettings ); - - iCenRepAlsNotifyHandler = CCenRepNotifyHandler::NewL( - *this, - *iRepository, - CCenRepNotifyHandler::EIntKey, - KSettingsAlsLine ); - - iCenRepClirNotifyHandler = CCenRepNotifyHandler::NewL( - *this, - *iRepository, - CCenRepNotifyHandler::EIntKey, - KSettingsCLIR ); - - iCenRepCugNotifyHandler = CCenRepNotifyHandler::NewL( - *this, - *iRepository, - CCenRepNotifyHandler::EIntKey, - KSettingsCUG ); - - // Start listening all the keys, the notify is handled only if there is - // notify request made. - iCenRepAlsNotifyHandler->StartListeningL(); - iCenRepClirNotifyHandler->StartListeningL(); - iCenRepCugNotifyHandler->StartListeningL(); - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::~CSSSettingsNotifier -// ----------------------------------------------------------------------------- -// -CSSSettingsNotifier::~CSSSettingsNotifier() - { - Cancel(); - if( iCenRepAlsNotifyHandler ) - { - iCenRepAlsNotifyHandler->StopListening(); - } - - if( iCenRepClirNotifyHandler ) - { - iCenRepClirNotifyHandler->StopListening(); - } - - if( iCenRepCugNotifyHandler ) - { - iCenRepCugNotifyHandler->StopListening(); - } - - delete iCenRepAlsNotifyHandler; - delete iCenRepClirNotifyHandler; - delete iCenRepCugNotifyHandler; - delete iRepository; - delete iAls; - - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::AddNotifier -// ----------------------------------------------------------------------------- -// -TInt CSSSettingsNotifier::AddNotifier( TSSSettingsSetting aSetting ) - { - __SSSLOGSTRING("[SSS]--> CSSSettingsNotifier::AddNotifier"); - TInt error(KErrNone); - switch ( aSetting ) - { - case ESSSettingsCug: - iNotifyKeys = ( iNotifyKeys | ESSSettingsKeyCug ); - break; - - case ESSSettingsClir: - iNotifyKeys = ( iNotifyKeys | ESSSettingsKeyClir ); - break; - - case ESSSettingsAls: - error = iAls->NotifyAlsChange(); - if ( error == KErrNone || error == KErrAlreadyExists ) - { - iNotifyKeys = ( iNotifyKeys | ESSSettingsKeyAlsLine ); - } - break; - - case ESSSettingsAlsBlocking: - // Handled via active object - if ( !IsActive() ) - { - iSettings.iData->iCustomPhone->NotifyAlsBlockedChanged( - iStatus, iAlsBlockStatus ); - SetActive(); - } - else - { - error = KErrAlreadyExists; - } - break; - - case ESSSettingsDefaultCug: - //CUG default cannot be changed - break; - - default: - error = KErrNotSupported; - } - - __SSSLOGSTRING1("[SSS] CSSSettingsNotifier::AddNotifier: error: %d", error ); - __SSSLOGSTRING("[SSS] <--CSSSettingsNotifier::AddNotifier"); - return error; - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::RemoveNotifier -// ----------------------------------------------------------------------------- -// -void CSSSettingsNotifier::RemoveNotifier( TSSSettingsSetting aSetting ) - { - __SSSLOGSTRING("[SSS]--> CSSSettingsNotifier::RemoveNotifier"); - switch ( aSetting ) - { - case ESSSettingsCug: - iNotifyKeys = ( iNotifyKeys & ( ~ESSSettingsKeyCug ) ); - break; - - case ESSSettingsClir: - iNotifyKeys = ( iNotifyKeys & ( ~ESSSettingsKeyClir ) ); - break; - - case ESSSettingsAls: - if ( iAls ) - { - iAls->CancelNotify(); - } - iNotifyKeys = ( iNotifyKeys & ( ~ESSSettingsKeyAlsLine ) ); - break; - - case ESSSettingsAlsBlocking: - Cancel(); - break; - - default: - break; - } - __SSSLOGSTRING("[SSS] <--CSSSettingsNotifier::RemoveNotifier"); - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::RunL -// ----------------------------------------------------------------------------- -// -void CSSSettingsNotifier::RunL() - { - __SSSLOGSTRING("[SSS]--> CSSSettingsNotifier::RunL"); - switch ( iStatus.Int() ) - { - case KErrCancel: - case KErrNotSupported: - return; - case KErrNone: - // Inform observers - switch ( iAlsBlockStatus ) - { - case RMmCustomAPI::EBlockStatusNotSupported: - iSettings.InformChange( - ESSSettingsAlsBlocking, - static_cast ( - ESSSettingsAlsBlockingNotSupported ) ); - break; - case RMmCustomAPI::EBlockStatusActive: - iSettings.InformChange( - ESSSettingsAlsBlocking, - static_cast ( ESSSettingsAlsBlockingOn ) ); - break; - case RMmCustomAPI::EBlockStatusInactive: - iSettings.InformChange( ESSSettingsAlsBlocking, - static_cast ( ESSSettingsAlsBlockingOff ) ); - break; - case RMmCustomAPI::EBlockStatusUnknown: - break; - default: - break; - } - break; - default: - break; - } - - // re-activate request. - iSettings.iData->iCustomPhone->NotifyAlsBlockedChanged( - iStatus, iAlsBlockStatus ); - SetActive(); - - __SSSLOGSTRING("[SSS] <--CSSSettingsNotifier::RunL"); - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::DoCancel -// ----------------------------------------------------------------------------- -// -void CSSSettingsNotifier::DoCancel() - { - iSettings.iData->iCustomPhone->CancelAsyncRequest( - ECustomNotifyAlsBlockedChangedIPC ); - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::HandleNotifyInt -// ----------------------------------------------------------------------------- -// -void CSSSettingsNotifier::HandleNotifyInt( TUint32 aId, TInt aNewValue ) - { - __SSSLOGSTRING2("[SSS] -->CSSSettingsNotifier::HandleNotifyInt aId: %d aNewValue: %d", aId, aNewValue); - // First check CUG mode - if ( aId == KSettingsCUG ) - { - // Inform change only if Cug notify request is on. - if ( iNotifyKeys & ESSSettingsKeyCug ) - { - iSettings.InformChange( - ESSSettingsCug, - aNewValue ); - } - } - - // Then CLIR - else if ( aId == KSettingsCLIR ) - { - // Inform change only if Clir notify request is on. - if ( iNotifyKeys & ESSSettingsKeyClir ) - { - iSettings.InformChange( - ESSSettingsClir, - aNewValue ); - } - } - - // ALS - not forwarded if not supported - else if ( aId == KSettingsAlsLine ) - { - // Inform change only if Als line notify request is on. - if ( iNotifyKeys & ESSSettingsKeyAlsLine ) - { - TBool ppSupported(EFalse); - TBool simSupported(EFalse); - TBool cspSupported(EFalse); - TInt cspError(KErrNone); - iAls->GetAlsSupport( ppSupported, - simSupported, - cspSupported, - cspError ); - __SSSLOGSTRING1("[SSS] ppSupported: %d", ppSupported); - __SSSLOGSTRING1("[SSS] simSupported: %d", simSupported); - __SSSLOGSTRING1("[SSS] cspSupported: %d", cspSupported); - __SSSLOGSTRING1("[SSS] cspError: %d", cspError); - if ( AlsSupport( ppSupported, cspSupported, cspError ) ) - { - __SSSLOGSTRING1("[SSS] ->InformChange aNewValue:%d", aNewValue); - iSettings.InformChange( - ESSSettingsAls, - aNewValue ); - } - else - { - __SSSLOGSTRING("[SSS] ->InformChange AlsNotSupported "); - iSettings.InformChange( - ESSSettingsAls, - ESSSettingsAlsNotSupported ); - } - } - } - // Other - else - { - __ASSERT_DEBUG( EFalse, User::Invariant() ); - } - __SSSLOGSTRING("[SSS] <--CSSSettingsNotifier::HandleNotifyInt"); - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::AlsSupport -// ----------------------------------------------------------------------------- -// -TBool CSSSettingsNotifier::AlsSupport( TBool aPPSupport, TBool aCSPSupport, - TInt aCSPError ) - { - TBool send(EFalse); - // If aCSPSupport is false and CSP doesnt return error then it is not - // needed to send notification to clients. - if ( aPPSupport || ( aCSPSupport && aCSPError == KErrNone ) ) - { - send = ETrue; - } - - return send; - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::HandleNotifyError -// ----------------------------------------------------------------------------- -// -void CSSSettingsNotifier::HandleNotifyError( TUint32 /*aId*/, TInt /*aError*/, - CCenRepNotifyHandler* /*aHandler*/ ) - { - // Here you could call the below, if you are sure that it do not cause - // eternal loop - // TRAPD( error, aHandler->StartListeningL() ); - } - - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::GetAlsHandler -// ----------------------------------------------------------------------------- -// -CSSSettingsAlsNotifier* CSSSettingsNotifier::GetAlsHandler() - { - __SSSLOGSTRING("[SSS]--> CSSSettingsNotifier::GetAlsHandler"); - TBool ppSupported(EFalse); - TBool simSupported(EFalse); - TBool cspSupported(EFalse); - TInt cspError(KErrNone); - iAls->GetAlsSupport( ppSupported, simSupported, cspSupported, cspError ); - __SSSLOGSTRING1("[SSS] CSSSettingsNotifier::GetAlsHandler: ppSupported: %d", ppSupported ); - __SSSLOGSTRING1("[SSS] CSSSettingsNotifier::GetAlsHandler: simSupported: %d", simSupported ); - __SSSLOGSTRING1("[SSS] CSSSettingsNotifier::GetAlsHandler: cspSupported: %d", cspSupported ); - if ( ppSupported || simSupported || cspSupported ) - { - __SSSLOGSTRING("[SSS] <--CSSSettingsNotifier::GetAlsHandler: ALS supported"); - return iAls; // returned only if supported - } - - __SSSLOGSTRING("[SSS] <--CSSSettingsNotifier::GetAlsHandler: NULL returned"); - return NULL; - } - -// ----------------------------------------------------------------------------- -// CSSSettingsNotifier::HandleRefresh -// ----------------------------------------------------------------------------- -// -TInt CSSSettingsNotifier::HandleRefresh() - { - return iAls->HandleRefresh(); - } - -// End of File