radioengine/settings/src/cradioenginesettings.cpp
branchRCL_3
changeset 19 cce62ebc198e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioengine/settings/src/cradioenginesettings.cpp	Tue Aug 31 15:15:02 2010 +0300
@@ -0,0 +1,769 @@
+/*
+* 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 <barsread.h>
+#include <coemain.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+#include <fmradioenginesettings.rsg>
+#include <centralrepository.h>
+
+// 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 <RadioStubManager.h>
+#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<TInt>( 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<TRadioRegion>( 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<TRadioRegion>( temp );
+
+    temp = iDefaultRegion;
+    GetRepositoryValue( KRadioCRCurrentRegion, temp, temp );
+    iRegionId = static_cast<TRadioRegion>( temp );
+    UpdateCurrentRegionIdx( iRegionId );
+
+    temp = MinFrequency();
+    GetRepositoryValue( KRadioCRTunedFrequency, temp, temp );
+    iFrequency = static_cast<TUint32>( 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<TRadioRegion>( 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 );
+    }