diff -r cce62ebc198e -r 93c594350b9a radioengine/settings/src/cradioenginesettings.cpp --- a/radioengine/settings/src/cradioenginesettings.cpp Tue Aug 31 15:15:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,769 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - -// System includes -#include -#include -#include -#include -#include -#include - -// User includes -#include "radiointernalcrkeys.h" -#include "radioenginedef.h" -#include "cradioenginesettings.h" -#include "cradiosettingsimp.h" -#include "mradiosettingsobserver.h" -#include "cradioenginelogger.h" - -// This has to be the last include. -#ifdef STUB_CONSTELLATION -# include -#endif //STUB_CONSTELLATION - - - /** - * On/Off type flags used by TBitFlags. - */ - enum TFlagValues - { - EHeadsetVolMuted = 1 << 0 - ,ESpeakerVolMuted = 1 << 1 - ,EPowerOn = 1 << 2 - ,EStereoOutput = 1 << 3 - ,EHeadsetAudioRoute = 1 << 4 - }; - -// ======== LOCAL FUNCTIONS ======== - - // --------------------------------------------------------------------------- - // Normalize return value from TBitFlags to 1 or 0 just in case - // Two negations: 16 => 0 => 1 - // --------------------------------------------------------------------------- - // -static TBool NormalizeBool( TBool aBool ) - { - // Normalize return value from TBitFlags to 1 or 0 just in case - // Two negations: 16 => 0 => 1 - return !( !aBool ); - } - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioEngineSettings* CRadioEngineSettings::NewL( CRadioSettingsImp& aRadioSettingsImp ) - { - LEVEL3( LOG_METHOD_AUTO ); - CRadioEngineSettings* self = new ( ELeave ) CRadioEngineSettings( aRadioSettingsImp ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -void CRadioEngineSettings::ConstructL() - { - LEVEL3( LOG_METHOD_AUTO ); - iRepository = CRepository::NewL( KRadioCRUid ); - - InitializeRegionsL(); - - InitializeDataHolders(); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioEngineSettings::CRadioEngineSettings( CRadioSettingsImp& aRadioSettingsImp ) - : iRadioSettingsImp( aRadioSettingsImp ) - { - LEVEL3( LOG_METHOD_AUTO ); - } - -// --------------------------------------------------------------------------- -// -// --------------------------------------------------------------------------- -// -CRadioEngineSettings::~CRadioEngineSettings() - { - LEVEL3( LOG_METHOD_AUTO ); - iRegions.ResetAndDestroy(); - iRegions.Close(); - iResFile.Close(); - delete iRepository; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// --------------------------------------------------------------------------- -// -void CRadioEngineSettings::SetObserver( MRadioSettingsObserver* aObserver ) - { - LEVEL3( LOG_METHOD_AUTO ); - iObserver = aObserver; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetHeadsetVolume( TInt aVolume ) - { - LEVEL3( LOG_METHOD_AUTO ); - TInt err = iRepository->Set( KRadioCRHeadsetVolume, aVolume ); - if ( !err ) - { - iHeadsetVolume = aVolume; - } - return err; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::HeadsetVolume() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iHeadsetVolume; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetSpeakerVolume( TInt aVolume ) - { - LEVEL3( LOG_METHOD_AUTO ); - TInt err = iRepository->Set( KRadioCRSpeakerVolume, aVolume ); - if ( !err ) - { - iSpeakerVolume = aVolume; - } - return err; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SpeakerVolume() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iSpeakerVolume; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetVolume( TInt aVolume ) - { - LEVEL3( LOG_METHOD_AUTO ); - if ( AudioRoute() == RadioEngine::ERadioHeadset ) - { - return SetHeadsetVolume( aVolume ); - } - else - { - return SetSpeakerVolume( aVolume ); - } - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::Volume() const - { - LEVEL3( LOG_METHOD_AUTO ); - if ( AudioRoute() == RadioEngine::ERadioHeadset ) - { - return HeadsetVolume(); - } - else - { - return SpeakerVolume(); - } - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetOutputMode( TInt aOutputMode ) - { - LEVEL3( LOG_METHOD_AUTO ); - TInt err = iRepository->Set( KRadioCROutputMode, aOutputMode ); - if ( !err ) - { - iFlags.Assign( EStereoOutput, aOutputMode == RadioEngine::ERadioStereo ); - } - return err; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::OutputMode() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iFlags.IsSet( EStereoOutput ) ? RadioEngine::ERadioStereo : RadioEngine::ERadioMono; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// Stores the radio audio route ( headset/ihf ) to use. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetAudioRoute( TInt aAudioRoute ) - { - LEVEL3( LOG_METHOD_AUTO ); - TInt err = iRepository->Set( KRadioCRAudioRoute, aAudioRoute ); - if ( !err ) - { - iFlags.Assign( EHeadsetAudioRoute, aAudioRoute == RadioEngine::ERadioHeadset ); - } - return err; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// Retrieves the radio audio route in use. -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::AudioRoute() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iFlags.IsSet( EHeadsetAudioRoute ) ? RadioEngine::ERadioHeadset : RadioEngine::ERadioSpeaker; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetHeadsetVolMuted( TBool aMuted ) - { - LEVEL3( LOG_METHOD_AUTO ); - return SetFlagValue( KRadioCRHeadsetMuteState, EHeadsetVolMuted, aMuted ); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TBool CRadioEngineSettings::IsHeadsetVolMuted() const - { - LEVEL3( LOG_METHOD_AUTO ); - return NormalizeBool( iFlags.IsSet( EHeadsetVolMuted ) ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetSpeakerVolMuted( TBool aMuted ) - { - LEVEL3( LOG_METHOD_AUTO ); - return SetFlagValue( KRadioCRSpeakerMuteState, ESpeakerVolMuted, aMuted ); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TBool CRadioEngineSettings::IsSpeakerVolMuted() const - { - LEVEL3( LOG_METHOD_AUTO ); - return NormalizeBool( iFlags.IsSet( ESpeakerVolMuted ) ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetVolMuted( TBool aMuted ) - { - LEVEL3( LOG_METHOD_AUTO ); - if ( AudioRoute() == RadioEngine::ERadioHeadset ) - { - return SetHeadsetVolMuted( aMuted ); - } - else - { - return SetSpeakerVolMuted( aMuted ); - } - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TBool CRadioEngineSettings::IsVolMuted() const - { - LEVEL3( LOG_METHOD_AUTO ); - if ( AudioRoute() == RadioEngine::ERadioHeadset ) - { - return IsHeadsetVolMuted(); - } - else - { - return IsSpeakerVolMuted(); - } - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetPowerOn( TBool aPowerState ) - { - LEVEL3( LOG_METHOD_AUTO ); - return SetFlagValue( KRadioCRRadioPowerState, EPowerOn, aPowerState ); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TBool CRadioEngineSettings::IsPowerOn() const - { - LEVEL3( LOG_METHOD_AUTO ); - return NormalizeBool( iFlags.IsSet( EPowerOn ) ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetTunedFrequency( TUint32 aFrequency ) - { - LEVEL3( LOG_METHOD_AUTO ); - TInt err = iRepository->Set( KRadioCRTunedFrequency, static_cast( aFrequency ) ); - if ( !err ) - { - iFrequency = aFrequency; - } - return err; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TUint32 CRadioEngineSettings::TunedFrequency() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iFrequency; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::DefaultMinVolumeLevel() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iDefaultMinVolume; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::CountRegions() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iRegions.Count(); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -CRadioRegion& CRadioEngineSettings::Region( TInt aIndex ) const - { - LEVEL3( LOG_METHOD_AUTO ); - if ( aIndex == KErrNotFound ) - { - aIndex = RegionIndexForId( DefaultRegion() ); - } - - return *iRegions[aIndex]; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TRadioRegion CRadioEngineSettings::RegionId() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iRegionId; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TRadioRegion CRadioEngineSettings::DefaultRegion() const - { - LEVEL3( LOG_METHOD_AUTO ); - return iDefaultRegion; - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TPtrC CRadioEngineSettings::NetworkId() const - { - LEVEL3( LOG_METHOD_AUTO ); - return TPtrC( iNetworkId ); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TPtrC CRadioEngineSettings::CountryCode() const - { - LEVEL3( LOG_METHOD_AUTO ); - return TPtrC( iCountryCode ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetRegionId( TInt aRegion ) - { - LEVEL3( LOG_METHOD_AUTO ); - __ASSERT_ALWAYS( RegionIndexForId( aRegion ) != KErrNotFound, - User::Panic( _L( "CRadioEngineSettings" ), KErrArgument ) ); - - TInt err = iRepository->Set( KRadioCRCurrentRegion, aRegion ); - if ( !err ) - { - iRegionId = static_cast( aRegion ); - UpdateCurrentRegionIdx( aRegion ); - err = SetTunedFrequency( Region( iCurrentRegionIdx ).MinFrequency() ); - } - return err; - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetNetworkId( const TDesC& aNetworkId ) - { - LEVEL3( LOG_METHOD_AUTO ); - iNetworkId.Copy( aNetworkId.Left( iNetworkId.MaxLength() ) ); - return iRepository->Set( KRadioCRNetworkId, iNetworkId ); - } - -// --------------------------------------------------------------------------- -// From class MRadioSettingsSetter. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetCountryCode( const TDesC& aCountryCode ) - { - LEVEL3( LOG_METHOD_AUTO ); - iCountryCode.Copy( aCountryCode.Left( iCountryCode.MaxLength() ) ); - return iRepository->Set( KRadioCRCountryCode, iCountryCode ); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TUint32 CRadioEngineSettings::FrequencyStepSize() const - { - LEVEL3( LOG_METHOD_AUTO ); - return Region( iCurrentRegionIdx ).StepSize(); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TUint32 CRadioEngineSettings::MaxFrequency() const - { - LEVEL3( LOG_METHOD_AUTO ); - return Region( iCurrentRegionIdx ).MaxFrequency(); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TUint32 CRadioEngineSettings::MinFrequency() const - { - LEVEL3( LOG_METHOD_AUTO ); - return Region( iCurrentRegionIdx ).MinFrequency(); - } - -// --------------------------------------------------------------------------- -// From class MRadioEngineSettings. -// -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::DecimalCount() const - { - LEVEL3( LOG_METHOD_AUTO ); - return Region( iCurrentRegionIdx ).DecimalCount(); - } - -// --------------------------------------------------------------------------- -// Initializes the data holders -// --------------------------------------------------------------------------- -// -void CRadioEngineSettings::InitializeDataHolders() - { - TInt temp = 0; - GetRepositoryValue( KRadioCRHeadsetMuteState, temp, EFalse ); - iFlags.Assign( EHeadsetVolMuted, temp ); - - temp = RadioEngine::ERadioHeadsetDefaultVolume; - GetRepositoryValue( KRadioCRHeadsetVolume, temp, temp ); - iHeadsetVolume = temp; - - temp = 0; - GetRepositoryValue( KRadioCRSpeakerMuteState, temp, EFalse ); - iFlags.Assign( ESpeakerVolMuted, temp ); - - temp = RadioEngine::ERadioSpeakerDefaultVolume; - GetRepositoryValue( KRadioCRSpeakerVolume, temp, temp ); - iSpeakerVolume = temp; - - temp = 0; - GetRepositoryValue( KRadioCRRadioPowerState, temp, EFalse ); - iFlags.Assign( EPowerOn, temp ); - - temp = RadioEngine::ERadioStereo; - if ( GetRepositoryValue( KRadioCROutputMode, temp, temp ) ) - { - iFlags.Assign( EStereoOutput, temp == RadioEngine::ERadioStereo ); - } - - temp = RadioEngine::ERadioHeadset; - if ( GetRepositoryValue( KRadioCRAudioRoute, temp, temp ) ) - { - iFlags.Assign( EHeadsetAudioRoute, temp == RadioEngine::ERadioHeadset ); - } - - temp = RadioEngine::ERadioDefaultMinVolume; - GetRepositoryValue( KRadioCRDefaultMinVolumeLevel, temp, temp ); - iDefaultMinVolume = temp; - - temp = ERadioRegionDefault; - GetRepositoryValue( KRadioCRDefaultRegion, temp, temp ); - iDefaultRegion = static_cast( temp ); - - temp = iDefaultRegion; - GetRepositoryValue( KRadioCRCurrentRegion, temp, temp ); - iRegionId = static_cast( temp ); - UpdateCurrentRegionIdx( iRegionId ); - - temp = MinFrequency(); - GetRepositoryValue( KRadioCRTunedFrequency, temp, temp ); - iFrequency = static_cast( temp ); - } - -// --------------------------------------------------------------------------- -// Gets a repository value and sets the default value if the key is not found -// --------------------------------------------------------------------------- -// -TBool CRadioEngineSettings::GetRepositoryValue( int aKey, TInt& aValue, TInt aDefault ) - { - TInt temp = 0; - TInt err = iRepository->Get( aKey, temp ); - if ( !err ) - { - aValue = temp; - return ETrue; - } - else if ( err == KErrNotFound ) - { - if ( iRepository->Set( aKey, aDefault ) == KErrNone ) - { - aValue = aDefault; - return ETrue; - } - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// Sets a boolean value to cenrep and data holder -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::SetFlagValue( int aKey, int aFlagId, TInt aValue ) - { - TInt err = iRepository->Set( aKey, aValue ); - if ( !err ) - { - iFlags.Assign( aFlagId, aValue ); - } - return err; - } - -// --------------------------------------------------------------------------- -// Initializes the regions based on resources. -// --------------------------------------------------------------------------- -// -void CRadioEngineSettings::InitializeRegionsL() - { - LEVEL3( LOG_METHOD_AUTO ); - iRegions.ResetAndDestroy(); - - TResourceReader reader; - - TFileName resourceFileName; - resourceFileName.Append( KRadioSettingsResourceFile ); - - //User::LeaveIfError( iRadioSettingsImp.FsSession().Connect() ); - - //TODO: Remove the ResolveDriveL - iRadioSettingsImp.ResolveDriveL( resourceFileName, KDC_RESOURCE_FILES_DIR ); - BaflUtils::NearestLanguageFile( iRadioSettingsImp.FsSession(), resourceFileName); - - iResFile.OpenL( iRadioSettingsImp.FsSession(), resourceFileName); - - iResFile.ConfirmSignatureL(); - HBufC8* readBuffer = iResFile.AllocReadLC(R_QRAD_REGIONS); - reader.SetBuffer(readBuffer); - TInt regionCount = reader.ReadInt16(); - - for ( TInt i = 0; i < regionCount; ++i ) - { - TInt resId = reader.ReadInt32(); // The next resource ID to read. - HBufC8* regionBuffer = iResFile.AllocReadLC(resId); - TResourceReader regionReader; - regionReader.SetBuffer(regionBuffer); - - CRadioRegion* region = CRadioRegion::NewL( regionReader ); - CleanupStack::PushL( region ); - - if ( IsRegionAllowed( region->Id() )) - { - User::LeaveIfError( iRegions.Append( region ) ); - CleanupStack::Pop( region ); - } - else{ - CleanupStack::PopAndDestroy( region ); - } - CleanupStack::PopAndDestroy(regionBuffer); - } - - if ( CountRegions() <= 0 || !IsRegionAllowed( DefaultRegion() ) ) - { - User::Leave( KErrCorrupt ); - } - - UpdateCurrentRegionIdx( RegionId() ); - CleanupStack::PopAndDestroy(readBuffer); - } - -// --------------------------------------------------------------------------- -// Converts Region ID to index -// --------------------------------------------------------------------------- -// -TInt CRadioEngineSettings::RegionIndexForId( TInt aRegionId ) const - { - LEVEL3( LOG_METHOD_AUTO ); - TInt idx = KErrNotFound; - for ( TInt i = 0 ; i < CountRegions(); ++i ) - { - if ( Region( i ).Id() == static_cast( aRegionId ) ) - { - idx = i; - break; - } - } - return idx; - } - -// --------------------------------------------------------------------------- -// Updates the current region -// --------------------------------------------------------------------------- -// -void CRadioEngineSettings::UpdateCurrentRegionIdx( TInt aRegionId ) - { - LEVEL3( LOG_METHOD_AUTO ); - iCurrentRegionIdx = RegionIndexForId( aRegionId ); - } - -// --------------------------------------------------------------------------- -// Determines if region is allowed . -// --------------------------------------------------------------------------- -// -TBool CRadioEngineSettings::IsRegionAllowed( TRadioRegion aRegionId ) const - { - LEVEL3( LOG_METHOD_AUTO ); - - TInt regionAllowed( ETrue ); - if ( ERadioRegionJapan == aRegionId ) - { - TInt err = iRepository->Get( KRadioCRRegionAllowedJapan, regionAllowed ); - if ( err != KErrNone ) - { - // In case the key is not found or otherwise unsuccessfully read, - // Japan region is allowed by default. - regionAllowed = ETrue; - } - } - - return TBool( regionAllowed ); - }