sysstatemgmt/ssmutilityplugins/ssmlocaleobserversup/src/ssmuilanguageobserversup.cpp
changeset 63 09d657f1ee00
parent 54 072a9626b290
child 65 8cf1a5cd9ade
child 69 dc67b94625c5
equal deleted inserted replaced
54:072a9626b290 63:09d657f1ee00
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Implementation of CSsmUiLanguageObserver class.
       
    15 *
       
    16 */
       
    17 #include "ssmuilanguageobserversup.h"
       
    18 #include "ssmlocalepskeys.h"
       
    19 #include "ssmmapperutilityinternalpskeys.h"
       
    20 #include "ssmcommonlocale.h"
       
    21 #include "trace.h"
       
    22 #include <centralrepository.h>
       
    23 #include <CommonEngineDomainCRKeys.h>
       
    24 
       
    25 // ---------------------------------------------------------------------------
       
    26 // CSsmUiLanguageObserver::NewL
       
    27 // ---------------------------------------------------------------------------
       
    28 //
       
    29 EXPORT_C MSsmUtility* CSsmUiLanguageObserver::NewL()
       
    30     {
       
    31     FUNC_LOG;
       
    32     CSsmUiLanguageObserver* self = new( ELeave ) CSsmUiLanguageObserver();
       
    33     return self;
       
    34     }
       
    35 
       
    36 // ---------------------------------------------------------------------------
       
    37 // CSsmUiLanguageObserver::InitializeL
       
    38 // ---------------------------------------------------------------------------
       
    39 //
       
    40 void CSsmUiLanguageObserver::InitializeL()
       
    41 	{
       
    42 
       
    43 	}
       
    44 
       
    45 // ---------------------------------------------------------------------------
       
    46 // CSsmUiLanguageObserver::StartL
       
    47 // ---------------------------------------------------------------------------
       
    48 //
       
    49 void CSsmUiLanguageObserver::StartL()
       
    50 	{
       
    51 	FUNC_LOG;
       
    52 	TInt errorCode = iUILanguageProperty.Attach( KPSStarterUid, KSSMUILanguagePSKey );
       
    53 	ERROR_2( errorCode, "Failed to attach to property 0x%08x::0x%08x", KPSStarterUid.iUid, KSSMUILanguagePSKey );
       
    54 	Activate();
       
    55 	}
       
    56 
       
    57 // ---------------------------------------------------------------------------
       
    58 // CSsmUiLanguageObserver::Release
       
    59 // ---------------------------------------------------------------------------
       
    60 //
       
    61 void CSsmUiLanguageObserver::Release()
       
    62 	{
       
    63 	FUNC_LOG;
       
    64 	delete this;
       
    65 	}
       
    66 
       
    67 // ---------------------------------------------------------------------------
       
    68 // CSsmUiLanguageObserver::~CSsmUiLanguageObserver
       
    69 // ---------------------------------------------------------------------------
       
    70 //
       
    71 CSsmUiLanguageObserver::~CSsmUiLanguageObserver()
       
    72     {
       
    73     FUNC_LOG;
       
    74     Cancel();
       
    75     iUILanguageProperty.Close();
       
    76     }
       
    77 
       
    78 // ---------------------------------------------------------------------------
       
    79 // CSsmUiLanguageObserver::DoCancel
       
    80 // ---------------------------------------------------------------------------
       
    81 //
       
    82 void CSsmUiLanguageObserver::DoCancel()
       
    83     {
       
    84     FUNC_LOG;
       
    85     iUILanguageProperty.Cancel();
       
    86     }
       
    87 
       
    88 // ---------------------------------------------------------------------------
       
    89 // CSsmUiLanguageObserver::RunL
       
    90 // ---------------------------------------------------------------------------
       
    91 //
       
    92 void CSsmUiLanguageObserver::RunL()
       
    93     {
       
    94     FUNC_LOG;
       
    95     const TInt errorCode = iStatus.Int();
       
    96     if (KErrNone == errorCode )
       
    97         {
       
    98         Activate();
       
    99         LoadUILanguage();
       
   100         }
       
   101     else
       
   102     	{
       
   103     	INFO_1("CSsmUiLanguageObserver::RunL()completed with: %d - not reactivating", iStatus.Int());
       
   104     	}
       
   105     }
       
   106 
       
   107 // ---------------------------------------------------------------------------
       
   108 // CSsmUiLanguageObserver::LoadUILanguage
       
   109 // ---------------------------------------------------------------------------
       
   110 //
       
   111 void CSsmUiLanguageObserver::LoadUILanguage()
       
   112     {
       
   113     FUNC_LOG;
       
   114     TInt uiLanguage(0);
       
   115     TInt errorCode = iUILanguageProperty.Get( uiLanguage );
       
   116 
       
   117     if( KErrNone != errorCode )
       
   118          {
       
   119          INFO_1( "Failed to get KSSMUILanguagePSKey value with error  %d", errorCode );
       
   120          return;
       
   121          }
       
   122 
       
   123     // Dot plus five digit locale
       
   124     TBuf<KMaxDllExtensionLength> extension; 
       
   125     extension.Format( KDllExtensionFormat, uiLanguage );
       
   126     
       
   127     // Padd ".1" to ".001" for compatibility.   
       
   128     for( ; extension.Length() < KMinDllExtensionLength ;) 
       
   129         {
       
   130         extension.Insert( KDllExtensionPaddingPosition,
       
   131                           KDllExtensionPadding );
       
   132         }
       
   133 
       
   134     TBuf<KMaxDllNameLength> uiLanguageDllName( KLanguageDllNameBase );
       
   135     uiLanguageDllName.Append( extension );
       
   136     INFO_1( "Loading UI Language DLL named '%S'", &uiLanguageDllName );
       
   137 
       
   138     TExtendedLocale extLocale;
       
   139     extLocale.LoadSystemSettings();
       
   140     errorCode = extLocale.LoadLocaleAspect( uiLanguageDllName );
       
   141     ERROR( errorCode, "Failed to load locale" );
       
   142 
       
   143     if ( errorCode == KErrNone )
       
   144         {
       
   145         errorCode = extLocale.SaveSystemSettings();
       
   146         ERROR( errorCode, "Failed to set locale" );
       
   147         TLocale().Set();
       
   148         StoreUILanguageToCentRep( uiLanguage );
       
   149         }
       
   150     }
       
   151 
       
   152 // ---------------------------------------------------------------------------
       
   153 // CSsmUiLanguageObserver::StoreUILanguageToCentRep
       
   154 // ---------------------------------------------------------------------------
       
   155 //
       
   156 void CSsmUiLanguageObserver::StoreUILanguageToCentRep( const TInt aUILanguage )
       
   157     {
       
   158     FUNC_LOG;
       
   159     CRepository* cenrep = NULL;
       
   160     TRAPD( errorCode, cenrep = CRepository::NewL( KCRUidCommonEngineKeys ) );
       
   161     ERROR_1( errorCode, "Failed to initialize cen rep %d", errorCode );
       
   162     
       
   163     if ( KErrNone == errorCode )
       
   164         {
       
   165         errorCode = cenrep->Set( KGSDisplayTxtLang, aUILanguage);
       
   166         ERROR_1( errorCode, "Failed to store UI Language code to CentRep, %d", 
       
   167                                                                   errorCode );
       
   168         delete cenrep;
       
   169         }
       
   170     }
       
   171 
       
   172 // ---------------------------------------------------------------------------
       
   173 // CSsmUiLanguageObserver::CSsmUiLanguageObserver
       
   174 // ---------------------------------------------------------------------------
       
   175 //
       
   176 CSsmUiLanguageObserver::CSsmUiLanguageObserver() : CActive( EPriorityStandard )
       
   177     {
       
   178     FUNC_LOG;
       
   179     CActiveScheduler::Add( this );
       
   180     }
       
   181 
       
   182 // ---------------------------------------------------------------------------
       
   183 // CSsmUiLanguageObserver::Activate
       
   184 // ---------------------------------------------------------------------------
       
   185 //
       
   186 void CSsmUiLanguageObserver::Activate()
       
   187     {
       
   188 	FUNC_LOG;
       
   189     ASSERT( !IsActive() );
       
   190     iUILanguageProperty.Subscribe( iStatus );
       
   191     SetActive();
       
   192     }