--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/satengine/SatServer/SystemState/src/CSatSystemState.cpp Tue Feb 02 01:11:09 2010 +0200
@@ -0,0 +1,751 @@
+/*
+* Copyright (c) 2002-2008 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: Provides system state information to SAT Server
+*
+*/
+
+
+#include <mtclreg.h>
+#include <smsclnt.h>
+#include <smutset.h>
+#include <PSVariables.h> // Publish & Suscribe keys
+#include <centralrepository.h> // CRepository
+#include <CommonEngineDomainCRKeys.h>
+#include <ProfileEngineSDKCRKeys.h>
+#include <settingsinternalcrkeys.h>
+#include <SATDomainPSKeys.h>
+#include <activeidle2domainpskeys.h>
+#include <ScreensaverInternalPSKeys.h>
+#include <ctsydomainpskeys.h>
+#include <sbdefs.h>
+#include <BTSapDomainPSKeys.h>
+#include <SATDomainPSKeys.h>
+
+#include "SATInternalPSKeys.h"
+#include "CSatSystemState.h"
+#include "msatmultimodeapi.h"
+#include "SatLog.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSatSystemState::CSatSystemState( MSatMultiModeApi& aPhone ) : iPhone( aPhone )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::CSatSystemState calling-exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSatSystemState::ConstructL( MSatMultiModeApi& aPhone )
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::ConstructL calling" )
+
+ // Define policies
+ TSecurityPolicy readPolicy( ECapabilityReadUserData );
+ TSecurityPolicy writePolicy( ECapabilityWriteUserData );
+
+ TInt err( KErrNone );
+ // Define properties in P&S for SetUpIdleModeTex command
+ err = RProperty::Define( KPSUidSatServerInternal,
+ KSatIdleModeText,
+ RProperty::ELargeText,
+ readPolicy,
+ writePolicy );
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ConstructL \
+ Define KSatIdleModeText err: %i", err )
+
+ err = RProperty::Define( KPSUidSatServerInternal,
+ KSatIdleModeTextIconId,
+ RProperty::EInt,
+ readPolicy,
+ writePolicy );
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ConstructL \
+ Define KSatIdleModeTextIconId err: %i", err )
+
+ err = RProperty::Define( KPSUidSatServerInternal,
+ KSatIdleModeTextIconQualifier,
+ RProperty::EInt,
+ readPolicy,
+ writePolicy );
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ConstructL \
+ Define KSatIdleModeTextIconQualifier err: %i", err )
+
+ // Set default (empty) values
+ WriteSetIdleModeText( KNullDesC, KErrNotFound, RSat::ENoIconId );
+
+ err = RProperty::Define( KPSUidSatServer,
+ KSatLanguageSelectionTimeBeforeReboot,
+ RProperty::EInt,
+ readPolicy,
+ writePolicy );
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ConstructL \
+ Define KSatLanguageSelectionTimeBeforeReboot err: %i", err )
+
+ // Create Network Registration Status Monitor.
+ iNetworkRegStatusMonitor = CSatNetworkRegStatusMonitor::NewL( aPhone );
+
+ // Start Network Registration Status Monitor.
+ iNetworkRegStatusMonitor->Start();
+
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::ConstructL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+MSatSystemState* CSatSystemState::NewL( MSatMultiModeApi& aPhone )
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::NewL calling" )
+
+ CSatSystemState* self = new( ELeave ) CSatSystemState( aPhone );
+ CleanupStack::PushL( self );
+ self->ConstructL( aPhone );
+ CleanupStack::Pop( self );
+
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::NewL exiting" )
+ return self;
+ }
+
+
+// Destructor
+CSatSystemState::~CSatSystemState()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::~CSatSystemState calling" )
+
+ delete iNetworkRegStatusMonitor;
+ iNetworkRegStatusMonitor = NULL;
+
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::~CSatSystemState exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// Returns network registration status.
+// -----------------------------------------------------------------------------
+//
+RMobilePhone::TMobilePhoneRegistrationStatus
+ CSatSystemState::GetNetworkRegistrationStatus()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::\
+ GetNetworkRegistrationStatus calling-exiting" )
+ return iNetworkRegStatusMonitor->CurrentValue();
+ }
+
+// -----------------------------------------------------------------------------
+// Checks current call status and returns true only if cuurent call status is
+// voice call active.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsCallActive()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsCallActive calling" )
+ TInt callActiveState = EPSCTsyCallTypeNone;
+
+ // Get current call status from P&S
+ const TInt errCode( RProperty::Get(
+ KPSUidCtsyCallInformation,
+ KCTsyCallType,
+ callActiveState ) );
+
+ // Check current call type
+ TBool result(
+ ( EPSCTsyCallTypeCSVoice == callActiveState ) &&
+ ( KErrNone == errCode ) );
+
+ LOG2(
+ SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsCallActive exiting with value: %d",
+ result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// Checks current call state and returns true if phone is alerting or ringing.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsCallIncoming()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsCallIncoming calling" )
+
+ // Using MSatMultiModeApi::IsCallIncoming to check call status instead of
+ // checking P&S key so that we can get the status on time
+ TBool result( iPhone.IsCallIncoming() );
+
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsCallIncoming exiting \
+ with value: %d", result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// Gets the SMS Service center number and returns it.
+// -----------------------------------------------------------------------------
+//
+const TDesC& CSatSystemState::SCANumber()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::SCANumber calling" )
+
+ // Null possible previous SCA number
+ iScaAddress = KNullDesC;
+ TBuf<KMaxSCANumberSize> address;
+
+ TRAPD( err, ReadCurrentSMSCL( address ) );
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::SCANumber err: %d", err )
+ // If any error occurs, return null string.
+ if ( KErrNone != err )
+ {
+ address = KNullDesC;
+ }
+
+ iScaAddress = address;
+
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::SCANumber exiting" )
+ return iScaAddress;
+ }
+
+// -----------------------------------------------------------------------------
+// Method is used when the information of phones silent mode is needed.
+// Returns true if silent mode is on and false otherwise.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsSilentMode()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsSilentMode calling" )
+ TBool result( EFalse );
+ TInt silenceMode( -1 );
+ CRepository* centRep( NULL );
+
+ TRAPD( err, centRep = CRepository::NewL( KCRUidProfileEngine ) );
+ LOG2( SIMPLE, "SATSYSTEMSTATE:CSatSystemState::IsSilentMode\
+ CRepository::NewL result: %i", err )
+ if ( ( KErrNone == err ) && centRep )
+ {
+ // Get the needed information from CentRep
+ centRep->Get( KProEngActiveMessageAlert, silenceMode );
+
+ // Delete CentRep
+ delete centRep;
+
+ if ( 0 == silenceMode )
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE:CSatSystemState::IsSilentMode\
+ Silent mode" )
+ result = ETrue;
+ }
+ }
+
+ LOG2(
+ SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsSilentMode exiting with value: %d",
+ result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// Checks is phone in idle state.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsPhoneInIdleStateL()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsPhoneInIdleState calling" )
+ TInt idleStatus;
+
+ // Get the idle status from P&S
+ User::LeaveIfError( RProperty::Get(
+ KPSUidAiInformation,
+ KActiveIdleState,
+ idleStatus ) );
+
+ // Returns true if phone in idle state.
+ const TBool result( EPSAiForeground == idleStatus );
+
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsPhoneInIdleState exiting \
+ with value: %d", result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// Checks is screen saver actived from idle.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsScreenSaverActivedFromIdle()
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsScreenSaverActivedFromIdle calling" )
+ TBool result( EFalse );
+ TInt screenSaverActive( -1 );
+
+ // Get the idle status from P&S
+ TInt err = RProperty::Get( KPSUidScreenSaver,
+ KScreenSaverActivatedFromIdle, screenSaverActive );
+
+ if ( KErrNone == err )
+ {
+ // Returns true if screen saver is actived from idle.
+ if ( screenSaverActive )
+ {
+ result = ETrue;
+ }
+ }
+
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState:: IsScreenSaverActivedFromIdle \
+ err: %d", err )
+
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState:: \
+ IsScreenSaverActivedFromIdle exiting with value: %d", result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// Sets time between language selection and reboot.
+// -----------------------------------------------------------------------------
+//
+TInt CSatSystemState::WriteLanguageSelectionTime(
+ TInt aTime )
+ {
+ LOG2( NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::WriteLanguageSelectionTime calling, \
+ aTime: %d", aTime )
+ TInt errorCode( KErrNone );
+
+ // Set SetUpIdleModeText string
+ errorCode = RProperty::Set(
+ KPSUidSatServer,
+ KSatLanguageSelectionTimeBeforeReboot,
+ aTime );
+ LOG2( NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::WriteLanguageSelectionTime exiting, \
+ errorCode: %d", errorCode )
+ return errorCode;
+ }
+
+// -----------------------------------------------------------------------------
+// Writes idle mode text and icon ID to P&S.
+// -----------------------------------------------------------------------------
+//
+TInt CSatSystemState::WriteSetIdleModeText(
+ const TDesC& aString,
+ TInt aIconId,
+ RSat::TIconQualifier aIconQualifier )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::WriteSetIdleModeText calling" )
+ LOG2(
+ NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::WriteSetIdleModeText ID: %d",
+ aIconId )
+ TInt errorCode( KErrNone );
+
+ // Set SetUpIdleModeText string
+ errorCode = RProperty::Set(
+ KPSUidSatServerInternal,
+ KSatIdleModeText,
+ aString );
+ LOG2( NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::WriteSetIdleModeText errorCode: %d",
+ errorCode )
+ if ( KErrNone == errorCode )
+ {
+ // Set SetUpIdleModeText icon
+ errorCode = RProperty::Set(
+ KPSUidSatServerInternal,
+ KSatIdleModeTextIconId,
+ aIconId );
+ if ( KErrNone == errorCode )
+ {
+ // Select qualifier value for icon.
+ TSatIdleModeTextIconQualifierValue qualifier( KSatIdleIconQInit );
+ LOG2( NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::WriteSetIdleModeText \
+ aIconQualifier: %d", aIconQualifier )
+ switch ( aIconQualifier )
+ {
+ // Icon not present.
+ case RSat::ENoIconId:
+ {
+ qualifier = KSatIdleIconQNoIcon;
+ break;
+ }
+ // Icon is self explanatory. Displayed instead text string.
+ case RSat::ESelfExplanatory:
+ {
+ qualifier = KSatIdleIconQSelfExplanatory;
+ break;
+ }
+ // Icon is not self explanatory. Displayed with text string.
+ case RSat::ENotSelfExplanatory:
+ {
+ qualifier = KSatIdleIconQNotSelfExplanatory;
+ break;
+ }
+ // Icon qualifier is not set.
+ case RSat::EIconQualifierNotSet:
+ default:
+ {
+ qualifier = KSatIdleIconQInit;
+ break;
+ }
+ }
+
+ LOG2( NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::WriteSetIdleModeText \
+ IconQualifier: %d", qualifier )
+
+ // Set qualifier for icon.
+ errorCode = RProperty::Set(
+ KPSUidSatServerInternal,
+ KSatIdleModeTextIconQualifier,
+ qualifier );
+ }
+ }
+
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::WriteSetIdleModeText \
+ exiting with value: %d", errorCode )
+ return errorCode;
+ }
+
+// -----------------------------------------------------------------------------
+// Checks is backup process ongoing.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsBackupProcessOngoing()
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsBackupProcessOngoing calling" )
+ TInt backupState( conn::ENoBackup );
+
+ // Get the backup state from P&S
+ const TInt errCode( RProperty::Get(
+ KUidSystemCategory,
+ conn::KUidBackupRestoreKey,
+ backupState ) );
+
+ TBool result(
+ ( conn::ENoBackup != ( backupState & conn::KBackupIncTypeMask ) )
+ && ( KErrNone == errCode ) );
+
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsBackupProcessOngoing exiting \
+ with value: %d", result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSystemState::IsConfirmSatOperationsOn
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsConfirmSatOperationsOn()
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsConfirmSatOperationsOn calling" )
+ TBool result( EFalse );
+ TInt confirmSatOperations( 0 );
+ CRepository* centRep( NULL );
+
+ TRAPD( err, centRep = CRepository::NewL( KCRUidPersonalizationSettings ) );
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CentRep failed: %i", err )
+ if ( ( KErrNone == err ) && centRep )
+ {
+ // Get the needed information from CentRep
+ centRep->Get( KSettingsConfirmSatOperations, confirmSatOperations );
+
+ // Delete CentRep
+ delete centRep;
+
+ if ( 1 == confirmSatOperations )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsConfirmSatOperationsOn \
+ 1 == confirmSatOperations" )
+ result = ETrue;
+ }
+ }
+
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::IsConfirmSatOperationsOn \
+ exiting with value: %d", result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CSatSystemState::DisplayTextLanguage
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::DisplayTextLanguage()
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::DisplayTextLanguage calling" )
+ TInt selLanguage( 0 );
+ CRepository* centRep( NULL );
+
+ // Create instance to CentRep
+ TRAPD( err, centRep = CRepository::NewL( KCRUidCommonEngineKeys ) );
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CentRep failed: %i", err )
+ if ( ( KErrNone == err ) && centRep )
+ {
+ // Get the needed information from CentRep
+ centRep->Get( KGSDisplayTxtLang, selLanguage );
+
+ // Delete CentRep
+ delete centRep;
+ }
+
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::DisplayTextLanguage \
+ exiting with value: %d", selLanguage )
+ return selLanguage;
+ }
+
+// -----------------------------------------------------------------------------
+// Checks is BT SAP active
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsBtSapActive()
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsBtSapActive calling" )
+ TInt sapActive( EBTSapNotConnected );
+
+ // Get the backup state from P&S
+ const TInt errCode( RProperty::Get(
+ KPSUidBluetoothSapConnectionState,
+ KBTSapConnectionState,
+ sapActive ) );
+
+ LOG2(
+ SIMPLE,
+ "SATSYSTEMSTATE: RProperty::Get returned value: %i", errCode )
+
+ TBool result( ( ( EBTSapConnecting == sapActive ) ||
+ ( EBTSapConnected == sapActive ) ) &&
+ ( KErrNone == errCode ) );
+
+ LOG2(
+ SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::IsBtSapActive exiting with value: %i",
+ result )
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// Reads current SMS Center number.
+// -----------------------------------------------------------------------------
+//
+void CSatSystemState::ReadCurrentSMSCL( TDes& aAddress )
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL calling" )
+
+ aAddress = KNullDesC;
+ TInt status( KErrNone );
+
+ // Open message server connection.
+ CMsvSession* msvSession = CMsvSession::OpenSyncL( *this );
+ CleanupStack::PushL( msvSession );
+
+ CClientMtmRegistry* clientRegistry =
+ CClientMtmRegistry::NewL( *msvSession );
+
+ CleanupStack::PushL( clientRegistry );
+
+ // Get the account.
+ TInt serviceId( ServiceForMTML( *msvSession, KUidMsgTypeSMS ) );
+ if ( KMsvUnknownServiceIndexEntryId != serviceId )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ KMsvUnknownServiceIndexEntryId != serviceId" )
+ // Read the setting.
+ CSmsClientMtm* mtm =
+ static_cast<CSmsClientMtm*>( clientRegistry->NewMtmL( KUidMsgTypeSMS ) );
+ CleanupStack::PushL( mtm );
+ mtm->SwitchCurrentEntryL( serviceId );
+ mtm->LoadMessageL();
+ // Findout the number.
+ const CSmsSettings& settings = mtm->ServiceSettings();
+
+#ifndef __HIDE_MESSAGING_API_V1__
+ if ( settings.NumSCAddresses() != 0 )
+ {
+ if ( settings.DefaultSC() < settings.NumSCAddresses() )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ settings.DefaultSC() < settings.NumSCAddresses()" )
+ TPtrC addr = settings.SCAddress( settings.DefaultSC() ).Address();
+ aAddress = addr;
+ }
+ else
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ others" )
+ status = KErrOverflow;
+ }
+ }
+#else
+
+ if ( settings.ServiceCenterCount() != 0 )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ settings.ServiceCenterCount() != 0" )
+ if ( settings.DefaultServiceCenter() < settings.ServiceCenterCount() )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ settings.DefaultServiceCenter() < \
+ settings.ServiceCenterCount()" )
+ TPtrC addr = settings.GetServiceCenter(
+ settings.DefaultServiceCenter() ).Address();
+ aAddress = addr;
+ }
+ else
+ {
+ status = KErrOverflow;
+ }
+ }
+
+#endif
+ else
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ settings.ServiceCenterCount() == 0" )
+ status = KErrNotFound;
+ }
+
+ // Cleanup.
+ CleanupStack::PopAndDestroy( mtm );
+ }
+ else
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL \
+ KMsvUnknownServiceIndexEntryId == serviceId" )
+ status = KErrNotFound;
+ }
+
+ CleanupStack::PopAndDestroy( clientRegistry );
+ CleanupStack::PopAndDestroy( msvSession );
+
+ if ( KErrNone != status )
+ {
+ LOG2( NORMAL,
+ "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL leave: %d",
+ status )
+ User::Leave( status );
+ }
+
+ LOG( NORMAL, "SATSYSTEMSTATE: CSatSystemState::ReadCurrentSMSCL exiting" )
+ }
+
+// -----------------------------------------------------------------------------
+// Specifies an entry in the Message Server index.
+// -----------------------------------------------------------------------------
+//
+TMsvId CSatSystemState::ServiceForMTML(
+ CMsvSession& aSession,
+ const TUid& aMtm ) const
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: CSatSystemState::ServiceForMTML calling" )
+
+ CMsvEntry* entry = aSession.GetEntryL( KMsvRootIndexEntryIdValue );
+ CleanupStack::PushL( entry );
+ TMsvId serviceId = KMsvUnknownServiceIndexEntryId;
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ServiceForMTML count: %d",
+ entry->Count() )
+ // Check are there any entries
+ if ( entry->Count() != 0 )
+ {
+ entry->SetSortTypeL(
+ TMsvSelectionOrdering( KMsvGroupByType | KMsvGroupByStandardFolders,
+ EMsvSortByDetailsReverse,
+ ETrue ) );
+
+ const TMsvEntry* tentry;
+ for ( TInt cc( entry->Count() ); --cc >= 0; )
+ {
+ tentry = &( *entry )[cc];
+ if ( tentry->iMtm == aMtm )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ServiceForMTML \
+ tentry->iMtm == aMtm" )
+ if ( ( tentry->iType.iUid == KUidMsvServiceEntryValue ) &&
+ ( tentry->Id() != KMsvLocalServiceIndexEntryIdValue ) )
+ {
+ LOG( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ServiceForMTML \
+ exit loop" )
+ serviceId = tentry->Id();
+ cc = 0; // To exit for-loop. Replaces break.
+ }
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy( entry );
+
+ LOG2( SIMPLE,
+ "SATSYSTEMSTATE: CSatSystemState::ServiceForMTML exiting with value: %d",
+ serviceId )
+ return serviceId;
+ }
+
+// -----------------------------------------------------------------------------
+// Method is used when the information of phones warnings and game tone
+// mode is needed.
+// Returns true if silent mode is on and false otherwise.
+// -----------------------------------------------------------------------------
+//
+TBool CSatSystemState::IsWarningAndGameTonesOn()
+ {
+ LOG( SIMPLE, "SATSYSTEMSTATE: \
+ CSatSystemState::IsWarningAndGameTonesOn calling" )
+
+ TBool modeOn( ETrue );
+ CRepository* centRep( NULL );
+
+ TRAPD( err, centRep = CRepository::NewL( KCRUidProfileEngine ) );
+ LOG2( SIMPLE, "SATSYSTEMSTATE: CentRep failed: %i", err )
+ if ( ( KErrNone == err ) && centRep )
+ {
+ // Get the needed information from CentRep
+ centRep->Get( KProEngActiveWarningTones, modeOn );
+
+ // Delete CentRep
+ delete centRep;
+
+ }
+
+ LOG2(
+ SIMPLE,
+ "SATSYSTEMSTATE: \
+ CSatSystemState::IsWarningAndGameTonesOn exiting with value: %d",
+ modeOn )
+
+ return modeOn;
+ }