diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/syslangutil/ssmlangselcmd/inc/ssmlangselcmd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/syslangutil/ssmlangselcmd/inc/ssmlangselcmd.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,204 @@ +/* + * 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: + * Declaration of CSsmLangSelCmd class. + * + */ + +#ifndef SSMLANGSELCMD_H +#define SSMLANGSELCMD_H + +#include +#include +#include + +class CSsmMapperUtility; + +/** + * Each command is implemented in a class derived from MSsmCustomCommand. + * It is also possible to implement multiple similar command in the same + * class and differentiate between them based on constructor parameters + * from the factory method. + */ +NONSHARABLE_CLASS( CSsmLangSelCmd ) : public CActive, public MSsmCustomCommand + { + +public: + + /** + * Two-phased constructor + */ + static CSsmLangSelCmd* NewL(); + + /** + * Destructor + */ + virtual ~CSsmLangSelCmd(); + +private: // From CActive + + void RunL(); + void DoCancel(); + +private: // From MSsmCustomCommand + + /** + * @see MSsmCustomCommand + */ + TInt Initialize( CSsmCustomCommandEnv* aCmdEnv ); + + /** + * @see MSsmCustomCommand + */ + void Execute( const TDesC8& aParams, TRequestStatus& aRequest ); + + /** + * @see MSsmCustomCommand + */ + void ExecuteCancel(); + + /** + * @see MSsmCustomCommand + */ + void Close(); + + /** + * @see MSsmCustomCommand + */ + void Release(); + +private: + + CSsmLangSelCmd(); + + void ConstructL(); + + void InitializeL(); + + /** + * Read language code selected by user from Central Repository and return it. + * Return 0 (automatic) in case of an error. + */ + TInt GetLastSelectedLang(); + + /** + * Check if the language code given as parameter can be found in the + * iValidLanguages array. + * + * @param aLanguage The language code to check. + * @return ETrue if the language code was found in the list, EFalse otherwise. + */ + TBool IsValid(const TInt aLanguage) const; + + /** + * Prepare next preferred language list for fetching. + */ + void PrepareNextList(); + + /** + * Fetch the prepared language list. + */ + void FetchLanguageListL(); + + /** + * Handle language list received from StartupAdaptation. + * + * @return Language code that was selected or KErrNotFound. + */ + TInt InterpretResult(); + + /** + * Check all alternatives for the language given as parameter, and return + * first language id that is valid. + * + * @param aLanguage The language code to check. + * @return The language code given as parameter if it is a valid language. + * Otherwise the first valid alternative found, or KErrNotFound if there are + * none. + */ + TInt ValidAlternative(const TInt aLanguage) const; + + /** + * Fetch next preferred list if there are any left. Otherwise check if + * the last selected language can be used. If not, use the default + * language. + */ + void TryNextList(); + + /** + * Store a language code to Central Repository. + * @param aLanguage The language code to store. + */ + void StoreLanguageToCentRep(const TInt aLanguage); + + /** + * Get a language code from Central Repository. + * + * @return Language code from CentRep or iDefaultLanguage in case of failure. + */ + TInt GetLanguageFromCentRep(); + + /** + * Take the language into use and signal client that language selection is + * complete. + * + * @param aLang The language to use or a system-wide error code. + */ + void UseLanguage(const TInt aLang); + +private: // data + + /** Custom command environment. Not owned. Set in Initialise. */ + CSsmCustomCommandEnv* iEnv; + + /** + * Array of valid languages (languages that can be used). Own. Not NULL. + */ + CArrayFixFlat* iValidLanguages; + + /** Adaptation controller for querying SIM preferred language list. */ + RSsmMiscAdaptation iAdaptation; + + /** Request status to complete when language selection is ready. */ + TRequestStatus* iClientStatus; + + /** + * The language to use if any of the SIM languages or the last used + * language is not valid. + */ + TInt iDefaultLanguage; + + /** Which language list has been queried last: 0 = the most preferred. */ + TInt iLangListPref; + + /** Will receive the required language list size. */ + TPckgBuf iLangListSize; + + /** Will receive the language list contents. */ + CArrayFix* iLangList; + + /** Internal state of the object. */ + enum TState + { + EQueryListSize = 1, + EQueryListContent + }; + TState iState; + + // The mapper utility instance, owned. + CSsmMapperUtility* iMapperUtility; + + }; + +#endif // SSMLANGSELCMD_H