# HG changeset patch # User Pat Downey # Date 1283340629 -3600 # Node ID cd54903d48da1463ad31730427ba6a645631a32d # Parent b7fa36b488f8bcfa6b0130f017ddb8e546af7a80 Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035 diff -r b7fa36b488f8 -r cd54903d48da group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,29 @@ +/* +* Copyright (c) 2006 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: This file provides the information required for building Profile. +* +*/ + +// Application layer +// profile ADO + +//Components: + +//profile +#include "../profilesapplication/group/bld.inf" + +//profile_plat +#include "../profile_plat/group/bld.inf" + +#include "../help/group/bld.inf" diff -r b7fa36b488f8 -r cd54903d48da help/data/xhtml.zip Binary file help/data/xhtml.zip has changed diff -r b7fa36b488f8 -r cd54903d48da help/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/help/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,26 @@ +/* +* 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: +* Export help related files. +* +*/ + +#include +PRJ_EXPORTS +:zip ../data/xhtml.zip /epoc32/data/z/resource/ overwrite +:zip ../data/xhtml.zip /epoc32/winscw/c/resource/ overwrite + +../inc/mode.hlp.hrh MW_LAYER_PLATFORM_EXPORT_PATH(csxhelp/mode.hlp.hrh) +../rom/profilesapplicationhelps_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(profilesapplicationhelps_variant.iby) diff -r b7fa36b488f8 -r cd54903d48da help/inc/mode.hlp.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/help/inc/mode.hlp.hrh Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,29 @@ +/* +* 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: +* +*/ + +// +// mode.hlp.hrh generated by CSXHelp Utilities. +// + +#ifndef __MODE_HLP_HRH__ +#define __MODE_HLP_HRH__ + +_LIT(KMODE_HLP_PERSONALISE, "MODE_HLP_PERSONALISE"); // +_LIT(KSET_HLP_PERSONAL_TONES, "SET_HLP_PERSONAL_TONES"); // +_LIT(KMODE_HLP_PROFILES_LIST, "MODE_HLP_PROFILES_LIST"); // + +#endif \ No newline at end of file diff -r b7fa36b488f8 -r cd54903d48da help/rom/profilesapplicationhelps_variant.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/help/rom/profilesapplicationhelps_variant.iby Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,27 @@ +/* +* 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: +* +*/ +#ifndef __PROFILESAPPLICATIONHELPS_VARIANT_IBY__ +#define __PROFILESAPPLICATIONHELPS_VARIANT_IBY__ + +#if defined(FF_S60_HELPS_IN_USE) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058F8\contents.zip, RESOURCE_FILES_DIR\xhtml\%02d\0x100058F8\contents.zip) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058F8\index.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x100058F8\index.xml) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058F8\keywords.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x100058F8\keywords.xml) + data=LOCALISE(DATAZ_\resource\xhtml\%02d\0x100058F8\meta.xml, RESOURCE_FILES_DIR\xhtml\%02d\0x100058F8\meta.xml) +#endif + +#endif \ No newline at end of file diff -r b7fa36b488f8 -r cd54903d48da layers.sysdef.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/layers.sysdef.xml Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,21 @@ + + + +]> + + + + + + + + + + + + + + + + diff -r b7fa36b488f8 -r cd54903d48da profile_plat/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profile_plat/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,20 @@ +/* +* Copyright (c) 2006 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: Includes all the Domain API specific bld.inf files, which +* export files. +* +*/ + + +#include "../profiles_settings_view_api/group/bld.inf" diff -r b7fa36b488f8 -r cd54903d48da profile_plat/profiles_settings_view_api/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profile_plat/profiles_settings_view_api/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2006 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: File that exports the files belonging to +: Profiles Settings View API +* +*/ + +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS + +../inc/CProfileToneHandler.h APP_LAYER_PLATFORM_EXPORT_PATH(cprofiletonehandler.h) diff -r b7fa36b488f8 -r cd54903d48da profile_plat/profiles_settings_view_api/inc/CProfileToneHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profile_plat/profiles_settings_view_api/inc/CProfileToneHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,413 @@ +/* +* Copyright (c) 2002-2006 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: A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query if necessary. +* +*/ + + + +#ifndef CPROFILETONEHANDLER_H +#define CPROFILETONEHANDLER_H + +// INCLUDES +#include // CBase, RFs +#include // MSSSettingsObserver, RSSSettings +#include // KMaxDataTypeLength +#include + +// DATA TYPES + +/** +* Enumerations for different tone settings in Profiles. +* Should there become a need e.g. for separately place line 1 and line 2 +* ringing tones, we just add them to these enumerations. +*/ +enum TProfileTones + { + EProfileRingingToneSetting = 1, + EProfileVideoCallToneSetting = 2, + EProfileMessageAlertToneSetting = 3, + EProfileInstantMessageAlertToneSetting = 4, + EProfileEmailAlertToneSetting = 5 + }; + +// FORWARD DECLARATIONS +class DRMCommon; +class CDRMHelper; +class MProfileExtended; +class MProfileEngineExtended; +class MProfilesLocalFeatures; + +// CLASS DECLARATION + +/** +* A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query and other DRM related +* notes if necessary. + +* +* @lib ProfileSettingsView.lib +* @since Series 60 2.6 +*/ +class CProfileToneHandler : public CBase, public MSSSettingsObserver + { + public: // Constructors and destructor + + // Two-phased constructors. + IMPORT_C static CProfileToneHandler* NewL(); + IMPORT_C static CProfileToneHandler* NewLC(); + + // Destructor. + ~CProfileToneHandler(); + + public: // New functions + + /** + * Sets the ringing tone of the current active profile. + * If the file does not exist, leaves with KErrNotFound. + * If the file is of an unsupported type, leaves with KErrNotSupported. + * If the file is an unprotected MP3/AAC in user data area + * and if those are not allowed as ringing or alert tones, + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the active profile is not allowed to be changed + * (e.g. Drive-profile) leaves with KErrAccessDenied. + * If Alternate Line Service is enabled, finds out the line in use + * and sets the ringing tone for that line respectively. + * @since 2.6 + * @param aFileName Full path and filename of the tone to be used + * as the new ringing tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return KErrNone if successful, + * KErrCancel if user answers No to a DRM activation query. + * (See DRMHelper::SetAutomatedPassive) + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + IMPORT_C TInt SetActiveProfileRingingToneL( const TDesC& aFileName ); + + /** + * Sets a ringing or alert tone for a profile. + * If the file does not exist, leaves with KErrNotFound. + * If the file is of an unsupported type, leaves with KErrNotSupported. + * If the file is an unprotected MP3/AAC in user data area + * and if those are not allowed as ringing or alert tones, + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the file is not allowed to be changed + * leaves with KErrAccessDenied. + * If the selected profile is not allowed to be changed + * (e.g. Drive-profile) leaves with KErrAccessDenied. + * In case of a ringing tone, if Alternate Line Service is enabled, + * finds out the line in use and sets the ringing tone for that + * line respectively. + * @since 2.6 + * @param aProfileId The ID of the profile (NOT an index). + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return Returns KErrNone if successful, + * KErrCancel if user answers No to a DRM activation query. + * (See DRMHelper::SetAutomatedPassive) + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + IMPORT_C TInt SetProfileToneL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Sets a ringing or alert tone for a profile and not check the file. + * This function only can be used when user set a ringing or alert tone + * for some profiles and avoid to repeat check the file. + * Notice: the SetProfileToneL should be executed before this function, because + * SetProfileToneL will check the file. + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the file is not allowed to be changed + * leaves with KErrAccessDenied. + * If the selected profile is not allowed to be changed + * (e.g. Drive-profile) leaves with KErrAccessDenied. + * In case of a ringing tone, if Alternate Line Service is enabled, + * finds out the line in use and sets the ringing tone for that + * line respectively. + * @param aProfileId The ID of the profile (NOT an index). + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return Returns KErrNone this function didn't check the file, so return KErrNone. + */ + IMPORT_C TInt SetProfileToneNotCheckL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Sets a ringing or alert tone for all profiles. + * If the file does not exist, leaves with KErrNotFound. + * If the file is of an unsupported type, leaves with KErrNotSupported. + * If the file is an unprotected MP3/AAC in user data area + * and if those are not allowed as ringing or alert tones, + * leaves with KErrPermissionDenied. + * If the file is a WMA file in user data area and those are not + * allowed, leaves with KErrArgument. + * If the file is not allowed to be changed + * (e.g. Drive-profile) method ignores profile changes + * and selects next profile. + * In case of a ringing tone, if Alternate Line Service is enabled, + * finds out the line in use and sets the ringing tone for that + * line respectively. + * Does not affect on user created profiles except if the active profile + * is user created of which the ringing or alert tone is also changed. + * @since 2.6 + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. An empty descriptor + * will be replaced with "No_Sound.wav". + * @return Returns KErrNone if successful, + * KErrCancel if user answers No to a DRM activation query. + * (See DRMHelper::SetAutomatedPassive) + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + IMPORT_C TInt SetToneForAllProfilesL( TProfileTones aToneSetting, + const TDesC& aFileName ); + + public: // From base classes + + /** + * From MSSSettings + */ + void PhoneSettingChanged( TSSSettingsSetting aSetting, TInt aNewValue ); + + protected: // New functions + + /** + * Stores the settings to Profiles Engine and adds the file to automated + * content list and removes the old file from automated content list. + * Do not call until the file is checked using CheckFileL. + * @param aProfileId The ID of the profile (NOT an index). + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName Full path and filename of the tone to be used + * as the new ringing or alert tone. + */ + void DoSetProfileToneL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Sets the tone to an MProfileExtended instance. + * @param aProfile The MProfileExtended instance. + * @param aToneSetting Identifies the tone which is updated. + * @param aFileName The tone file name. + */ + void SetToneL( MProfileExtended& aProfile, + TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Reads a tone setting from an MProfileExtended instance. + * @param aProfile The MProfileExtended instance. + * @param aToneSetting Identifies the tone which is read. + * @return Returns the tone file name. + */ + const TDesC& ReadToneL( const MProfileExtended& aProfile, + TProfileTones aToneSetting ) const; + + /** + * Checks that the given tone file exists and that it is + * a legal file to be used as a ringing or alert tone. + * @since 2.6 + * @param aFileName Full path and filename of the file to be checked. + * @return KErrNone if the file can be used as a ringing or alert tone, + * KErrNotFound if the file cannot be found, + * KErrNotSupported if a file is of an unsupported type or + * KErrPermissionDenied if the file is not allowed + * to be used as a ringing or alert tone. + * KErrGeneral if DRM rights are insufficient. + * KErrArgument if the file is DRM protected + * audio/mp4 and those are not allowed as ringingtones. + */ + TInt CheckFileL( const TDesC& aFileName ); + + /** + * Checks if a DRM protected file can be used as a ringing or alert tone. + * @since 2.6 + * @param aFileName Full path and filename of the file to be checked. + * @return KErrNone if the file can be used as a ringing or alert tone or + * KErrGeneral if DRM rights are insufficient. + */ + TInt CheckProtectedFileL( const TDesC& aFileName ); + + /** + * Tells whether a file can be registered as automated content or not. + * If DRM is not supported, returns always EFalse. + * @param aFileName File to be registered as automated content. + * @return Returns ETrue if aFileName can be set as automated content. + * Returns EFalse if can't or DRM is not supported. + */ + TBool CanSetAutomated( const TDesC& aFileName ); + + /** + * Asks user if he/she wants to activate unactivated content. + * Shows a query. Does nothing if DRM is not supported. + * @param aFileName File to be registered as automated content. + * @return Returns KErrCancel if user cancels the query. + */ + TInt AskAutomated( const TDesC& aFileName ); + + /** + * Registers a file to automated content list without any queries. + * Errors are omitted. Does nothing if DRM is not supported. + * @param aToneSetting The type of tone (e.g. ringing tone, SMS tone) to + * be registered as automated content. + * @param aFileName File to be registered as automated content. + * @return KErrNone or a system-wide error code. + */ + TInt SetAutomated( TProfileTones aToneSetting, const TDesC& aFileName ); + + /** + * Removes a file from automated content list. + * Errors are omitted. Does nothing if DRM is not supported. + * @param aFileName File to be removed from automated content list. + */ + void RemoveAutomated( const TDesC& aFileName ); + + /** + * Returns data type of a file. + * @param aFileName Full path and filename. + * @return Returns the data type of the file. + */ + TBuf DataTypeL( const TDesC& aFileName ) const; + + /** + * Returns whether a file is protected content or not. + * Returns always EFalse if DRM is not supported. + * @param aFileName The file name. + * @return Returns whether the file is protected content or not. + */ + TBool IsProtected( const TDesC& aFileName ) const; + + /** + * Returns whether a file is protected content or not. + * Returns always EFalse if DRM is not supported. + * @param aFileName The file name. + * @return Returns whether the file is protected content or not. + */ + TBool IsProtectedL( const TDesC& aFileName ) const; + + /** + * Displays an error note. + * @param aResourceId Resource ID to a TBUF resource. + */ + void ShowErrorNoteL( TInt aResourceId ) const; + + /** + * Returns info whether given filetype is allowed as ringingtone + * @param aDataType Tone MIME type + * @return ETrue if tone is allowed to be selected + */ + TBool AllowSelect( const TDesC& aDataType ) const; + + /** + * Checks the result of CheckFileL() and leaves if needed. Also checks + * if the file is protected and can be set as automated content. + * @param aResult result of the CheckFileL() call made before this. + * @param aFileName the name of the file to be checked for protection + * and if it is settable as automated content. + * @return KErrNone, if ok, otherwise a system-wide error code. + */ + TInt CheckResultAndProtectionL( TInt aResult, + const TDesC& aFileName ); + /** + * Checks ringing tone file size. + * @param aFile file to check. + * @param aSizeLimitKB maximum allowed file size in KB. + * @return KErrNone, if ok. + * KErrTooBig, if configurable file size limit exceeded. + */ + TInt CheckToneFileSizeL( const TDesC& aFile, TInt aSizeLimitKB ); + + /** + * Reads maximimum ringing tone file size in KB from cenrep. + */ + void GetMaxToneFileSizeL(); + + /** + * Displays error note about exceeded tone file size. + * @param aSizeLimitKB file size limit. + */ + void ShowSizeErrorNoteL( TInt aSizeLimitKB ); + + private: + + /// Default constructor + CProfileToneHandler(); + + /// 2nd phase constructor + void ConstructL(); + + /// Constructor for the DRM objects + void DrmConstructL(); + + /// Destructor for the DRM objects + void ReleaseDrm(); + + /// Functions related to WMDRM protection check + TBool IsFileWMDRMProtectedL( const TDesC& aFileName ); + + /// Called by SetAutomated + TInt SetAutomatedL( TProfileTones aToneSetting, const TDesC& aFileName ); + + private: // Data + + /// Owns: DRM Helper client. + CDRMHelper* iDrmHelper; + + /// Owns: DRM Common client + DRMCommon* iDrmCommon; + + /// Owns: Profile Engine Extended interface. + MProfileEngineExtended* iProfileEngine; + + /// Owns: Profiles local features. + MProfilesLocalFeatures* iProfilesFeatures; + + /// Supplementary services client for reading Alternate Line Service. + RSSSettings iSSSettings; + + /// File Server client. + RFs iFs; + + /// Alternate Line Setting value. + TInt iAlternateLineSetting; + + /// Maximum allowed tone file size in kilo bytes. + TInt iMaxSizeKB; + + }; + +#endif // CPROFILETONEHANDLER_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profile_plat/profiles_settings_view_api/profiles_settings_view_api.metaxml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profile_plat/profiles_settings_view_api/profiles_settings_view_api.metaxml Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,18 @@ + + + Profiles Settings View API + API which exports a view for personalising profile settings. + c++ + profilesapplication + + + + + + + + + no + no + + diff -r b7fa36b488f8 -r cd54903d48da profile_plat/profiles_settings_view_api/tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profile_plat/profiles_settings_view_api/tsrc/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 2007 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: +* This file provides the information required for building +* Profiles Settings View API test cases. +* +*/ + +//////////////////////////////////////////////////////////// +// bld.inf +// Part of EUnit library test + +#include "../../../../profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/bld.inf" diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/data/10283386.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/data/10283386.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2005 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: ECOM plugin resource file for GSConfigPlugin. +* +*/ + +#include + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = 0x10283386; // dll UID + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x10207236; // common UID for all GS plugins + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x10283387; // dll UID + 1 + version_no = 1; + display_name = "Profiles Plugin"; + default_data = "0x1020723B"; // Parent UID + //default_data = "0x10207239"; // Parent UID + opaque_data = "5"; // Order number + } + }; + }, + + INTERFACE_INFO + { + // UID of interface that is implemented + interface_uid = 0x2000B189; // from psmpluginbase.h + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = 0x10283388; // dll UID + 2 + //implementation_uid = 0x10200FE1; + version_no = 1; + //display_name = "PSMPluginStub1"; + display_name = "Profiles plugin"; + default_data = ""; + opaque_data = ""; + } + }; + } + }; + } + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/data/10283386.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/data/10283386.xml Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/data/GSProfilesPluginRsc.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/data/GSProfilesPluginRsc.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2005 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: Resource file for GSProfilesPlugin. +* +*/ + + +// RESOURCE IDENTIFIER +NAME GSPR // 4 letter ID + +// INCLUDES + + +#include +#include + + +#include + +// CONSTANTS + +// RESOURCE DEFINITIONS + +//---------------------------------------------------- +// +// +// Needed or loading the resource fails! +// +//---------------------------------------------------- +// +RESOURCE RSS_SIGNATURE + { + } + +//---------------------------------------------------- +// +// r_gs_config_plugin_caption +// Configuration Contexts Plugin caption. +// +//---------------------------------------------------- +// +RESOURCE TBUF r_gs_profiles_plugin_caption + { + // from GSProfilesPlugin.loc + buf = qtn_cp_folder_profiles; + } + + + +//End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/group/GSProfilesPlugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/group/GSProfilesPlugin.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2005 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: Project specification file for GSProfilesPlugin. +* +*/ + + +#include //this is needed for RESOURCE_FILES_DIR +#include + +CAPABILITY CAP_ECOM_PLUGIN +TARGET gsprofilesplugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x10283386 // dll uid is 0x10283386 +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE GSProfilesPlugin.cpp +SOURCE GSProfilesPluginImplementationTable.cpp + +USERINCLUDE ../data +USERINCLUDE ../inc + +SYSTEMINCLUDE . +SYSTEMINCLUDE /epoc32/include/cshelp +SYSTEMINCLUDE /epoc32/include/ecom + +// Default system include paths for application layer modules. +APP_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../data + +//ECOM resource definition +START RESOURCE 10283386.rss +TARGET gsprofilesplugin.rsc +TARGETPATH ECOM_RESOURCE_DIR +END // ECOM resource definition + +//OperatorLogo resources +START RESOURCE GSProfilesPluginRsc.rss +HEADER +TARGETPATH RESOURCE_FILES_DIR +LANGUAGE_IDS +END // OperatorLogo resources + + +LIBRARY apparc.lib +LIBRARY avkon.lib +LIBRARY bafl.lib +LIBRARY commonengine.lib // RConeResourceLoader +LIBRARY cone.lib +LIBRARY ecom.lib +LIBRARY efsrv.lib +LIBRARY egul.lib +LIBRARY eikcoctl.lib +LIBRARY eikcore.lib +LIBRARY euser.lib +LIBRARY featmgr.lib +LIBRARY gsecomplugin.lib +LIBRARY gsframework.lib // Base classes +LIBRARY ws32.lib +LIBRARY aknskins.lib // AknsUtils.h +LIBRARY apgrfx.lib // RApaLsSession +LIBRARY psmclient.lib +LIBRARY centralrepository.lib +LIBRARY profileengine.lib // Profile engine wrapper api +LIBRARY profileeng.lib // Profile Engine + + +DEBUGLIBRARY flogger.lib + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/group/GSProfilesPluginExports.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/group/GSProfilesPluginExports.inc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,32 @@ +/* +* ============================================================================== +* Name : GSProfilesPluginExports.inc +* Part of : GSProfilesPlugin +* Interface : ?Interface_category, ?Interface_name +* Description : ?Description +* Version : ?Version +* +* Copyright (c) 2007 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. All rights are reserved. Copying, +* including reproducing, storing, adapting or translating, any +* or all of this material requires the prior written consent of +* Nokia Corporation. This material also contains confidential +* information which may not be disclosed to others without the +* prior written consent of Nokia Corporation. +* ============================================================================== +*/ +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#ifndef GSPROFILESPLUGINEXPORTS_INC +#define GSPROFILESPLUGINEXPORTS_INC + +../loc/GSProfilesPlugin.loc APP_LAYER_LOC_EXPORT_PATH(gsprofilesplugin.loc) + +// Export PSM config file +../data/10283386.xml z:/private/2000b187/10283386.xml +#endif // GSPROFILESPLUGINEXPORTS_INC + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/group/GSProfilesPluginIcons.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/group/GSProfilesPluginIcons.mk Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,71 @@ +# +# Copyright (c) 2005 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: Icons for GSConfigPlugin +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z +else +ZDIR=\epoc32\data\z +endif + +# ---------------------------------------------------------------------------- +# : Configure these +# ---------------------------------------------------------------------------- + +TARGETDIR=$(ZDIR)\resource\apps +HEADERDIR=\epoc32\include +ICONTARGETFILENAME=$(TARGETDIR)\gsprofilesplugin.mif +HEADERFILENAME=$(HEADERDIR)\gsprofilesplugin.mbg + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# : Configure these. +# +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \ + /c8,8 qgn_prop_cp_perso_prof.svg + + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(HEADERFILENAME)&& \ + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2005 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: Information required for building GSConfigPlugin. +* +*/ + +// To get the APP_LAYER_LOC_EXPORT_PATH-definition +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +#include "GSProfilesPluginExports.inc" + +PRJ_EXTENSIONS +START EXTENSION s60/mifconv + OPTION TARGETFILE gsprofilesplugin.mif + OPTION HEADERFILE gsprofilesplugin.mbg + OPTION SOURCES -c8,8 qgn_prop_cp_perso_prof +END + + +PRJ_MMPFILES +//gnumakefile GSProfilesPluginIcons.mk +GSProfilesPlugin.mmp + +PRJ_TESTMMPFILES + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/inc/GSProfilesPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/inc/GSProfilesPlugin.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2005 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: GSProfilesPlugin implementation. +* +*/ + +#ifndef GSPROFILESPLUGIN_H +#define GSPROFILESPLUGIN_H + +// User includes + +#include // power save management plugin base + + +// System includes +#include +#include +#include + +// Classes referenced +class CAknNullService; +class CRepository; +class CApaDocument; +// Constants +const TUid KGSProfilesPluginUID = { 0x10283386 }; // dll uid +const TUid KGSProfilesPluginImplUID = { 0x10283387 }; // dll impl uid +const TUid KGsProfilesAppUid = { 0x100058F8 }; // from ProfileApp.mmp + +_LIT( KGSProfilesApp, "z:\\sys\\bin\\ProfileApp.exe" ); +_LIT( KGSProfilesPluginResourceFileName, "z:GSProfilesPluginRsc.rsc" ); +_LIT( KGSProfilesPluginIconDirAndName, "z:GSProfilesPlugin.mbm"); // Use KDC_BITMAP_DIR + + +enum TPsmPluginKeys + { + EPsmPluginKeyVibra = 1, + EPsmPluginKeyKbdVolume = 2, + EPsmPluginTactileFeedback = 3, + EPsmPluginAudioFeedback = 4 + }; + + +// CLASS DECLARATION + +//For embedding CC in CS +class TAppInfo + { + public: + TAppInfo( TUid aUid, const TDesC& aFile ) + : iUid( aUid ), iFile( aFile ) + {} + TUid iUid; + TFileName iFile; + }; + + +/** +* CGSProfilesPlugin. +* +* This class handles state and application logic of CGSProfilesPlugin. +* The plugin is a type of EGSItemTypeSettingDialog and therefore the GS FW will +* call HandleSelection() instead of DoActivate(). No CAknView functionality is +* supported even though the base class is CAknView derived via +* CGSPluginInterface. +* +*/ +class CGSProfilesPlugin : public CGSPluginInterface, + public MAknServerAppExitObserver // Embedding + { + public: // Constructors and destructor + + /** + * Symbian OS two-phased constructor + * @return + */ + static CGSProfilesPlugin* NewL( TAny* aInitParams ); + + /** + * Destructor. + */ + ~CGSProfilesPlugin(); + + public: // From CAknView + + /** + * See base class. + */ + TUid Id() const; + + public: // From CGSPluginInterface + + /** + * See base class. + */ + void GetCaptionL( TDes& aCaption ) const; + + /** + * See base class. + */ + TInt PluginProviderCategory() const; + + /** + * See base class. + */ + TGSListboxItemTypes ItemType(); + + /** + * See base class. + */ + void GetValue( const TGSPluginValueKeys aKey, + TDes& aValue ); + + /** + * See base class. + */ + void HandleSelection( const TGSSelectionTypes aSelectionType ); + + /** + * See base class. + */ + CGulIcon* CreateIconL( const TUid aIconType ); + + protected: // New + + /** + * C++ default constructor. + */ + CGSProfilesPlugin(); + + /** + * Symbian OS default constructor. + */ + void ConstructL(); + + protected: // From CAknView + + /** + * This implementation is empty because this class, being just a dialog, + * does not implement the CAknView finctionality. + */ + void DoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * This implementation is empty because this class, being just a dialog, + * does not implement the CAknView finctionality. + */ + void DoDeactivate(); + + private: + + /** + * Opens localized resource file. + */ + void OpenLocalizedResourceFileL( + const TDesC& aResourceFileName, + RConeResourceLoader& aResourceLoader ); + + /** + * Launches provisioning application. + */ + void LaunchProfilesAppL(); + + /** + * Launches application as embedded. + */ + void EmbedAppL( const TAppInfo& aApp ); + + protected: + + // Resource loader. + RConeResourceLoader iResources; + + CAknNullService* iNullService; + + CApaDocument* iEmbedded; + }; + + + + +class TPsmSettingItems + { + public: + TInt iVibraAlert; + TInt iKeypadVolume; + TInt iTactileFeedback; + TInt iAudioFeedback; + }; + + +/** +* CPSMProfilesPlugin. +* +* Psm server calls this plugin is when power save mode changes. Plugin +* is needed for writing psm specific setting values into profile +* central repository. These settings are vibrating alert, keypad volume, +* tactile feedback and audio feedback. Psm values come from +* psm server which reads them from CPSMProfilesPlugin .xml file +* (10283386.xml). +* +*/ +class CPSMProfilesPlugin : public CPsmPluginBase + { + public: + + /** + * Two-phased constructor. + * @return The created object. + */ + static CPSMProfilesPlugin* NewL( TPsmPluginCTorParams& initParams ); + + /** + * Destructor. + */ + virtual ~CPSMProfilesPlugin(); + + private: + CPSMProfilesPlugin( TPsmPluginCTorParams& aInitParams ); + void ConstructL(); + + + public: // From CPsmPluginBase + void NotifyModeChange( const TInt aMode ); + + private: + void NotifyModeChangeL( const TInt aMode ); + void GetPsmConfigSettingsL( TPsmSettingItems& aItems ); + void GetActiveProfileSettingsL( TPsmSettingItems& aItems ); + //void GetActiveProfileSettings2L( TPsmSettingItems& aItems ); + TUint32 ResolveKey( TUint aPartialKey, TInt aProfileId ); + void CPSMProfilesPlugin::Panic( TInt aReason ); + }; + + + + +#endif // GSPROFILESPLUGIN_H +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/loc/GSProfilesPlugin.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/loc/GSProfilesPlugin.loc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,30 @@ +/* +* Copyright (c) 2007 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: Localization strings for GSProfilesPlugin. +* +*/ + + +// LOCALISATION STRINGS + +// **CAPTIONS + +//d:Text of a list item in main view list +//d:Used by GS FW +//l:list_single_large_graphic_pane_t1 +//w: +//r: 5.0 +#define qtn_cp_folder_profiles "Profiles" + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/src/GSProfilesPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/src/GSProfilesPlugin.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,587 @@ +/* +* Copyright (c) 2005 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: GSProfilesPlugin implementation. +* +*/ + + +// User includes +#include "GSProfilesPlugin.h" +#include +#include +#include // GUI Resource +#include +#include +#include +#include + +// System includes +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +// PSM client +#include +#include +#include +#include +#include +#include + + +// ========================= MEMBER FUNCTIONS ================================ + +// --------------------------------------------------------------------------- +// CGSProfilesPlugin::CGSProfilesPlugin +// +// --------------------------------------------------------------------------- +// +CGSProfilesPlugin::CGSProfilesPlugin() + : iResources( *iCoeEnv ), iNullService(NULL) + { + } + + +// --------------------------------------------------------------------------- +// CGSProfilesPlugin::~CGSProfilesPlugin +// +// --------------------------------------------------------------------------- +// +CGSProfilesPlugin::~CGSProfilesPlugin() + { + iResources.Close(); + + if ( iNullService ) + { + delete iNullService; + } + } + + +// --------------------------------------------------------------------------- +// CGSProfilesPlugin::ConstructL +// +// --------------------------------------------------------------------------- +// +void CGSProfilesPlugin::ConstructL() + { + OpenLocalizedResourceFileL( KGSProfilesPluginResourceFileName, iResources ); + } + + +// --------------------------------------------------------------------------- +// CGSProfilesPlugin::NewL +// +// --------------------------------------------------------------------------- +// +CGSProfilesPlugin* CGSProfilesPlugin::NewL( TAny* /*aInitParams*/ ) + { + CGSProfilesPlugin* self = new ( ELeave ) CGSProfilesPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::Id (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +TUid CGSProfilesPlugin::Id() const + { + return KGSProfilesPluginImplUID; + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::DoActivateL (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::DoActivateL( const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::DoDeactivate (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::DoDeactivate() + { + } + + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::GetCaptionL (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::GetCaptionL( TDes& aCaption ) const + { + HBufC* result = StringLoader::LoadL( R_GS_PROFILES_PLUGIN_CAPTION ); + + if (result->Des().Length() < aCaption.MaxLength()) + { + aCaption.Copy( *result ); + } + else + { + aCaption = KNullDesC; + } + + delete result; + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::PluginProviderCategory (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +TInt CGSProfilesPlugin::PluginProviderCategory() const + { + return KGSPluginProviderInternal; + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::ItemType (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +TGSListboxItemTypes CGSProfilesPlugin::ItemType() + { + return EGSItemTypeSettingDialog; + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::GetValue (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::GetValue( const TGSPluginValueKeys /*aKey*/, + TDes& /*aValue*/ ) + { + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::HandleSelection (from CGSPluginInterface) +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::HandleSelection( + const TGSSelectionTypes /*aSelectionType*/ ) + { + TRAP_IGNORE( LaunchProfilesAppL() ); + } + +// --------------------------------------------------------------------------- +// CGSProfilesPlugin::CreateIconL (from CGSPluginInterface) +// +// --------------------------------------------------------------------------- +// + +CGulIcon* CGSProfilesPlugin::CreateIconL( const TUid aIconType ) + { + CGulIcon* icon; + TParse* fp = new ( ELeave ) TParse(); + CleanupStack::PushL( fp ); + fp->Set( KGSProfilesPluginIconDirAndName, &KDC_BITMAP_DIR, NULL ); + + if ( aIconType == KGSIconTypeLbxItem ) + { + icon = AknsUtils::CreateGulIconL( + AknsUtils::SkinInstance(), + KAknsIIDQgnPropCpPersoProf, + fp->FullName(), + EMbmGsprofilespluginQgn_prop_cp_perso_prof, + EMbmGsprofilespluginQgn_prop_cp_perso_prof_mask ); + } + else + { + icon = CGSPluginInterface::CreateIconL( aIconType ); + } + + CleanupStack::PopAndDestroy( fp ); + + return icon; + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::OpenLocalizedResourceFileL +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::OpenLocalizedResourceFileL( + const TDesC& aResourceFileName, + RConeResourceLoader& aResourceLoader ) + { + RFs fsSession; + User::LeaveIfError( fsSession.Connect() ); + CleanupClosePushL(fsSession); + + // Find the resource file: + TParse parse; + parse.Set( aResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); + TFileName fileName( parse.FullName() ); + + // Get language of resource file: + BaflUtils::NearestLanguageFile( fsSession, fileName ); + + // Open resource file: + aResourceLoader.OpenL( fileName ); + + CleanupStack::PopAndDestroy(&fsSession); + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::LaunchProfilesAppL +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::LaunchProfilesAppL() + { + // Get the correct application data + RWsSession ws; + User::LeaveIfError(ws.Connect()); + CleanupClosePushL(ws); + + // Find the task with uid + TApaTaskList taskList(ws); + TApaTask task = taskList.FindApp( KGsProfilesAppUid ); + + if ( task.Exists() ) + { + task.BringToForeground(); + } + else + { + //Launch Profiles application as embedded + TAppInfo app( KGsProfilesAppUid, KGSProfilesApp ); + iEmbedded=NULL; + EmbedAppL( app ); + } + CleanupStack::PopAndDestroy(&ws); + } + + +// ----------------------------------------------------------------------------- +// CGSProfilesPlugin::EmbedAppL +// +// ----------------------------------------------------------------------------- +// +void CGSProfilesPlugin::EmbedAppL( const TAppInfo& aApp ) + { + // Launch settings app + if ( iNullService ) + { + delete iNullService; + iNullService = NULL; + } + iNullService = CAknNullService::NewL( aApp.iUid, this ); + } + + + +/****************************************************************************** + * class CPSMProfilesPlugin + ******************************************************************************/ + + +// +// config file goes to: +// \epoc32\release\winscw\udeb\Z\private\2000B187 (emulator) +// \epoc32\data\Z\private\2000B187 (image) +// + + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::CPSMProfilesPlugin() +// ---------------------------------------------------------------------------------- +// +CPSMProfilesPlugin::CPSMProfilesPlugin( TPsmPluginCTorParams& aInitParams ) : + CPsmPluginBase( aInitParams ) + { + } + +// ----------------------------------------------------------------------------- +// CPSMProfilesPlugin::ConstructL( +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPSMProfilesPlugin::ConstructL() + { + } + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::NewL() +// ---------------------------------------------------------------------------------- +// +CPSMProfilesPlugin* CPSMProfilesPlugin::NewL( TPsmPluginCTorParams& aInitParams ) + { + CPSMProfilesPlugin* self = new ( ELeave ) CPSMProfilesPlugin( aInitParams ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::~CPSMProfilesPlugin() +// ---------------------------------------------------------------------------------- +// +CPSMProfilesPlugin::~CPSMProfilesPlugin() + { + } + + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::NotifyModeChange (from CPsmPluginBase) +// ---------------------------------------------------------------------------------- +// +void CPSMProfilesPlugin::NotifyModeChange( const TInt aMode ) + { + TInt ignoreError = KErrNone; + + TRAP( ignoreError, NotifyModeChangeL( aMode) ); + } + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::NotifyModeChangeL() +// ---------------------------------------------------------------------------------- +// +void CPSMProfilesPlugin::NotifyModeChangeL( const TInt aMode ) + { + TPsmSettingItems set; + + if ( aMode == EPsmsrvModeNormal || aMode == EPsmsrvPartialMode ) + { + GetActiveProfileSettingsL( set ); + } + else if ( aMode == EPsmsrvModePowerSave ) + { + GetPsmConfigSettingsL( set ); + } + else + { + User::Leave( KErrUnknown ); + } + + CRepository* cenrep = CRepository::NewLC( KCRUidVibraCtrl ); + User::LeaveIfError( cenrep->Set( KVibraCtrlProfileVibraEnabled, + set.iVibraAlert ) ); + User::LeaveIfError( cenrep->Set( KVibraCtrlProfileFeedbackEnabled, + set.iTactileFeedback ) ); + CleanupStack::PopAndDestroy( cenrep ); + + cenrep = CRepository::NewLC( KCRUidProfileEngine ); + User::LeaveIfError( cenrep->Set( KProEngActiveKeypadVolume, + set.iKeypadVolume ) ); + User::LeaveIfError( cenrep->Set( KProEngActiveAudioFeedback, + set.iAudioFeedback ) ); + User::LeaveIfError( cenrep->Set( KProEngActiveTactileFeedback, + set.iTactileFeedback ) ); + CleanupStack::PopAndDestroy( cenrep ); + + // Set up internal PSM PubSub key + _LIT_SECURITY_POLICY_PASS( KProfileEngReadPolicy ); + const TSecurityPolicy KProfileEngWritePolicy( ECapabilityWriteDeviceData ); + TInt err = RProperty::Define( KPSUidProfileEngine, + KProEngPsmChanged, RProperty::EInt, + KProfileEngReadPolicy, KProfileEngWritePolicy ); + if( err == KErrNone || err == KErrAlreadyExists ) + { + RProperty::Set( KPSUidProfileEngine, KProEngPsmChanged, aMode ); + + // Notify engine about power save mode change + MProfileEngine* profileEngine = CreateProfileEngineL(); + CleanupReleasePushL( *profileEngine ); + TInt activeProfileId = profileEngine->ActiveProfileId(); + CleanupStack::PopAndDestroy( profileEngine ); + + MProfileEngineExtended* engine = CreateProfileEngineExtendedL(); + CleanupReleasePushL( *engine ); + MProfileExtended* profile = engine->ProfileL( activeProfileId ); + CleanupReleasePushL( *profile ); + + // CommitChangeL is needed so that an event will be created for profile + // modification listeners. + engine->CommitChangeL( *profile ); + + CleanupStack::PopAndDestroy( profile ); + CleanupStack::PopAndDestroy( engine ); + } + + } + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::GetActiveProfileSettingsL() +// ---------------------------------------------------------------------------------- +// +void CPSMProfilesPlugin::GetActiveProfileSettingsL( TPsmSettingItems& aSettings ) + { + CRepository* repository = CRepository::NewLC( KCRUidProfileEngine ); + + TInt activeProfile = KErrNotFound; + User::LeaveIfError( repository->Get( KProEngActiveProfile, activeProfile ) ); + + TInt num = ResolveKey( EProfileSettingIdVibra, activeProfile ); + User::LeaveIfError( repository->Get( num, aSettings.iVibraAlert ) ); + + num = ResolveKey( EProfileSettingIdKeypadVolume, activeProfile ); + User::LeaveIfError( repository->Get( num, aSettings.iKeypadVolume ) ); + + num = ResolveKey( EProfileSettingIdTactileFeedback, activeProfile ); + User::LeaveIfError( repository->Get( num, aSettings.iTactileFeedback ) ); + + num = ResolveKey( EProfileSettingIdAudioFeedback, activeProfile ); + User::LeaveIfError( repository->Get( num, aSettings.iAudioFeedback ) ); + + CleanupStack::PopAndDestroy( repository ); + + return; + } + + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::GetActiveProfileSettingsL() +// ---------------------------------------------------------------------------------- +// +/* +void CPSMProfilesPlugin::GetActiveProfileSettings2L( TPsmSettingItems& aSettings ) + { + MProfileEngine* profileEngine = CreateProfileEngineL(); + CleanupReleasePushL( *profileEngine ); + + MProfile* activeProfile = profileEngine->ActiveProfileLC(); + + const MProfileTones& tones = activeProfile->ProfileTones(); + const TProfileToneSettings& ts = tones.ToneSettings(); + + aSettings.iVibraAlert = ts.iVibratingAlert; + aSettings.iKeypadVolume = ts.iKeypadVolume; + + const MProfileExtraSettings& extra = activeProfile->ProfileExtraSettings(); + const MProfileFeedbackSettings& feedBack = extra.ProfileFeedbackSettings(); + aSettings.iTactileFeedback = feedBack.TactileFeedback(); + aSettings.iAudioFeedback = feedBack.AudioFeedback(); + + CleanupStack::PopAndDestroy(); // profile + CleanupStack::PopAndDestroy( profileEngine ); + } +*/ + +// ---------------------------------------------------------------------------------- +// CPSMProfilesPlugin::GetPsmConfigSettingsL() +// ---------------------------------------------------------------------------------- +// +void CPSMProfilesPlugin::GetPsmConfigSettingsL( TPsmSettingItems& aSettings ) + { + RConfigInfoArray arr; + CleanupClosePushL( arr ); + + TPsmsrvConfigInfo info; + info.iConfigId = EPsmPluginKeyVibra; + info.iConfigType = EConfigTypeInt; + info.iIntValue = KErrNotFound; + User::LeaveIfError( arr.Append( info ) ); + + info.iConfigId = EPsmPluginKeyKbdVolume; + info.iConfigType = EConfigTypeInt; + info.iIntValue = KErrNotFound; + User::LeaveIfError( arr.Append( info ) ); + + info.iConfigId = EPsmPluginTactileFeedback ; + info.iConfigType = EConfigTypeInt; + info.iIntValue = KErrNotFound; + User::LeaveIfError( arr.Append( info ) ); + + info.iConfigId = EPsmPluginAudioFeedback; + info.iConfigType = EConfigTypeInt; + info.iIntValue = KErrNotFound; + User::LeaveIfError( arr.Append( info ) ); + + iSettingsProvider.GetSettingsL( arr, KGSProfilesPluginUID.iUid ); + + aSettings.iVibraAlert = arr[0].iIntValue; + aSettings.iKeypadVolume = arr[1].iIntValue; + aSettings.iTactileFeedback = arr[2].iIntValue; + aSettings.iAudioFeedback = arr[3].iIntValue; + + CleanupStack::PopAndDestroy( &arr ); + } + + +// ----------------------------------------------------------------------------- +// CPSMProfilesPlugin::ResolveKey +// +// ----------------------------------------------------------------------------- +// +TUint32 CPSMProfilesPlugin::ResolveKey( TUint aPartialKey, TInt aProfileId ) + { + const TInt KProfileIdShift = 24; + + return ( ( aProfileId << KProfileIdShift ) | aPartialKey ); + } + + +// ----------------------------------------------------------------------------- +// CPSMProfilesPlugin::Panic +// +// ----------------------------------------------------------------------------- +// +void CPSMProfilesPlugin::Panic( TInt aReason ) + { + _LIT(KPanicCategory,"CPSMProfilesPlugin"); + + User::Panic(KPanicCategory, aReason); + } + + + + +// End of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/GSProfilesPlugin/src/GSProfilesPluginImplementationTable.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/GSProfilesPlugin/src/GSProfilesPluginImplementationTable.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,51 @@ +/* +* Copyright (c) 2005 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: ECOM proxy table for GSProfilesPlugin. +* +*/ + + +// User includes +#include "GSProfilesPlugin.h" + +// System includes +#include +#include + + +// Constants +const TImplementationProxy KGSProfilesPluginImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( 0x10283387, CGSProfilesPlugin::NewL ), + IMPLEMENTATION_PROXY_ENTRY( 0x10283388, CPSMProfilesPlugin::NewL ) + }; + + +// --------------------------------------------------------------------------- +// ImplementationGroupProxy +// Gate/factory function +// +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt& aTableCount ) + { + RDebug::Print( _L( "[GSLog] ImplementationGroupProxy()" ) ); + aTableCount = sizeof( KGSProfilesPluginImplementationTable ) + / sizeof( TImplementationProxy ); + return KGSProfilesPluginImplementationTable; + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/Group/Profiles.lnt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/Group/Profiles.lnt Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,37 @@ +/** Unused Enum scan +-e???? +e749 +*/ + +/** Unused header scan +-e???? +e766 +*/ + +/** standard lint check +*/ +-w1 -e322 + +/** define unicode +-D_UNICODE +*/ + +/** Standard include directories */ +-i..\profileengine\doc +-i..\profileengine\group +-i..\profileengine\inc +-i..\profileengine\src +-i..\profileengine\EngInc +-i..\profileengine\EngSrc +-i..\profileapp\aif +-i..\profileapp\doc +-i..\profileapp\group +-i..\profileapp\help +-i..\profileapp\uisrc +-i..\profileapp\settingsviewinc +-i..\profileapp\settingsviewsrc +-i\epoc32\include +-i\epoc32\include\oem + +/** Examined application source directories */ +..\profileengine\EngSrc\*.cpp +..\profileapp\uisrc\*.cpp +..\profileapp\settingsviewsrc\*.cpp diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/Group/ProfilesDebug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/Group/ProfilesDebug.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2005 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: Debug macros for Profiles. +* +*/ + + +#ifndef PROFILESDEBUG_H +#define PROFILESDEBUG_H + +#include + +#ifdef _DEBUG +#define PRODEBUG(a) RDebug::Print( _L( a ) ) +#define PRODEBUG1(a,b) RDebug::Print( _L( a ),b ) +#define PRODEBUG2(a,b,c) RDebug::Print( _L( a ),b,c ) +#define PRODEBUG3(a,b,c,d) RDebug::Print( _L( a ),b,c,d ) +#else +#define PRODEBUG(a) +#define PRODEBUG1(a,b) +#define PRODEBUG2(a,b,c) +#define PRODEBUG3(a,b,c,d) +#endif // _DEBUG + +#endif // PROFILESDEBUG_H + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/Group/ProfilesUID.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/Group/ProfilesUID.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2002 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: Profile change notify handler. +* +*/ + + +#ifndef __PROFILESUID_H__ +#define __PROFILESUID_H__ + +#define KEComRecognitionUID2 0x10009d8d + +#define INTERFACE_UID_PROFILEENG_PEC 0x101f85b4 +#define IMPLEMENTATION_UID_PROFILEENG_PEC 0x101f85b5 + +#define INTERFACE_UID_PROFILESETTINGSVIEW_PEC 0x101f85b6 +#define IMPLEMENTATION_UID_PROFILESETTINGSVIEW_PEC 0x101f85b7 + +#define IMPLEMENTATION_UID_PROFILES_GS_TONES_PLUGIN 0x1020729b + +#endif + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/Group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/Group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 2002 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: This file provides the information required for building the +* whole of Profiles +* +*/ + +// To get the APP_LAYER_PLATFORM_EXPORT_PATH-definition +#include + +PRJ_PLATFORMS + DEFAULT + +PRJ_EXPORTS + +#include "../GSProfilesPlugin/group/GSProfilesPluginExports.inc" +#include "../ProfileAiwProvider/group/ProfileAiwProviderExports.inc" +#include "../ProfileApp/group/ProfileAppExports.inc" + +../rom/Profile.iby CORE_APP_LAYER_IBY_EXPORT_PATH(profile.iby) +../rom/ProfileResources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(profileresources.iby) + +PRJ_EXTENSIONS + +START EXTENSION s60/mifconv +OPTION TARGETFILE profileapp_aif.mif +OPTION SOURCES -c8,8 qgn_menu_mode +END + +START EXTENSION s60/mifconv +OPTION TARGETFILE gsprofilesplugin.mif +OPTION HEADERFILE gsprofilesplugin.mbg +OPTION SOURCES -c8,8 qgn_prop_cp_perso_prof +END +PRJ_MMPFILES + +//#ifdef __SCALABLE_ICONS +// gnumakefile ../ProfileApp/group/icons_aif_scalable_dc.mk +//#else + //gnumakefile ../ProfileApp/group/icons_aif_bitmaps_dc.mk +//#endif // __SCALABLE_ICONS + +../ProfileApp/group/ProfileSettingsView.mmp +../ProfileApp/group/ProfileApp.mmp +#ifdef RD_GS_RENOVATION +#ifndef RD_CONTROL_PANEL +../ProfilesGSTonesPlugin/group/ProfilesGSTonesPlugin.mmp +#endif // RD_CONTROL_PANEL +#ifdef RD_CONTROL_PANEL +//gnumakefile ../GSProfilesPlugin/group/GSProfilesPluginIcons.mk +../GSProfilesPlugin/group/GSProfilesPlugin.mmp +#endif // RD_CONTROL_PANEL +#endif // RD_GS_RENOVATION + +../ProfileAiwProvider/group/ProfileAiwProvider.mmp + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/group/ProfileAiwProvider.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/group/ProfileAiwProvider.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2002 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: Project definition file for ProfileAiwProvider +* +*/ + +#include "ProfileAiwProviderUid.h" +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include +#include + +TARGET profileaiwprovider.dll +TARGETTYPE PLUGIN +UID KEComRecognitionUID2 KProfileAiwProviderDllUid +CAPABILITY CAP_ECOM_PLUGIN +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE Dllmain.cpp +SOURCE CProfileAiwProvider.cpp +SOURCE CPapPopupList.cpp + +USERINCLUDE ../rss +USERINCLUDE ../group +USERINCLUDE ../../ProfileApp/SettingsViewInc +USERINCLUDE ../../ProfileApp/group +SYSTEMINCLUDE ../../../inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + +SOURCEPATH ../rss + +START RESOURCE ProfileAiwProviderResource.rss + HEADER + TARGETPATH RESOURCE_FILES_DIR + LANGUAGE_IDS +END + +// ECom resource +START RESOURCE 10281F18.rss + TARGET profileaiwprovider.rsc +END + + +LIBRARY euser.lib +LIBRARY cone.lib +LIBRARY commonengine.lib +LIBRARY avkon.lib +LIBRARY servicehandler.lib +LIBRARY efsrv.lib +LIBRARY bafl.lib +LIBRARY profilesettingsview.lib +LIBRARY aknskins.lib +LIBRARY eikcoctl.lib +LIBRARY centralrepository.lib +LIBRARY featmgr.lib // Feature Manager +LIBRARY egul.lib // CGulIcon +LIBRARY eikcore.lib +LIBRARY platformenv.lib + +#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM +LIBRARY drmutility.lib +#endif + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/group/ProfileAiwProviderExports.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/group/ProfileAiwProviderExports.inc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,30 @@ +/* +* ============================================================================== +* Name : ProfileAiwProviderExports.inc +* Part of : ProfileAiwProvider +* Interface : ?Interface_category, ?Interface_name +* Description : ?Description +* Version : ?Version +* +* Copyright (c) 2007 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. All rights are reserved. Copying, +* including reproducing, storing, adapting or translating, any +* or all of this material requires the prior written consent of +* Nokia Corporation. This material also contains confidential +* information which may not be disclosed to others without the +* prior written consent of Nokia Corporation. +* ============================================================================== +*/ +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#ifndef PROFILEAIWPROVIDEREXPORTS_INC +#define PROFILEAIWPROVIDEREXPORTS_INC + +../loc/ProfileAiwProvider.loc APP_LAYER_LOC_EXPORT_PATH(profileaiwprovider.loc) + +#endif // PROFILEAIWPROVIDEREXPORTS_INC + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/group/ProfileAiwProviderUid.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/group/ProfileAiwProviderUid.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,25 @@ +/* +* 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: Uids for profile Aiw service. +* +*/ + +#ifndef __PROFILEAIWPROVIDER_H__ +#define __PROFILEAIWPROVIDER_H__ + +#define KProfileAiwProviderDllUid 0x10281F18 +#define KProfileAiwProviderImplUid 0x10281F18 +#define KEComRecognitionUID2 0x10009D8D + +#endif // __PROFILEAIWPROVIDER_H__ diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,27 @@ +/* +* 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: This file provides the information required for building ProfileAiwProvider +* +*/ +// To get the APP_LAYER_LOC_EXPORT_PATH-definition +#include + +PRJ_PLATFORMS +DEFAULT + +PRJ_EXPORTS +#include "ProfileAiwProviderExports.inc" + +PRJ_MMPFILES +ProfileAiwProvider.mmp diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/loc/ProfileAiwProvider.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/loc/ProfileAiwProvider.loc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2002 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: ProfileAiwProvider localisation strings. +* +*/ + + + +// LOCALISATION STRINGS + +//d:Command in options list +//d:Uses tone as ringing tone +//l:list_single_popup_submenu_pane_t1 +//w: +//r:3.1 +#define qtn_mg_options_set_as_rt "Set as ringing tone" + +//d: Error message text for non-supported file formats +//l: popup_note_window +//w: +//r:3.1 +#define qtn_profiles_info_tone_drm_protected "Protected file. Cannot be selected as ringing tone." + +//d: ListBox dialog header +//l: heading_pane_t1 +//w: +//r:3.1 +#define qtn_profiles_query_select_profiles "Select profiles:" + +//d: Error message text for non-supported file formats +//l: popup_note_window +//w: +//r:3.1 +#define qtn_profiles_info_mime_type_not_supported "Files of this format cannot be set as ringing tone." + +//d: Information note for changed profiles +//l: popup_note_window +//w: +//r:3.1 +#define qtn_profiles_confirm_ringtone_changed "Ringing tone changed for selected profiles." + +//d: Information note shown when a file is copied from a remote drive +//l: popup_note_window +//w: +//r:5.0 +#define qtn_profiles_info_remote_drive_copy "File copied to Gallery and set as ringing tone for selected profiles." + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/rss/10281F18.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/rss/10281F18.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2002 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: ProfileAiwProvider resources +* +*/ + +// INCLUDES +#include +#include +#include "ProfileAiwProviderUid.h" + +// ----------------------------------------------------------------------------- +// +// theInfo +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE REGISTRY_INFO theInfo + { + resource_format_version = RESOURCE_FORMAT_VERSION_2; + dll_uid = KProfileAiwProviderDllUid; + interfaces = + { + INTERFACE_INFO + { + interface_uid = KAiwClassMenu; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = KProfileAiwProviderImplUid; + version_no = 1; + display_name = ""; + default_data = "*"; + opaque_data = KAiwCmdAssignStr; // for KAiwCmdAssign command id + } + }; + } + }; + } diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/rss/ProfileAiwProviderResource.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/rss/ProfileAiwProviderResource.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2002 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: ProfileAiwProvider resources +* +*/ + + +// RESOURCE IDENTIFIER +NAME AIPP + +// INTERNAL INCLUDES +#include +#include // For qtn_profiles_tone_maxsize_error + +// EXTERNAL INCLUDES +#include // For RESOURCE MENU_PANE +#include // For KAiwCmdView +#include // For text_not_allowed + +// RESOURCE DEFINITIONS + +RESOURCE RSS_SIGNATURE { } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_menu +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_profileaiwprovider_menu + { + items= + { + MENU_ITEM + { + command = KAiwCmdAssign; + txt = qtn_mg_options_set_as_rt; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_info_tone_drm_protected +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_info_tone_drm_protected + { + buf = qtn_profiles_info_tone_drm_protected; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_text_not_allowed +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_text_not_allowed + { + buf = text_not_allowed; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_info_tone_no_drm +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_info_tone_no_drm + { + buf = qtn_profiles_info_tone_no_drm; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_query_select_profiles +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_query_select_profiles + { + buf = qtn_profiles_query_select_profiles; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_info_mime_type_not_supported +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_info_mime_type_not_supported + { + buf = qtn_profiles_info_mime_type_not_supported; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_confirm_ringtone_changed +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_confirm_ringtone_changed + { + buf = qtn_profiles_confirm_ringtone_changed; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_tone_maxsize_error +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_tone_maxsize_error + { + buf = qtn_profiles_tone_maxsize_error; + } + +// ----------------------------------------------------------------------------- +// +// r_profileaiwprovider_confirm_ringtone_copied +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profileaiwprovider_confirm_ringtone_copied + { + buf = qtn_profiles_info_remote_drive_copy; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/src/CPapPopupList.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/src/CPapPopupList.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,210 @@ +/* +* Copyright (c) 2007 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: A thin CAknPopupList extension. +* +*/ + + + +// CLASS HEADER +#include "CPapPopupList.h" + +// INTERNAL INCLUDES + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS +namespace + { + // Granularities + const TInt KIconGranularity( 3 ); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPapPopupList::CPapPopupList +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CPapPopupList::CPapPopupList() + : CAknPopupList() + { + } + + +void CPapPopupList::ConstructL( CEikListBox* aListBox, TInt aCbaResource ) + { + CAknPopupList::ConstructL( aListBox, aCbaResource, AknPopupLayouts::EMenuWindow ); + } + +// ----------------------------------------------------------------------------- +// CPapPopupList::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPapPopupList* CPapPopupList::NewL( CEikListBox* aListBox, TInt aCbaResource ) + { + CPapPopupList* self = new( ELeave ) CPapPopupList(); + CleanupStack::PushL( self ); + self->ConstructL( aListBox, aCbaResource ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor + CPapPopupList::~CPapPopupList() + { + } + +// ----------------------------------------------------------------------------- +// CPapPopupList::HandleResourceChange +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPapPopupList::HandleResourceChange( TInt aType ) + { + if( aType == KAknsMessageSkinChange ) + { + TRAP_IGNORE( SetIconsL() ); + } + CAknPopupList::HandleResourceChange( aType ); + } + +// ----------------------------------------------------------------------------- +// CPapPopupList::HandleListBoxEventL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPapPopupList::HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ) + { + switch( aEventType ) + { + case EEventItemClicked: + case EEventItemSingleClicked: + UpdateCba(); + break; + + default: + break; + } + + CAknPopupList::HandleListBoxEventL( aListBox, aEventType ); + } + +// ----------------------------------------------------------------------------- +// CPapPopupList::ProcessCommandL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPapPopupList::ProcessCommandL( TInt aCommandId ) + { + switch( aCommandId ) + { + // Fall through + case EAknSoftkeyMark: + case EAknSoftkeyUnmark: + UpdateCba(); + break; + + default: + break; + } + + CAknPopupList::ProcessCommandL( aCommandId ); + } + +// ----------------------------------------------------------------------------- +// CPapPopupList::UpdateCba +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CPapPopupList::UpdateCba() + { + // Cache the pointer to button group container + CEikButtonGroupContainer* cba = ButtonGroupContainer(); + // Left softkey should be visible if there are items selected, + // i.e. the selection index array has items. + TBool visible( ListBox()->View()->SelectionIndexes()->Count() > 0 ); + // Resolve left softkey command id + TInt leftId( cba->ButtonGroup()->CommandId( 0 ) ); + // Check if left softkey visibility has changed + if( visible != cba->IsCommandVisible( leftId ) ) + { + // Left softkey visibility has changed, update it + cba->MakeCommandVisible( leftId, visible ); + } + } + +// ---------------------------------------------------------------------------- +// CPapPopupList::SetIconsL +// (other items were commented in a header). +// ---------------------------------------------------------------------------- +// +void CPapPopupList::SetIconsL() + { + CAknSingleGraphicPopupMenuStyleListBox* listBox = + static_cast( ListBox() ); + + // Create new icon array + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( KIconGranularity ); + CleanupStack::PushL( iconArray ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + CGulIcon* icon = CGulIcon::NewLC(); + CFbsBitmap* bitmap = 0; + CFbsBitmap* mask = 0; + AknsUtils::CreateColorIconL( skin, KAknsIIDQgnIndiCheckboxOn, + KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG15, + bitmap, mask, KAvkonBitmapFile, EMbmAvkonQgn_indi_checkbox_on, + EMbmAvkonQgn_indi_checkbox_on_mask, KRgbBlack ); + icon->SetBitmap( bitmap ); + icon->SetMask( mask ); + iconArray->AppendL( icon ); + CleanupStack::Pop( icon ); + + icon = CGulIcon::NewLC(); + AknsUtils::CreateColorIconL( skin, KAknsIIDQgnIndiCheckboxOff, + KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG15, + bitmap, mask, KAvkonBitmapFile, EMbmAvkonQgn_indi_checkbox_off, + EMbmAvkonQgn_indi_checkbox_off_mask, KRgbBlack ); + icon->SetBitmap( bitmap ); + icon->SetMask( mask ); + iconArray->AppendL( icon ); + CleanupStack::Pop( icon ); + + // Delete old icons + CArrayPtr* arr = listBox->ItemDrawer()->ColumnData()->IconArray(); + if( arr ) + { + arr->ResetAndDestroy(); + delete arr; + arr = NULL; + } + + // Set new icon array + listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); // changes ownership + CleanupStack::Pop( iconArray ); + + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/src/CPapPopupList.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/src/CPapPopupList.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,88 @@ +/* +* Copyright (c) 2007 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: A thin CAknPopupList extension. +* +*/ + + + +#ifndef CPAPPOPUPLIST_H +#define CPAPPOPUPLIST_H + +// EXTERNAL INCLUDES +#include + +// FORWARD DECLARATIONS + +// CLASS DECLARATION + +/** +* A thin CAknPopupList extension. +* Handles resource changes. +* +* @lib ProfileSettingsView.lib +* @since 3.1 +*/ +NONSHARABLE_CLASS( CPapPopupList ) : public CAknPopupList + { + + public: // New methods + + /** + * Two-phased constructor. + * @param aListbox A parameter to CAknPopupList. + * @param aCbaResource A parameter to CAknPopupList. + * @param aType A parameter to CAknPopupList. + */ + static CPapPopupList* NewL( CEikListBox* aListBox, TInt aCbaResource ); + + void ConstructL( CEikListBox* aListBox, TInt aCbaResource ); + + /** + * Destructor. + */ + virtual ~CPapPopupList(); + + /** + * Fills in ListBox icon array. + */ + void SetIconsL(); + + private: // From CAknPopupList + + void HandleResourceChange( TInt aType ); + void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ); + void ProcessCommandL( TInt aCommandId ); + + private: + + /** + * C++ constructor. + */ + CPapPopupList(); + + private: // New methods + + /** + * Updates softkeys. + */ + void UpdateCba(); + + private: // Data + + }; + +#endif // CPAPPOPUPLIST_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/src/CProfileAiwProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/src/CProfileAiwProvider.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,873 @@ +/* +* Copyright (c) 2002-2004 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: Profile Aiw service provider. +* +*/ + + +// CLASS HEADER +#include "CProfileAiwProvider.h" + +// INTERNAL INCLUDES +#include "CProfileEngineHandler.h" +#include "CPapPopupList.h" + +// EXTERNAL INCLUDES +#include // For CAiwMenuPane +#include // For KAiwCmdAssign +#include // For MAiwNotifyCallback +#include // For TResourceReader +#include // For resource texts +#include +#include // CCoeEnv +#include // RConeResourceLoader +#include +#include // For CAknInformationNote +#include // For CAknSingleGraphicPopupMenuStyleListBox +#include +#include +#include +#include +#include +#include +#include // For PROFILES_MAX_NAME_LENGTH +#include // For EikFileUtils +#include +#include +#include +#include + +#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM +#include +#include +#endif + + +// CONSTANTS +namespace + { + _LIT( KProfileAiwProviderResourceFileName, "z:ProfileAiwProviderResource.rsc" ); + // Allowed MIME types + _LIT( KAudioCommonMimeType, "audio/*"); + _LIT( KAudioRngMimeType, "application/vnd.nokia.ringing-tone" ); +#ifdef RD_VIDEO_AS_RINGING_TONE + _LIT( KVideoCommonMimeType, "video/*"); + _LIT( KRMVideoMimeType, "application/vnd.rn-realmedia" ); + _LIT( KRMVideoMimeType2, "application/x-pn-realmedia" ); + _LIT( KSDPVideoMimeType, "application/sdp" ); +#endif + // Granularities + const TInt KArrayGranularity( 3 ); + // List item format + _LIT( KProfileAIWProviderIconAndTab, "1\t"); + // Maximum profile name length + const TInt KProfileAiwProviderMaxNameLength( PROFILES_MAX_NAME_LENGTH ); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileAiwProvider* CProfileAiwProvider::NewL() + { + CProfileAiwProvider* self = new(ELeave) CProfileAiwProvider; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::CProfileAiwProvider +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileAiwProvider::CProfileAiwProvider() + { + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::ConstructL() + { + FeatureManager::InitializeLibL(); + TParse* fp = new(ELeave) TParse(); + fp->Set(KProfileAiwProviderResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL); + TFileName resourceFileName( fp->FullName() ); + delete fp; + + // Get language of resource file + BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), resourceFileName ); + iResourceOffset = CCoeEnv::Static()->AddResourceFileL( resourceFileName ); + iProfileToneHandler = CProfileToneHandler::NewL(); + // Move this to PopulateListBox() + //iEngineHandler = CProfileEngineHandler::NewL(); + + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, + R_PROFILEAIWPROVIDER_MENU ); + // load strings from resource + iWMAErrorText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_TEXT_NOT_ALLOWED ); + iMP4ErrorText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_INFO_TONE_DRM_PROTECTED ); + iUnprotectedErrorText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_INFO_TONE_NO_DRM ); + iNotSupportedErrorText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_INFO_MIME_TYPE_NOT_SUPPORTED ); + iPopupTitle = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_QUERY_SELECT_PROFILES ); + iChangedProfilesText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_CONFIRM_RINGTONE_CHANGED ); + iCopiedAndChangedText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_CONFIRM_RINGTONE_COPIED ); + + // Read the maximum limit for the size of a tone file: + CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine ); + CleanupStack::PushL( cenrep ); + User::LeaveIfError( cenrep->Get( KProEngRingingToneMaxSize, iMaxSize ) ); + CleanupStack::PopAndDestroy( cenrep ); + iSizeErrorText = StringLoader::LoadL( + R_PROFILEAIWPROVIDER_TONE_MAXSIZE_ERROR, iMaxSize ); + + CleanupStack::PopAndDestroy(); // reader + } + +// Destructor +CProfileAiwProvider::~CProfileAiwProvider() + { + delete iIndexToIdArray; + delete iWMAErrorText; + delete iMP4ErrorText; + delete iUnprotectedErrorText; + delete iNotSupportedErrorText; + delete iPopupTitle; + delete iChangedProfilesText; + delete iSizeErrorText; + delete iCopiedAndChangedText; + + delete iProfileToneHandler; + delete iEngineHandler; + CCoeEnv::Static()->DeleteResourceFile( iResourceOffset ); + FeatureManager::UnInitializeLib(); + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::InitialiseL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::InitialiseL( MAiwNotifyCallback& /*aFrameworkCallback*/, + const RCriteriaArray& /*aInterest*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::HandleServiceCmdL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::HandleServiceCmdL( const TInt& aCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& /*aOutParamList*/, + TUint aCmdOptions, + const MAiwNotifyCallback* aCallback ) + { + // Cope with the design problems of AIW framework + iConstNotifyCallback = const_cast (aCallback); + + if( aCmdOptions & KAiwOptCancel ) + { + if( iPopup ) + { + iPopup->CancelPopup(); + iPopup = NULL; + } + return; + } + + if( aCmdId == KAiwCmdAssign ) + { + // Retrieve filename and file MIME type from AIW param list + TPtrC fileName = + GetAiwParamAsDescriptor(aInParamList, EGenericParamFile); + + TPtrC mimeTypeString = + GetAiwParamAsDescriptor(aInParamList, EGenericParamMIMEType); + + // Leave, if there were not given all the required parameters + if ((fileName == KNullDesC) || (mimeTypeString == KNullDesC)) + { + return; + } + + if( !CheckMimeTypeL( mimeTypeString ) ) + { + // Not supported format + ShowErrorNoteL( *iNotSupportedErrorText ); + } + else if( IsFileWMDRMProtectedL( fileName ) ) + { + ShowErrorNoteL( *iMP4ErrorText ); + } + else if( !IsToneFileSizeOkL( fileName ) ) + { + // Too big file + ShowErrorNoteL( *iSizeErrorText ); + } + else + { + LaunchL( *iPopupTitle, fileName ); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::PerformProfileChangeL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::PerformProfileChangeL( + const TDesC& aFileName, const TBool& aChangeAllProfiles ) const + { + TInt count( iSelectionArray->Count() ); + TInt err( KErrNone ); + TInt r( KErrNone ); + + // Check location of the tone and copy if needed + TFileName target; + TBool remote = CopyIfRemoteL( aFileName, target ); + + if( aChangeAllProfiles ) + { + if( remote ) + { + TRAP( r, err = iProfileToneHandler->SetToneForAllProfilesL( + EProfileRingingToneSetting, target ) ); + } + else + { + TRAP( r, err = iProfileToneHandler->SetToneForAllProfilesL( + EProfileRingingToneSetting, aFileName ) ); + } + } + else + { + TInt profileId( 0 ); + for( TInt index(0); index < count; index++ ) + { + profileId = iIndexToIdArray->At( iSelectionArray->At( index ) ); + + if( remote ) + { + // The first time set the tone, use SetProfileToneL to check the file + if ( index == 0 ) + { + + TRAP( r, err = iProfileToneHandler->SetProfileToneL( + profileId, EProfileRingingToneSetting, target ) ); + } + // the file has been checked at first time, use SetProfileToneL to + // avoid repeat check. + else + { + TRAP( r, err = iProfileToneHandler->SetProfileToneNotCheckL( + profileId, EProfileRingingToneSetting, target ) ); + } + } + else + { + // The first time set the tone, use SetProfileToneL to check the file + if ( index == 0 ) + { + TRAP( r, err = iProfileToneHandler->SetProfileToneL( profileId, + EProfileRingingToneSetting, aFileName ) ); + } + // the file has been checked at first time, use SetProfileToneL to + // avoid repeat check. + else + { + TRAP( r, err = iProfileToneHandler->SetProfileToneNotCheckL( + profileId, EProfileRingingToneSetting, aFileName ) ); + } + + } + + // KErrNotFound is checked for the unlikely case in which the user + // has first popped up the list of profiles and then switched to + // Profiles App and deleted a profile or more, and finally completed + // this "assigned to ringing tone" operation + if( r == KErrNotFound ) + { + r = KErrNone; + } + // The case r == KErrAccessDenied needn't be checked since only + // those profiles that are modifiable are included in the list in + // PopulateListBoxL() below + if( r != KErrNone || err != KErrNone ) + { + // no use to go on with other profiles if the tone can not be + // assigned as an alert tone: + break; + } + } + } + + if( r == KErrPermissionDenied ) + { + // Unprotected DRM tone case + ShowErrorNoteL( *iUnprotectedErrorText ); + } + else if( r == KErrArgument ) + { + // WMA case + ShowErrorNoteL( *iWMAErrorText ); + } + else if( r != KErrNone ) + { + User::Leave( r ); + } + + if ( err == KErrArgument ) + { + // MP4 case + ShowErrorNoteL( *iMP4ErrorText ); + } + + if( ( err == KErrNone ) && ( r == KErrNone ) && ( count > 0 ) ) + { + CAknConfirmationNote* note = new( ELeave ) CAknConfirmationNote( EFalse ); + if( remote ) + { + note->ExecuteLD( iCopiedAndChangedText->Des() ); + } + else + { + note->ExecuteLD( iChangedProfilesText->Des() ); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::LaunchL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::LaunchL( const TDesC& aPopupTitle, + const TDesC& aFileName ) + { + // create listbox + // list item string format: "0\tLabel" where 0 is an index to icon array + CEikFormattedCellListBox* listBox = + new ( ELeave ) CAknSingleGraphicPopupMenuStyleListBox; + CleanupStack::PushL( listBox ); + + // create popup + CPapPopupList* popup = CPapPopupList::NewL( listBox, + R_AVKON_SOFTKEYS_OK_CANCEL__UNMARK ); + CleanupStack::PushL( popup ); + popup->SetTitleL( aPopupTitle ); + +#ifdef RD_SCALABLE_UI_V2 + if( AknLayoutUtils::PenEnabled() ) + { + listBox->ConstructL( popup, EAknListBoxStylusMultiselectionList ); + } + else + { + listBox->ConstructL( popup, EAknListBoxMultiselectionList ); + } +#else + listBox->ConstructL( popup, EAknListBoxMultiselectionList ); +#endif + + listBox->CreateScrollBarFrameL(ETrue); + listBox->ScrollBarFrame()-> + SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + + popup->SetIconsL(); + + // create model + CDesCArrayFlat* items = new (ELeave)CDesCArrayFlat( KArrayGranularity ); + + // populate model + CleanupStack::PushL(items); + CProfileAiwProvider::PopulateListBoxL( items ); + CleanupStack::Pop(items); + + CTextListBoxModel* model = listBox->Model(); + model->SetItemTextArray(items); + + // set all items as selected + TInt count( listBox->Model()->NumberOfItems() ); + for( TInt index( 0 ); index < count; index++ ) + { + listBox->View()->SelectItemL( index ); + } + + TBool changeAllProfiles( EFalse ); + + // launch popup + iPopup = popup; + TInt res = popup->ExecuteLD(); + // No leaving functions allowed between executeLD and CleanupStack::Pop(). + CleanupStack::Pop( popup ); + iPopup = NULL; + + if( res ) + { + iSelectionArray = listBox->View()->SelectionIndexes(); + if( count == iSelectionArray->Count() ) + { + // User has selected to change all profiles + changeAllProfiles = ETrue; + } + CProfileAiwProvider::PerformProfileChangeL( aFileName, changeAllProfiles ); + } + CleanupStack::PopAndDestroy(); // listBox + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::PopulateListBoxL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::PopulateListBoxL( CDesCArrayFlat* aItems ) + { + // iEngineHandler must be instantiated each time to make sure + // profile list is up to date + delete iEngineHandler; + iEngineHandler = NULL; + iEngineHandler = CProfileEngineHandler::NewL(); + + MProfilesNamesArray* array = iEngineHandler->IdArray(); + MProfileEngineExtended* engine = iEngineHandler->Engine(); + + // Create the mapping array so that the IDs can be mapped to Profile IDs + // after the selection has been made + // Delete it first in case we're called several times (in the same instance) + delete iIndexToIdArray; + iIndexToIdArray = NULL; + iIndexToIdArray = new ( ELeave ) CArrayFixFlat( array->MdcaCount() ); + + // Add items + TInt count( array->MdcaCount() ); + TBuf name; // + 3 for icon and tab characters + for( TInt index( 0 ); index < count; index++ ) + { + const MProfileName* profileName = array->ProfileName( index ); + if( !profileName ) + { + continue; + } + + TInt profileId( profileName->Id() ); + // Only the profiles which modifiable flag of ringing tone item is + // enabled should be included in the list. In Off-line profile case also + // VoIP and WLAN must be supported (otherwise there wouldn't be need for + // ringing tone in Off-line profile) + if( ( profileId != EProfileOffLineId ) || + ( FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) && + FeatureManager::FeatureSupported( KFeatureIdProtocolWlan ) ) ) + { + MProfileExtended* profile( engine->ProfileLC( profileId ) ); + TUint32 modFlags( profile->ModifiableFlags() ); + CleanupStack::PopAndDestroy(); // profile + // Only the profiles which ringing tone item is modifiable should + // be included in the list + if( modFlags & EProfileFlagRingingTone ) + { + name.Copy( KProfileAIWProviderIconAndTab ); + TBuf< KProfileAiwProviderMaxNameLength > + tmpName( array->MdcaPoint( index ) ); + AknTextUtils::ReplaceCharacters( tmpName, + KAknReplaceListControlChars, + TChar( ' ' ) ); + name.Append( tmpName ); + aItems->AppendL( name ); + iIndexToIdArray->AppendL( profileId ); + } + } + } + iIndexToIdArray->Compress(); + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::InitializeMenuPaneL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::InitializeMenuPaneL( CAiwMenuPane& aMenuPane, + TInt aIndex, + TInt /*aCascadeId*/, + const CAiwGenericParamList& aInParamList ) + { + TResourceReader reader; + CCoeEnv::Static()->CreateResourceReaderLC( reader, + R_PROFILEAIWPROVIDER_MENU ); + + // Retrieve filename and file MIME type from AIW param list + TPtrC mimeTypeString = CProfileAiwProvider::GetAiwParamAsDescriptor + (aInParamList, EGenericParamMIMEType); + + if( CProfileAiwProvider::CheckMimeTypeL( mimeTypeString ) ) + { + // Only add menuitem if MIME type is valid + aMenuPane.AddMenuItemsL( reader, KAiwCmdAssign, aIndex ); + } + + CleanupStack::PopAndDestroy(); // reader + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::HandleMenuCmdL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::HandleMenuCmdL( TInt aMenuCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& aOutParamList, + TUint aCmdOptions, + const MAiwNotifyCallback* aCallback ) + { + // Route to HandleServiceCmdL + HandleServiceCmdL(aMenuCmdId, aInParamList, + aOutParamList, aCmdOptions, aCallback); + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::GetAiwParamAsDescriptor +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TPtrC CProfileAiwProvider::GetAiwParamAsDescriptor( + const CAiwGenericParamList& aParamList, + TGenericParamId aParamType) + { + TInt index = 0; + const TAiwGenericParam* genericParam = NULL; + genericParam = aParamList.FindFirst( + index, + aParamType, + EVariantTypeDesC); + + if (index >= 0 && genericParam) + { + // Get the data + return genericParam->Value().AsDes(); + } + else + { + return KNullDesC(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::CheckMimeTypeL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CProfileAiwProvider::CheckMimeTypeL(const TDesC& aMimeTypeString) + { + if( ( aMimeTypeString.MatchF( KAudioCommonMimeType ) == 0 ) || + ( aMimeTypeString.CompareF( KAudioRngMimeType ) == 0 ) ) + { + iIsVideo = EFalse; + return ETrue; + } + +#ifdef RD_VIDEO_AS_RINGING_TONE + if( aMimeTypeString.MatchF( KVideoCommonMimeType ) == 0 || + aMimeTypeString.CompareF( KRMVideoMimeType ) == 0 || + aMimeTypeString.CompareF( KRMVideoMimeType2 ) == 0 || + aMimeTypeString.CompareF( KSDPVideoMimeType ) == 0 ) + { + iIsVideo = ETrue; + return ETrue; + } +#endif + + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::IsToneFileSizeOkL +// ----------------------------------------------------------------------------- +// +TBool CProfileAiwProvider::IsToneFileSizeOkL( const TDesC& aFile ) + { + if( !iMaxSize ) + { // no limit set -> every tone will be ok (what comes to size): + return ETrue; + } + + // Get file size + TInt size = 0; + TBool result( ETrue ); + + TEntry entry; + if ( CCoeEnv::Static()->FsSession().Entry( aFile, entry ) == KErrNone ) + { + size = entry.iSize; + } + + // Check. NOTE: now if file size couldn't be determined, check fails. + if ( size > (iMaxSize*KKilo) ) + { + result = EFalse; + } + + return result; + } + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::ShowErrorNoteL +// ----------------------------------------------------------------------------- +// +void CProfileAiwProvider::ShowErrorNoteL( const TDesC& aErrorText ) const + { + CAknInformationNote* note = new( ELeave ) CAknInformationNote( EFalse ); + note->ExecuteLD( aErrorText ); + } + + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::CopyIfRemoteL +// ----------------------------------------------------------------------------- +// +TBool CProfileAiwProvider::CopyIfRemoteL( const TDesC& aFileName, TFileName& aTarget ) const + { + TBool remote( EFalse ); + TParsePtrC parsedName( aFileName ); + RFs& fsSession( CCoeEnv::Static()->FsSession() ); + TDriveUnit driveUnit( parsedName.Drive() ); + TUint driveStatus( 0 ); + + DriveInfo::GetDriveStatus( fsSession, driveUnit, driveStatus ); + remote = ( ( driveStatus & DriveInfo::EDriveRemote ) == DriveInfo::EDriveRemote ); + + if( remote ) + { + // If the tone is on a remote drive, it must be copied + aTarget.Insert( 0, parsedName.NameAndExt() ); + if( iIsVideo ) + { + aTarget.Insert( 0, PathInfo::VideosPath() ); + } + else + { + aTarget.Insert( 0, PathInfo::SoundsPath() ); + } + aTarget.Insert( 0, PathInfo::PhoneMemoryRootPath() ); + User::LeaveIfError( EikFileUtils::CopyFile( aFileName, aTarget ) ); + } + + return remote; + } + + +// ----------------------------------------------------------------------------- +// +// Functions related to WMDRM protection check +// +// ----------------------------------------------------------------------------- + +#ifndef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM + +// Some magic constants +static const TInt KMinContentLength( 16 ); +//_LIT8( KContentProtectionType, "DRM" ); +_LIT8( KASFHeaderObject, "75B22630668E11CFA6D900AA0062CE6C" ); +_LIT8( KWrmHeader, "W\0R\0M\0H\0E\0A\0D\0E\0R\0" ); + + +// ----------------------------------------------------------------------------- +// FormatGUID +// ----------------------------------------------------------------------------- +// +LOCAL_C void FormatGUID( TDes8& aGUID ) + { + TBuf8<16> copyGUID( aGUID ); + TInt i; + for( i = 0; i < 4; i++ ) + { + copyGUID[i] = aGUID[3-i]; + } + for( i = 4; i < 6; i++ ) + { + copyGUID[i] = aGUID[9 - i]; + } + for( i = 6; i < 8; i++ ) + { + copyGUID[i] = aGUID[13 - i]; + } + for( i = 8; i < 16 ; i++ ) + { + copyGUID[i] = aGUID[i]; + } + aGUID.Delete( 0, 32 ); + for( i = 0; i <16; i++ ) + { + aGUID.AppendNumFixedWidthUC( copyGUID[i], EHex, 2 ); + } + } + +// ----------------------------------------------------------------------------- +// ConvertToInt64 +// ----------------------------------------------------------------------------- +// +LOCAL_C TInt64 ConvertToInt64( TDesC8& aDes ) + { + TInt64 num = 0; + TInt i; + for( i = 7 ; i >= 0; i-- ) + { + num <<= 8; + num |= aDes[i]; + } + return num; + } + + +// ----------------------------------------------------------------------------- +// IsProtectedWmDrmL +// returns ETrue, if file is protected WMDRM file +// EFalse if file is not protected WMDRM file +// Leaves with KErrUnderflow if file has too little data to decide +// whether WmDrm or not +// may also leave with other system wide error code +// ----------------------------------------------------------------------------- +// +LOCAL_C TBool IsProtectedWmDrmL( RFile& aFileHandle ) + { + TInt r( KErrNone ); + HBufC8* buffer( NULL ); + TInt pos( 0 ); + RFile file; + TBuf8< 32 > header; + + TInt64 headerSize( 0 ); + TBool isProtectedWmDrm( EFalse ); + TPtr8 headerPtr( NULL, 0 ); + + // Leave if given handle is invalid + if( !aFileHandle.SubSessionHandle() ) + { + User::Leave( KErrBadHandle ); + } + + User::LeaveIfError( file.Duplicate( aFileHandle ) ); + CleanupClosePushL( file ); + + User::LeaveIfError( file.Seek( ESeekStart, pos ) ); + + // Check if the file is an ASF file + // : Check on runtime wether WM DRM is supporeted or not + + User::LeaveIfError( file.Read( 0, header, KMinContentLength ) ); + if( header.Length() < KMinContentLength ) + { + User::Leave( KErrUnderflow ); + } + + FormatGUID( header ); + + if( header == KASFHeaderObject ) + { + // It's ASF, check still whether it's WM DRM protected or not + file.Read( header,8 ); + headerSize = ConvertToInt64( header ); + if( headerSize <= 30 ) + { + User::Leave( KErrUnderflow ); + } + if ( headerSize > ( ( KMaxTInt32 / 2 ) - 1 ) ) + { + User::Leave( KErrOverflow ); + } + buffer = HBufC8::NewLC( headerSize ); + + headerPtr.Set( buffer->Des() ); + User::LeaveIfError( file.Read( headerPtr, headerSize - 24 ) ); + + r = headerPtr.Find( KWrmHeader ); + if ( KErrNotFound != r ) + { + isProtectedWmDrm = ETrue; + } + CleanupStack::PopAndDestroy( buffer ); // buffer + } + CleanupStack::PopAndDestroy(); // file + + return isProtectedWmDrm; + } + +#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM + +// ----------------------------------------------------------------------------- +// CProfileAiwProvider::IsFileWMDRMProtectedL +// ----------------------------------------------------------------------------- +// +TBool CProfileAiwProvider::IsFileWMDRMProtectedL( const TDesC& aFileName ) const + { + TBool res = EFalse; + RFs& fsSession( CCoeEnv::Static()->FsSession() ); + RFile hFile; + + TInt err = hFile.Open( fsSession, aFileName, + EFileRead | EFileStream | EFileShareReadersOnly ); + if( err == KErrInUse ) + { + err = hFile.Open( fsSession, aFileName, + EFileRead | EFileStream | EFileShareAny ); + } + if( err != KErrNone ) + { + User::Leave( err ); + } + CleanupClosePushL( hFile ); + +#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM + TPtrC agent( KNullDesC ); + DRM::CDrmUtility* drmUtil( DRM::CDrmUtility::NewLC() ); + drmUtil->GetAgentL( hFile, agent ); + if( agent.Compare( DRM::KDrmWMAgentName ) == 0 ) + { + res = ETrue; + } + CleanupStack::PopAndDestroy( drmUtil ); +#else + res = IsProtectedWmDrmL( hFile ); +#endif + + CleanupStack::PopAndDestroy( &hFile ); + return res; + } + + +// ----------------------------------------------------------------------------- +// +// End of Functions related to WMDRM protection check +// +// ----------------------------------------------------------------------------- + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/src/CProfileAiwProvider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/src/CProfileAiwProvider.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2002-2004 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: Profile Aiw service provider. +* +*/ + + +#ifndef __CPROFILEAIWPROVIDER_H__ +#define __CPROFILEAIWPROVIDER_H__ + +// INTERNAL INCLUDES + +// EXTERNAL INCLUDES +#include + +// FORWARD DECLARATIONS +class CProfileToneHandler; +class CProfileEngineHandler; +class CAknPopupList; + +// CLASS DECLARATION + +/** +* Profiles AIW Provider +* AIW Provider for seting files as ringingtone +* +* @lib ProfileSettingsView.lib +* @since 3.1 +*/ + +NONSHARABLE_CLASS( CProfileAiwProvider ) + : public CAiwServiceIfMenu + { + public: // Constructors and destructors + + /** + * Two-phase static constructor + * @return A pointer to a fully constructed CProfileAiwProvider instance + */ + static CProfileAiwProvider* NewL(); + + /** + * Destructor + */ + virtual ~CProfileAiwProvider(); + + private: // From CAiwServiceIfMenu + + void InitialiseL( MAiwNotifyCallback& aFrameworkCallback, + const RCriteriaArray& aInterest ); + + void HandleServiceCmdL( const TInt& aCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MAiwNotifyCallback* aCallback = NULL ); + + void InitializeMenuPaneL( CAiwMenuPane& aMenuPane, + TInt aIndex, + TInt aCascadeId, + const CAiwGenericParamList& aInParamList ); + + void HandleMenuCmdL( TInt aMenuCmdId, + const CAiwGenericParamList& aInParamList, + CAiwGenericParamList& aOutParamList, + TUint aCmdOptions = 0, + const MAiwNotifyCallback* aCallback = NULL ); + + private: // Constructors and destructors + + /** + * Constructor + */ + CProfileAiwProvider(); + + /** + * Second phase constructor + */ + void ConstructL(); + + private: // New functions + + /* + * Reads AIW parameters + * @param aParamList Generic parameterlist + * @param aParamType Generic parameterID + * @return Parameter in text form + */ + TPtrC GetAiwParamAsDescriptor( + const CAiwGenericParamList& aParamList, + TGenericParamId aParamType); + /* + * Checks MIME type + * @param aMimeTypeString MIME type to be checked + * @return Returns ETrue if MIME type is valid ( audio or video ) + */ + TBool CheckMimeTypeL(const TDesC& aMimeTypeString); + + /* + * Launches multiselection popup listbox containing profile names + * @param aPopupTitle Listbox title + * @param aFilename Filename to be assigned as ringing tone + */ + void LaunchL( const TDesC& aPopupTitle, const TDesC& aFileName ); + /* + * Populates listbox + * @param aItems Pointer to constructed listbox item array + */ + void PopulateListBoxL( CDesCArrayFlat* aItems ); + /* + * Performs the setting of ringing tone through ProfileSettingsView API + * @param aFileName Filename to be assigned as ringing tone + * @param aChangeAllProfiles Boolean value defines whether all + * profiles are changed + */ + void PerformProfileChangeL( + const TDesC& aFileName, const TBool& aChangeAllProfiles ) const; + + /** + * Checks that the size of the tone file does not exceed the set limit + * (if one has been set). + * @param aFileName the name of the file to be assigned as ringing tone + * @return ETrue if the size of the file does not rule the file out to + * be set as ringing tone + */ + TBool IsToneFileSizeOkL( const TDesC& aFile ); + + /** + * Displays an error note. + * @param aResourceId Resource ID to a TBUF resource. + */ + void ShowErrorNoteL( const TDesC& aErrorText ) const; + + /** + * Checks if file is WMDRM protected. + * @param aFileName Name of the file to be checked. + * @return ETrue if file is WMDRM protected, EFalse otherwise. + */ + TBool IsFileWMDRMProtectedL( const TDesC& aFileName ) const; + + /** + * Checks if file is located on a remote drive and copies it if so. + * @param aFileName Name of the file to be checked/copied. + * @param aTarget File name on device after copying. + * @return ETrue if file is remote, EFalse otherwise. + */ + TBool CopyIfRemoteL( const TDesC& aFileName, TFileName& aTarget ) const; + + private: // Data + + /// Own: Profile tone handler + CProfileToneHandler* iProfileToneHandler; + + /// Own: Engine handler. + CProfileEngineHandler* iEngineHandler; + + /// Ref: AIWCallback + MAiwNotifyCallback* iConstNotifyCallback; + + /// Own: WMA Error text + HBufC* iWMAErrorText; + + /// Own: MP4 Error text + HBufC* iMP4ErrorText; + + /// Own: Unprotected Error text + HBufC* iUnprotectedErrorText; + + /// Own: Not supported Error text + HBufC* iNotSupportedErrorText; + + /// Own: Popup + CAknPopupList* iPopup; + + /// Own: Popup title text + HBufC* iPopupTitle; + + /// Own: Changed profile information text + HBufC* iChangedProfilesText; + + /// Own: File was copied and set + HBufC* iCopiedAndChangedText; + + /// Own: Tone file size too big error text + HBufC* iSizeErrorText; + + /// Own: ListBox selection array + const CArrayFix* iSelectionArray; + + /// Own: Array for mapping of original indexes in Profile name array + /// to Profile IDs + CArrayFixFlat* iIndexToIdArray; + + /// Resource offset + TInt iResourceOffset; + + /// Maximum allowed size for tone files: + TInt iMaxSize; + + /// Is file video: + TBool iIsVideo; + + }; + +#endif // __CPROFILEAIWPROVIDER_H__ diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileAiwProvider/src/Dllmain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileAiwProvider/src/Dllmain.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,39 @@ +/* +* Copyright (c) 2002-2004 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: The Aiw application gets instantiated starting from this class. +* +*/ + + +// INTERNAL INCLUDES +#include "ProfileAiwProviderUid.h" +#include "CProfileAiwProvider.h" + +// EXTERNAL INCLUDES +#include +#include + +// Define the interface UIDs +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( KProfileAiwProviderImplUid, CProfileAiwProvider::NewL ) + }; + +// The one and only exported function that is the ECom entry point +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); + + return ImplementationTable; + } diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/BWINS/PROFILESETTINGSVIEWU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/BWINS/PROFILESETTINGSVIEWU.DEF Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,27 @@ +EXPORTS + ?AllowedToChange@CProfileSettingsContainer@@QBEHH@Z @ 1 NONAME ; int CProfileSettingsContainer::AllowedToChange(int) const + ?CurrentProfileIndex@CProfileIndexHandler@@QBEHXZ @ 2 NONAME ; int CProfileIndexHandler::CurrentProfileIndex(void) const + ?EditItemL@CProfileSettingsContainer@@UAEXHH@Z @ 3 NONAME ; void CProfileSettingsContainer::EditItemL(int, int) + ?Engine@CProfileEngineHandler@@QBEPAVMProfileEngineExtended@@XZ @ 4 NONAME ; class MProfileEngineExtended * CProfileEngineHandler::Engine(void) const + ?IdArray@CProfileEngineHandler@@QBEPAVMProfilesNamesArray@@XZ @ 5 NONAME ; class MProfilesNamesArray * CProfileEngineHandler::IdArray(void) const + ?IdForIndex@CProfileEngineHandler@@QBEHH@Z @ 6 NONAME ; int CProfileEngineHandler::IdForIndex(int) const + ?NewL@CProfileEngineHandler@@SAPAV1@XZ @ 7 NONAME ; class CProfileEngineHandler * CProfileEngineHandler::NewL(void) + ?NewL@CProfileIndexHandler@@SAPAV1@AAVCProfileEngineHandler@@@Z @ 8 NONAME ; class CProfileIndexHandler * CProfileIndexHandler::NewL(class CProfileEngineHandler &) + ?NewL@CProfileSettingsContainer@@SAPAV1@AAVCAknView@@AAVCProfileEngineHandler@@PAVCProfileIndexHandler@@PAVCProfileTabHandler@@PAVCAknTitlePane@@@Z @ 9 NONAME ; class CProfileSettingsContainer * CProfileSettingsContainer::NewL(class CAknView &, class CProfileEngineHandler &, class CProfileIndexHandler *, class CProfileTabHandler *, class CAknTitlePane *) + ?NewL@CProfileTabHandler@@SAPAV1@AAVCProfileEngineHandler@@AAVCProfileIndexHandler@@AAVCAknNavigationControlContainer@@@Z @ 10 NONAME ; class CProfileTabHandler * CProfileTabHandler::NewL(class CProfileEngineHandler &, class CProfileIndexHandler &, class CAknNavigationControlContainer &) + ?NewL@CProfileToneHandler@@SAPAV1@XZ @ 11 NONAME ; class CProfileToneHandler * CProfileToneHandler::NewL(void) + ?NewLC@CProfileToneHandler@@SAPAV1@XZ @ 12 NONAME ; class CProfileToneHandler * CProfileToneHandler::NewLC(void) + ?ReadIdArrayL@CProfileEngineHandler@@QAEXXZ @ 13 NONAME ; void CProfileEngineHandler::ReadIdArrayL(void) + ?SetActiveProfileRingingToneL@CProfileToneHandler@@QAEHABVTDesC16@@@Z @ 14 NONAME ; int CProfileToneHandler::SetActiveProfileRingingToneL(class TDesC16 const &) + ?SetCurrentProfileIndex@CProfileIndexHandler@@QAEXH@Z @ 15 NONAME ; void CProfileIndexHandler::SetCurrentProfileIndex(int) + ?SetProfileToneL@CProfileToneHandler@@QAEHHW4TProfileTones@@ABVTDesC16@@@Z @ 16 NONAME ; int CProfileToneHandler::SetProfileToneL(int, enum TProfileTones, class TDesC16 const &) + ?SetToneForAllProfilesL@CProfileToneHandler@@QAEHW4TProfileTones@@ABVTDesC16@@@Z @ 17 NONAME ; int CProfileToneHandler::SetToneForAllProfilesL(enum TProfileTones, class TDesC16 const &) + ?TabGroup@CProfileTabHandler@@QBEPAVCAknTabGroup@@XZ @ 18 NONAME ; class CAknTabGroup * CProfileTabHandler::TabGroup(void) const + ?NewL@CProfileSettingsContainer@@SAPAV1@AAVMProfileViewHandler@@AAVCProfileEngineHandler@@AAVMProfileExternalSettingsHandler@@PAVCProfileIndexHandler@@PAVCProfileTabHandler@@PAVCAknTitlePane@@@Z @ 19 NONAME ; class CProfileSettingsContainer * CProfileSettingsContainer::NewL(class MProfileViewHandler &, class CProfileEngineHandler &, class MProfileExternalSettingsHandler &, class CProfileIndexHandler *, class CProfileTabHandler *, class CAknTitlePane *) + ?NewL@CProfileSettingsContainer@@SAPAV1@AAVMProfileViewHandler@@AAVCProfileEngineHandler@@AAVMProfileExternalSettingsHandler@@PAVCProfileIndexHandler@@PAVCProfileTabHandler@@PAVCAknTitlePane@@H@Z @ 20 NONAME ; class CProfileSettingsContainer * CProfileSettingsContainer::NewL(class MProfileViewHandler &, class CProfileEngineHandler &, class MProfileExternalSettingsHandler &, class CProfileIndexHandler *, class CProfileTabHandler *, class CAknTitlePane *, int) + ?ItemEdited@CProfileSettingsContainer@@QBEHXZ @ 21 NONAME ; int CProfileSettingsContainer::ItemEdited(void) const + ?SetProfileToneNotCheckL@CProfileToneHandler@@QAEHHW4TProfileTones@@ABVTDesC16@@@Z @ 22 NONAME ; int CProfileToneHandler::SetProfileToneNotCheckL(int, enum TProfileTones, class TDesC16 const &) + ?SetNaviPaneTextL@CProfileNaviPaneContainer@@QAEXABVTDesC16@@@Z @ 23 NONAME ; void CProfileNaviPaneContainer::SetNaviPaneTextL(class TDesC16 const &) + ?SetNaviPaneTextL@CProfileNaviPaneContainer@@QAEXXZ @ 24 NONAME ; void CProfileNaviPaneContainer::SetNaviPaneTextL(void) + ?NewL@CProfileNaviPaneContainer@@SAPAV1@AAVCEikStatusPane@@AAVCProfileEngineHandler@@@Z @ 25 NONAME ; class CProfileNaviPaneContainer * CProfileNaviPaneContainer::NewL(class CEikStatusPane &, class CProfileEngineHandler &) + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/EABI/ProfileSettingsViewU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/EABI/ProfileSettingsViewU.DEF Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,39 @@ +EXPORTS + _ZN18CProfileTabHandler4NewLER21CProfileEngineHandlerR20CProfileIndexHandlerR30CAknNavigationControlContainer @ 1 NONAME + _ZN19CProfileToneHandler15SetProfileToneLEi13TProfileTonesRK7TDesC16 @ 2 NONAME + _ZN19CProfileToneHandler22SetToneForAllProfilesLE13TProfileTonesRK7TDesC16 @ 3 NONAME + _ZN19CProfileToneHandler28SetActiveProfileRingingToneLERK7TDesC16 @ 4 NONAME + _ZN19CProfileToneHandler4NewLEv @ 5 NONAME + _ZN19CProfileToneHandler5NewLCEv @ 6 NONAME + _ZN20CProfileIndexHandler22SetCurrentProfileIndexEi @ 7 NONAME + _ZN20CProfileIndexHandler4NewLER21CProfileEngineHandler @ 8 NONAME + _ZN21CProfileEngineHandler12ReadIdArrayLEv @ 9 NONAME + _ZN21CProfileEngineHandler4NewLEv @ 10 NONAME + _ZN25CProfileSettingsContainer4NewLER8CAknViewR21CProfileEngineHandlerP20CProfileIndexHandlerP18CProfileTabHandlerP13CAknTitlePane @ 11 NONAME + _ZN25CProfileSettingsContainer9EditItemLEii @ 12 NONAME + _ZNK18CProfileTabHandler8TabGroupEv @ 13 NONAME + _ZNK20CProfileIndexHandler19CurrentProfileIndexEv @ 14 NONAME + _ZNK21CProfileEngineHandler10IdForIndexEi @ 15 NONAME + _ZNK21CProfileEngineHandler6EngineEv @ 16 NONAME + _ZNK21CProfileEngineHandler7IdArrayEv @ 17 NONAME + _ZNK25CProfileSettingsContainer15AllowedToChangeEi @ 18 NONAME + _ZTI18CProfileTabHandler @ 19 NONAME ; ## + _ZTI19CProfileToneHandler @ 20 NONAME ; ## + _ZTI20CProfileIndexHandler @ 21 NONAME ; ## + _ZTI21CProfileEngineHandler @ 22 NONAME ; ## + _ZTI25CProfileSettingsContainer @ 23 NONAME ; ## + _ZTI31CProfileKeypadVolumeSettingPage @ 24 NONAME ; ## + _ZTV18CProfileTabHandler @ 25 NONAME ; ## + _ZTV19CProfileToneHandler @ 26 NONAME ; ## + _ZTV20CProfileIndexHandler @ 27 NONAME ; ## + _ZTV21CProfileEngineHandler @ 28 NONAME ; ## + _ZTV25CProfileSettingsContainer @ 29 NONAME ; ## + _ZTV31CProfileKeypadVolumeSettingPage @ 30 NONAME ; ## + _ZN25CProfileSettingsContainer4NewLER19MProfileViewHandlerR21CProfileEngineHandlerR31MProfileExternalSettingsHandlerP20CProfileIndexHandlerP18CProfileTabHandlerP13CAknTitlePane @ 31 NONAME + _ZN25CProfileSettingsContainer4NewLER19MProfileViewHandlerR21CProfileEngineHandlerR31MProfileExternalSettingsHandlerP20CProfileIndexHandlerP18CProfileTabHandlerP13CAknTitlePanei @ 32 NONAME + _ZNK25CProfileSettingsContainer10ItemEditedEv @ 33 NONAME + _ZN19CProfileToneHandler23SetProfileToneNotCheckLEi13TProfileTonesRK7TDesC16 @ 34 NONAME + _ZN25CProfileNaviPaneContainer16SetNaviPaneTextLERK7TDesC16 @ 35 NONAME + _ZN25CProfileNaviPaneContainer16SetNaviPaneTextLEv @ 36 NONAME + _ZN25CProfileNaviPaneContainer4NewLER14CEikStatusPaneR21CProfileEngineHandler @ 37 NONAME + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileEngineHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileEngineHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2002 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: Profile engine handler +* +*/ + + + +#ifndef CPROFILEENGINEHANDLER_H +#define CPROFILEENGINEHANDLER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class MProfileEngineExtended; +class MProfilesNamesArray; + +// CLASS DECLARATION + +/** +* Profile Engine Handler. +* Keeps an instance of Profile Engine and maintains a list of profile names. +* +* @lib ProfileSettingsView.lib +* @since 2.5 +*/ +class CProfileEngineHandler : public CBase + { + public: // Constructors and destructor + + /** + * Symbian 2-phase constructor. + * @return Returns an instance of CProfileEngineHandler. + */ + IMPORT_C static CProfileEngineHandler* NewL(); + + // Destructor. + ~CProfileEngineHandler(); + + public: // New methods + + /** + * Returns pointer to Profile Engine extended interface. + * @return Returns pointer to Profile Engine extended interface. + */ + IMPORT_C MProfileEngineExtended* Engine() const; + + /** + * Reads an array of profile IDs from Profile Engine. + */ + IMPORT_C void ReadIdArrayL(); + + /** + * Returns an array of profile names and IDs. + * @return Returns an array of profile names and IDs. + */ + IMPORT_C MProfilesNamesArray* IdArray() const; + + /** + * Returns the ID of a profile at index in iProfileIdArray + * @param aIndex Index of the profile. + * @return Returns ID of the profile. + */ + IMPORT_C TInt IdForIndex( TInt aIndex ) const; + + protected: + + // C++ default constructor. + CProfileEngineHandler(); + + // Symbian 2nd phase construct. + void ConstructL(); + + private: // Data + + // Own: Profile engine extended instance. + MProfileEngineExtended* iEngine; + + // Own: Array of profile names and IDs. + MProfilesNamesArray* iIdArray; + + }; + +#endif // CPROFILEENGINEHANDLER_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileIndexHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileIndexHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 2002 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: Profile index handler (for use of Settings Container +* if multiple profiles are edited) +* +*/ + + +#ifndef CPROFILEINDEXHANDLER_H +#define CPROFILEINDEXHANDLER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CProfileEngineHandler; +class CEikListBox; + +// CLASS DECLARATION + +/** +* Profile index handler. +* For use of Settings Container if multiple profiles are edited. +* +* @lib ProfileSettingsView.lib +* @since 2.5 +*/ +class CProfileIndexHandler : public CBase + { + public: + + /** + * Symbian 2-phase constructor. + * @param aEngineHandler An instance of Engine Handler. + * @return Returns an instance of CProfileIndexHandler. + */ + IMPORT_C static CProfileIndexHandler* NewL( + CProfileEngineHandler& aEngineHandler ); + + // Destructor + ~CProfileIndexHandler(); + + public: // New methods + + /** + * Returns the index of current profile. + * @return Returns the index of current profile. + */ + IMPORT_C TInt CurrentProfileIndex() const; + + /** + * Sets the index of current profile. + * @param aIndex The index of the new current profile. + */ + IMPORT_C void SetCurrentProfileIndex( TInt aIndex ); + + /** + * Creates the index array. + */ + void CreateIndexArrayL(); + + /** + * Stores current indices (top item index and current item index). + */ + void StoreIndices(); + + /** + * Loads previous indices. + */ + void LoadIndices(); + + /** + * Indexes the index array. + * @param aIndex Index of the item index. + * @return Returns item index at index. + */ + TInt IndexAt( TInt aIndex ) const; + + /** + * Indexes the top index array. + * @param aIndex Index of the top item index. + * @return Returns top item index at index. + */ + TInt TopIndexAt( TInt aIndex ) const; + + /** + * Removes items from the index arrays and inserts a new ones. + * @param aOldIndex Index of the old items to be removed. + * @param aNewIndex Index of the new items to be added. + * @param aIndexValue Value of the new item index. + * @param aTopIndexValue Value of the new top item index. + * @return Returns KErrNotFound if the old index is not found, + * KErrArgument if the new index is out of bounds, + * KErrNone if no errors. + */ + TInt RemoveAndInsert( + TInt aOldIndex, TInt aNewIndex, + TInt aIndexValue, TInt aTopIndexValue ); + + /** + * Sets a list box pointer so indices can be stored and loaded. + * @param aListBox The List box pointer. + * Remember to set back to NULL when listbox is deleted! + */ + void SetListBox( CEikListBox* aListBox ); + + /** + * Calls Engine Handler's ReadIdArrayL and re-arranges index array. + * @return Returns the index of the edited profile after re-arrange. + */ + TInt ReadIdArrayAndUpdateL(); + + protected: + + /** + * C++ constuctor. + * @param aEngineHandler An instance of Engine Handler. + */ + CProfileIndexHandler( + CProfileEngineHandler& aEngineHandler ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // Profile Engine handler. + CProfileEngineHandler& iEngineHandler; + + // Index of the currently focused profile. + TInt iCurrentProfileIndex; + + // Ref: Listbox pointer to load and store top item and current item indices. + CEikListBox* iListBox; + + // Struct for one index + struct TItem + { + // Current item index in listbox + TInt iIndex; + // Top item index in listbox + // Value 0 means that the focused item is the first in view, + // 1 means that it's the second and 2 the last. + TInt iTopIndex; + }; + + // Array of item indices. + RArray iIndexArray; + + }; + +#endif // CPROFILEINDEXHANDLER_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileNaviPaneContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileNaviPaneContainer.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2002 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: Container for navi pane decorator. +* +*/ + + + +#ifndef CPROFILENAVIPANECONTAINER_H +#define CPROFILENAVIPANECONTAINER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CEikStatusPane; +class CProfileEngineHandler; +class CAknNavigationControlContainer; +class CAknNavigationDecorator; + +// CLASS DECLARATION +/** +* Container for navi pane decorator. +* +* @lib Profileapp.app +* @since 2.5 +*/ +NONSHARABLE_CLASS( CProfileNaviPaneContainer ) : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aStatusPane An instance of status pane. + * @param aEngineHandler An instance of Engine Handler. + * @return Returns an instance of CProfileNaviPaneContainer + */ + IMPORT_C static CProfileNaviPaneContainer* NewL( + CEikStatusPane& aStatusPane, + CProfileEngineHandler& aEngineHandler ); + + /** + * Destructor. + */ + ~CProfileNaviPaneContainer(); + + public: // New functions + + /** + * Sets navi pane text. + * @param aText Navi pane text. + */ + IMPORT_C void SetNaviPaneTextL( const TDesC& aText ); + + /** + * Sets active profile name as navi pane text. + */ + IMPORT_C void SetNaviPaneTextL(); + + private: + + /** + * C++ constructor. + * @param aEngineHandler An instance of Engine Handler. + */ + CProfileNaviPaneContainer( CProfileEngineHandler& aEngineHandler ); + + /** + * By default Symbian 2nd phase constructor is private. + * @param aStatusPane An instance of status pane. + */ + void ConstructL( CEikStatusPane& aStatusPane ); + + private: // New functions + void Release(); + + private: // Data + + // Profile Engine Handler. + CProfileEngineHandler& iEngineHandler; + + // Ref: Pointer to navi pane + CAknNavigationControlContainer* iNaviPane; + + // Own: Navigation decorator. + CAknNavigationDecorator* iNaviDecorator; + + }; + + +#endif // CPROFILENAVIPANECONTAINER_H + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileSettingsContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileSettingsContainer.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,418 @@ +/* +* Copyright (c) 2002 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: Container class of settings view. +* +*/ + + +#ifndef CPROFILESETTINGSCONTAINER_H +#define CPROFILESETTINGSCONTAINER_H + +// INCLUDES +#include // CAknSettingItemList +#include +#include // RConeResourceLoader +#include // MAknTabObserver +#include +#include "MProfileExternalSettingsObserver.h" +#include "MProfileExternalSettingsHandler.h" +#include +#include + +// FORWARD DECLARATIONS +class MProfileViewHandler; +class CAknTitlePane; +class CProfileEngineHandler; +class CProfileIndexHandler; +class CProfileTabHandler; +class MProfileExtended; +class CProfileStruct; +class CAknKeySoundSystem; +class CProfileChangeNotifyHandler; +class MProfilesLocalFeatures; +class CProfileSettingsView; +class CAknView; +class CRepository; +class CCenRepNotifyHandler; +class CProfileNaviPaneContainer; + +// CLASS DECLARATION +/** +* Container class of settings view. +* Inherited from... +* MSSSettingsObserver +* to receive notifications of changes in Alternate Line Service setting. +* MAknTabObserver +* to receive notifications if tabs are changed. +* MProfileChangeObserver +* to receive notification when the active profile changes. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +class CProfileSettingsContainer : public CAknSettingItemList, + public MSSSettingsObserver, + public MAknTabObserver, + public MProfileChangeObserver, + public MProfileExternalSettingsObserver, + public MCenRepNotifyHandlerCallback + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * Note, this constructor has been deprecated and should not be used. + * @return always NULL. + */ + IMPORT_C static CProfileSettingsContainer* NewL( + CAknView& aAknView, + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane ); + + /** + * Two-phased constructor. + * @param aAknView Parent view to get ClientRect and set MopParent. + * @param aEngineHandler Engine handler to access Profile Engine. + * @param aExternalSettingsHandler handler class for those settings that + * are saved outside of Profiles. + * @param aIndexHandler Index handler for supporting several profiles + * in view functionality. Can be NULL. + * @param aTabHandler Tab handler for supporting tab functionality + * in Settings view. Can be NULL. + * @param aTitlePane Title pane access for setting title pane text. + * Can be NULL. + */ + IMPORT_C static CProfileSettingsContainer* NewL( + MProfileViewHandler& aProfileViewHandler, + CProfileEngineHandler& aEngineHandler, + MProfileExternalSettingsHandler& aExternalSettingsHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane ); + + /** + * Two-phased constructor. + * @param aAknView Parent view to get ClientRect and set MopParent. + * @param aEngineHandler Engine handler to access Profile Engine. + * @param aIndexHandler Index handler for supporting several profiles + * in view functionality. Can be NULL. + * @param aTabHandler Tab handler for supporting tab functionality + * in Settings view. Can be NULL. + * @param aTitlePane Title pane access for setting title pane text. + * Can be NULL. + * @param aResourceId the id of the setting item list resource. + */ + IMPORT_C static CProfileSettingsContainer* NewL( + MProfileViewHandler& aProfileViewHandler, + CProfileEngineHandler& aEngineHandler, + MProfileExternalSettingsHandler& aExternalSettingsHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane, + TInt aResourceId ); + + /** + * Destructor. + */ + ~CProfileSettingsContainer(); + + public: // New functions + + /** + * Tells if information of a setting can be changed. + * If EFalse is returned, EditItemL for the setting item in question + * should not be called and "Change" should be removed from the Options menu. + * @param aSettingItemId The setting item ID. + * @return Returns if information of a setting can be changed. + */ + IMPORT_C TBool AllowedToChange( TInt aSettingItemId ) const; + + /** + * Runs CheckFileExistenceL (by calling DoFileCheckL) + * @param TAny* aObj CProfileSettingContainer pointer + * @return 1 + */ + static TInt StartFileCheckL( TAny* aObj ); + + public: // Functions from base classes + + /** + * From CAknSettingItemList. + */ + IMPORT_C void EditItemL( TInt aIndex, TBool aCalledFromMenu ); + + public: // from MCentRepNotifyHandlerCallback + /** + * @see MCentRepNotifyHandlerCallback. + * @param aId Id of the key that has changed. + * @param aNewValue The new value of the key. + */ + void HandleNotifyInt( + TUint32 aId, TInt aNewValue ); + + protected: // New functions + + /** + * Frees resources allocated for profile data. + * Remember to maintain class state before calling this method! + */ + void ReleaseProfile(); + + /** + * Reads profile data from Profile Engine. + */ + void ReadProfileL(); + + /** + * Hides all setting items that have been set hidden for current profile + * ands sets visible all that aren't. + */ + void SetHiddenFlagsL(); + + /** + * Updates all setting items. + * Called when the changed settings must be updated to the UI. + * @param aReadProfileSettings if this is ETrue, the profile settings are + * read from Profiles Engine. + */ + void UpdateSettingsL( TBool aReadProfileSettings = ETrue ); + + /** + * Creates a setting item for FileListDialog. + * @param aFileName Filename. + * @param aIdentifier Setting item identifier. + * @return Returns the created setting item object. + */ + CAknSettingItem* CreateFileListSettingItemL( + TDes& aFileName, TInt aIdentifier ); + + /** + * Returns the index of a setting item in setting item array. + * @param aId Setting item identifier. + * @return Returns the index of a setting item if found, otherwise + * KErrNotFound. + */ + TInt IndexForId( TInt aId ) const; + + /** + * Sets one setting item hidden. + * @param aId Identifier of the setting item. + * @param aArray Pointer to setting item array. + * @param aHidden Boolean hidden value. + */ + void SetItemHidden( TInt aId, CAknSettingItemArray* aArray, TBool aHidden ); + + /** + * Sets title pane text. + * @param aTitle Title pane text. + * If descriptor has zero length, the application name is used. + */ + void SetTitlePaneTextL( const TDesC& aTitle ); + + /** + * Updates names of profiles in tabs and/or title pane. + */ + void UpdateProfileNamesL(); + + /* + * Launches confirmation dialog + * @param aTitleText Dialog title text + */ + void LaunchDialogL( const TDesC& aTitleText ); + + /* + * Chechks that used tones assigned for settings can be found. + * If tone is not found, user is informed by confirmation dialog + * and tone is replaced with default tone. + */ + void CheckFileExistenceL(); + + /* + * Checks whether settingitem is hidden + * @param aId Identifier of the setting item. + * @param aArray Pointer to setting item array. + * @return Returns ETrue if item is hidden. + */ + TBool IsItemHidden( TInt aId, CAknSettingItemArray* aArray ) const; + + /** + * Runs CheckFileExistenceL + * @param None + * @return None + */ + void DoFileCheckL(); + + protected: // Functions from base classes + + /** + * From CAknSettingItemList + */ + CAknSettingItem* CreateSettingItemL( TInt aIdentifier ); + + /** + * From CCoeControl + */ + void SizeChanged(); + + /** + * From CCoeControl + */ + void GetHelpContext( TCoeHelpContext& aContext ) const; + + /** + * From CCoeControl + */ + void HandleResourceChange(TInt aType); + + /** + * From MEikListBoxObserver + */ + void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ); + + /** + * From MSSSettingsObserver + */ + void PhoneSettingChanged( + TSSSettingsSetting aSetting, + TInt aNewValue ); + + /** + * From MAknTabObserver + */ + void TabChangedL( TInt aIndex ); + + /** + * From MProfileChangeObserver + */ + void HandleActiveProfileEventL( + TProfileEvent aProfileEvent, TInt aProfileId ); + + /** + * From MProfileExternalSettingsObserver + */ + void HandleExternalSettingsChangedL(); + + protected: + + /** + * C++ constructor. + */ + CProfileSettingsContainer( + MProfileViewHandler& aProfileViewHandler, + CProfileEngineHandler& aEngineHandler, + MProfileExternalSettingsHandler& aExternalSettingsHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane ); + + /** + * Symbian 2nd phase constructor. + * @param aRect View rect. + * @param aResourceId the id of the setting item list resource. + */ + void ConstructL( const TRect& aRect, + TInt aResourceId ); + + public: // New functions + + /** + * Is a setting item being edited? + * @return ETrue if a setting is being edited, EFalse otherwise. + */ + IMPORT_C TBool ItemEdited() const; + + private: + TBool PowerSaveMode(); + TBool PowerSaveModeL(); + TBool PowerSaveMode( TInt aSettingId ); + + private: // Data + + // For reading ALS setting and + // for receiving change notifications. + RSSSettings iSSSettings; + + // Own: CR session for KProfilesLVFlags (KProEngFeatureIdTTSRingingTone) + CRepository* iTTSSession; + + /// Own: CR session for KProEngDefaultRingingTone + CRepository* iSession; + + // Resource loader. + RConeResourceLoader iResourceLoader; + + // View handler to get ClientRect and set MopParent. + MProfileViewHandler& iProfileViewHandler; + + // Profile Engine handler. + CProfileEngineHandler& iEngineHandler; + + // Ref: Handler for settings that are saved outside of Profiles: + MProfileExternalSettingsHandler& iExternalSettingsHandler; + + // Ref: Index handler. + CProfileIndexHandler* iIndexHandler; + + // Ref: Tab handler. + CProfileTabHandler* iTabHandler; + + // Ref: Title pane access. + CAknTitlePane* iTitlePane; + + // Own: One profile data + MProfileExtended* iProfile; + + // Own: One profile data. + CProfileStruct* iCopyProfile; + + // Alternate Line Service support. + TBool iAlternateLineService; + + // Own: Avkon key sounds + CAknKeySoundSystem* iKeySounds; + + // Own: Profile change notify handler. + CProfileChangeNotifyHandler* iNotifier; + + // ETrue if an item is currently being edited. + TBool iItemEdited; + + // Not own: locally variated features of Profiles: + MProfilesLocalFeatures* iLocalFeatures; + + /// Own: fileserver session + RFs* iFs; + + /// Default tone + TFileName* iDefaultTone; + + // VoIP supported + TBool iVoIPStatus; + + // A CR and notifier for dynamic VoIP + CRepository* iVoIPVariation; + CCenRepNotifyHandler* iVoIPVariationNotifier; + + /// Timer to run CheckFileExistenceL + CPeriodic* iPeriodic; + + // Navi Pane Container + CProfileNaviPaneContainer* iNaviPaneContainer; + }; + +#endif // CPROFILESETTINGSCONTAINER_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileTabHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/CProfileTabHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,149 @@ +/* +* Copyright (c) 2002 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: Tab handler for handling tabs in Profiles +* +*/ + + +#ifndef CPROFILETABHANDLER_H +#define CPROFILETABHANDLER_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CProfileEngineHandler; +class CProfileIndexHandler; +class CAknNavigationControlContainer; +class CCoeAppUi; +class MCoeView; +class CAknNavigationDecorator; +class CAknTabGroup; + +// CLASS DECLARATION + +/** +* Tab handler class for handling tabs in Profiles +* When instantiated, creates a tab for each profile and puts itself visible. +* Needs an instance of Index handler to handle indices of the profiles. +* Inherited from MAknTabObserver in order to receive events when tabs change. +* That however requires adding the tab group as topmost item in control stack. +* +* @lib CProfileSettingsView.lib +* @since 2.5 +*/ +class CProfileTabHandler : public CBase, + public MAknTabObserver + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aEngineHandler An instance of Engine Handler. + * @param aIndexHandler An instance of Index Handler. + * @param aNaviPane An instance of CAknNavigationControlContainer. + * @return Returns an instance of CProfileTabHandler. + */ + IMPORT_C static CProfileTabHandler* NewL( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknNavigationControlContainer& aNaviPane ); + + // Destructor. + ~CProfileTabHandler(); + + public: // New methods + + /** + * Returns tab group instance to be added to control stack. + * @return Returns tab group instance. + */ + IMPORT_C CAknTabGroup* TabGroup() const; + + /** + * Sets a tab active. + * @param aIndex Index of the tab to be activated. + */ + void SetActiveTab( TInt aIndex ); + + /** + * Refreshes tab texts with profile names. + */ + void RefreshTabsL(); + + /** + * Sets tab observer. + * Tab events are forwarded to the observer if set. + * @param aTabObserver Tab observer. + */ + void SetTabObserver( MAknTabObserver* aTabObserver ); + + protected: // New methods + + /** + * Creates tab group and reads names of profiles to tab texts. + * Separated to own method to enable updating tabs dynamically + * (i.e. supports profiles being added or deleted). + */ + void CreateTabGroupL(); + + protected: // From base classes + + /** + * From MAknTabObserver + */ + void TabChangedL( TInt aIndex ); + + protected: + + /** + * C++ constructor. + * @param aEngineHandler An instance of Engine Handler. + * @param aIndexHandler An instance of Index Handler. + * @param aNaviPane An instance of CAknNavigationControlContainer. + */ + CProfileTabHandler( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknNavigationControlContainer& aNaviPane ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // Profile Engine handler. + CProfileEngineHandler& iEngineHandler; + + // Index handler + CProfileIndexHandler& iIndexHandler; + + // Navi pane. Needed for creating tab group. + CAknNavigationControlContainer& iNaviPane; + + // Own: Navigation decorator. + CAknNavigationDecorator* iNaviDecorator; + + // Ref: Tab group owned by the navigation decorator. + CAknTabGroup* iTabGroup; + + // Ref: Tab observer. Tab events are forwarded to the observer if set. + MAknTabObserver* iTabObserver; + + }; + +#endif // CPROFILETABHANDLER_H diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/MProfileExternalSettingsHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/MProfileExternalSettingsHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,108 @@ +/* +* Copyright (c) 2002 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: Interface for loading/storing the settings outside Profiles +* itself. +* +*/ + + + +#ifndef MPROFILEEXTERNALSETTINGSHANDLER_H +#define MPROFILEEXTERNALSETTINGSHANDLER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CAknSettingItem; +class CAknSettingItemArray; +class MProfileExternalSettingsObserver; +class TCoeHelpContext; +// CLASS DECLARATION + +/** +* Interface for loading/storing the settings outside Profiles itself. +* +* @lib ProfileSettingsView.dll +* @since 3.1 +*/ +class MProfileExternalSettingsHandler + { + + public: // New functions + + /** + * Creates a setting item for a listbox for editing a setting. + * @param aIdentifier identifies the setting to be edited by the item. + * @return a setting item for the given setting, the ownership is + * transferred to the caller. + * @since 3.1 + */ + virtual CAknSettingItem* CreateSettingItemL( TInt aIdentifier ) = 0; + + /** + * Sets an observer for the external settings. + * @param aObserver the observer to be notified when the settings are + * changed. + * @since 3.1 + */ + virtual void SetObserver( + MProfileExternalSettingsObserver& aObserver ) = 0; + + /** + * Check if the user should be allowed to change the value of the given + * setting item or not. + * @param aSettingItemId the ID of the setting item to check for. + * @return ETrue if modification is allowed, EFalse otherwise. + * @since 3.1 + */ + virtual TBool AllowedToChange( TInt aSettingItemId ) const = 0; + + /** + * Gets the help context for context sensitive help. + * @param aContext the context object in which the help context of the + * component must be set in the implementation of this method. + * @return ETrue if this method has set the context appropriately, + * otherwise the caller should set the context by itself. + * @since 3.1 + */ + virtual TBool GetHelpContext( TCoeHelpContext& /* aContext */ ) const + { + return EFalse; + } + + /** + * Sets hidden items in the setting item array. + * @param aSettingItemArray array containing the settings items to set + * visible/invisible. + * @since 3.1 + */ + virtual void SetHiddenItems( CAknSettingItemArray& /* aSettingItemArray */ ) + const + {} + + /** + * Checks if the setting with the given setting ID has been modified by + * the user and saves the value in storage if it has been changed. + * @param aSettingItemId the setting to be checked. + * @since 3.1 + */ + virtual void StoreIfChangedL( TInt /* aSettingItemId */ ) {} + + }; + +#endif // MPROFILEEXTERNALSETTINGSHANDLER_H + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/MProfileExternalSettingsObserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/MProfileExternalSettingsObserver.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2002 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: Interface for observing changes in the settings outside +* Profiles itself. +* +*/ + + + +#ifndef MPROFILEEXTERNALSETTINGSOBSERVER_H +#define MPROFILEEXTERNALSETTINGSOBSERVER_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Interface for observing changes in the settings outside Profiles itself. +* +* @lib ProfileSettingsView.dll +* @since 3.1 +*/ +class MProfileExternalSettingsObserver + { + + public: // New functions + + /** + * Notifies that the external settings have changed somehow. + * @since 3.1 + */ + virtual void HandleExternalSettingsChangedL() = 0; + + }; + +#endif // MPROFILEEXTERNALSETTINGSOBSERVER_H + +// End of File + + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewInc/MProfileViewHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewInc/MProfileViewHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2002 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: Interface for getting client rect area and getting reference to +* the view in use. +* +*/ + + + +#ifndef MPROFILEVIEWHANDLER_H +#define MPROFILEVIEWHANDLER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CAknView; + +// CLASS DECLARATION + +/** +* Interface for updating the active area and getting reference to the view in +* use. +* +* @lib ProfileSettingsView.dll +* @since 3.1 +*/ +class MProfileViewHandler + { + + public: // New functions + + /** + * Updates the client drawing area. + * @since 3.1 + */ + virtual void UpdateClientRect() = 0; + + /** + * Returns the view instance in use. + * @since 3.1 + */ + virtual CAknView& View() = 0; + + }; + +#endif // MProfileViewHandler_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,84 @@ +/* +* Copyright (c) 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: Setting item class for 3D settings. +* +*/ + + + +// INCLUDES +#include "CProfile3dSettingItem.h" +#include "CProfile3dSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfile3dSettingItem::CProfile3dSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfile3dSettingItem::CProfile3dSettingItem( + TInt aIdentifier, + TInt& aValue, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TInt& aVolume, + const TInt& a3DEffectOrEcho ) + : CAknEnumeratedTextPopupSettingItem( aIdentifier, aValue ), + iRingingTone( aRingingTone ), + iRingingType( aRingingType ), + iVibratingAlert( aVibratingAlert ), + iVolume( aVolume ), + i3DEffectOrEcho( a3DEffectOrEcho ) + { + iIdentifier = aIdentifier; + } + +// ----------------------------------------------------------------------------- +// CProfile3dSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CProfile3dSettingItem::CompleteConstructionL() + { + CAknEnumeratedTextPopupSettingItem::CompleteConstructionL(); + CArrayPtr* array = EnumeratedTextArray(); + TInt count( array->Count() ); + HBufC* text = NULL; + while( count-- ) + { + text = array->At( count )->Value(); + TPtr modifiable( text->Des() ); + AknTextUtils::LanguageSpecificNumberConversion( modifiable ); + } + } + +// ----------------------------------------------------------------------------- +// CProfile3dSettingItem::CreateSettingPageL +// ----------------------------------------------------------------------------- +// +CAknSettingPage* CProfile3dSettingItem::CreateSettingPageL() + { + return new( ELeave ) CProfile3dSettingPage( + SettingPageResourceId(), + *QueryValue(), + iRingingTone, + iRingingType, + iVibratingAlert, + iVolume, + i3DEffectOrEcho, + iIdentifier ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,97 @@ +/* +* Copyright (c) 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: Setting item class for 3D settings. +* +*/ + + + +#ifndef CPROFILE3DSETTINGITEM_H +#define CPROFILE3DSETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CAknSettingPage; + +// CLASS DECLARATION +/** +* Setting item class for 3D settings. +* CProfile3dSettingItem extends CAknEnumeratedTextPopupSettingItem +* in order to launch CProfile3dSettingPage +* instead of CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 5.0 +*/ +NONSHARABLE_CLASS( CProfile3dSettingItem ) : public CAknEnumeratedTextPopupSettingItem + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Setting item identifier. + * @param aRingingVolume Ringing volume. + * @param aRingingTone Ringing tone. + * @param aRingingType Ringing type. + * @param aVibratingAlert Vibrating alert. + * @param aVolume Volume. + * @param a3DEffectOrEcho 3D effect/echo + */ + CProfile3dSettingItem( + TInt aIdentifier, + TInt& aValue, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TInt& aVolume, + const TInt& a3DEffectOrEcho ); + + private: // Functions from base classes + + /** + * From CAknEnumeratedTextPopupSettingItem + */ + void CompleteConstructionL(); + + /** + * From CAknEnumeratedTextPopupSettingItem + */ + CAknSettingPage* CreateSettingPageL(); + + private: // Data + + // Ringing tone. + const TDesC& iRingingTone; + + // Ringing type. + const TInt& iRingingType; + + // Vibrating alert. + const TBool& iVibratingAlert; + + // Volume. + const TInt& iVolume; + + // 3D effect or echo + const TInt& i3DEffectOrEcho; + + // Setting item identifier + TInt iIdentifier; + }; + +#endif // CPROFILE3DSETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,269 @@ +/* +* Copyright (c) 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: Setting page class for 3D settings. +* +*/ + + + +// INCLUDES +#include "CProfile3dSettingPage.h" +#include "ProfileSettingsView.hrh" + +#include +#include +#include // For RApaLsSession +#include // For BaflUtils +#include +#include +#include + +// CONSTANTS +namespace + { + const TInt K3DEffectBase( 1000 ); + const TInt K3DEchoBase( 2000 ); + + const TInt KRepeatDelayInMicroSeconds( 1000000 ); // One second + +#ifdef RD_VIDEO_AS_RINGING_TONE + _LIT( KFLDCommonVideoType, "video/*" ); + _LIT( KFLDRM1VideoMimeType, "application/vnd.rn-realmedia" ); + _LIT( KFLDRM2VideoMimeType, "application/x-pn-realmedia" ); + _LIT( KFLDSDPVideoMimeType, "application/sdp" ); +#endif + + } +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfile3dSettingPage::CProfile3dSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfile3dSettingPage::CProfile3dSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TInt& aVolume, + const TInt& a3DEffectOrEcho, + TInt aIdentifier ) + : CAknPopupSettingPage( aResourceID, aQueryValue ), + iRingingTone( aRingingTone ), + iRingingType( aRingingType ), + iVibratingAlert( aVibratingAlert ), + iVolume( aVolume ), + i3DEffectOrEcho( a3DEffectOrEcho ), + iIdentifier( aIdentifier ) + { + } + +// ----------------------------------------------------------------------------- +// CProfile3dSettingPage::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfile3dSettingPage::ConstructL() + { + CAknPopupSettingPage::ConstructL(); + + TBool showErrorMsgs( EFalse ); + + iFs = new ( ELeave ) RFs; + User::LeaveIfError( iFs->Connect() ); + + CheckRingingToneTypeL(); + + iController = CFLDController::NewL( showErrorMsgs, KRepeatDelayInMicroSeconds ); + iController->CompleteConstructionL( Window() ); + iController->SetRingingType( iRingingType ); + iController->SetVibra( iVibratingAlert ); + iController->SetVolume( iVolume ); + } + +// Destructor. +CProfile3dSettingPage::~CProfile3dSettingPage() + { + if( iFs ) + { + iFs->Close(); + } + delete iFs; + delete iController; + delete iPreviewTone; + } + +// ----------------------------------------------------------------------------- +// CProfile3dSettingPage::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CProfile3dSettingPage::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + if( aType == EEventKey ) + { + if( ( aKeyEvent.iCode == EKeyUpArrow ) || + ( aKeyEvent.iCode == EKeyDownArrow ) ) + { + // Get current setting + TInt currentValue = PopupSettingListBox()->CurrentItemIndex(); + + // Call base classes method + TKeyResponse response( CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType ) ); + + // Get new setting + TInt newValue = PopupSettingListBox()->CurrentItemIndex(); + + if( newValue != currentValue ) + { + // Setting has changed + if( ( iIdentifier == EProfileSetting3dEffectId && newValue != EProfile3DEffectOff ) || + ( iIdentifier == EProfileSetting3dEchoId && i3DEffectOrEcho != EProfile3DEffectOff ) ) + { + // Set 3D parameters + if( iIdentifier == EProfileSetting3dEffectId ) + { + iController->Set3dEffects( K3DEffectBase + newValue ); + iController->Set3dEffects( K3DEchoBase + i3DEffectOrEcho ); + } + else + { + iController->Set3dEffects( K3DEffectBase + i3DEffectOrEcho ); + iController->Set3dEffects( K3DEchoBase + newValue ); + } + iController->Set3dEffects( ETrue ); + } + else + { + iController->Set3dEffects( EFalse ); + } + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EFocusChanged, iPreviewTone->Des() ); + } + return response; + } + // Cancels playback on any key event + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EOtherKeyEvent, iPreviewTone->Des() ); + } + + return CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType ); + } + + +// ----------------------------------------------------------------------------- +// CProfile3dSettingPage::HandlePointerEventL +// ----------------------------------------------------------------------------- +// +void CProfile3dSettingPage::HandlePointerEventL( + const TPointerEvent& aPointerEvent ) + { + if( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + // Get current setting + iTempValue = PopupSettingListBox()->CurrentItemIndex(); + } + else if( aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + CAknPopupSettingPage::HandlePointerEventL( aPointerEvent ); + // Get new setting + TInt newValue = PopupSettingListBox()->CurrentItemIndex(); + if( newValue != iTempValue ) + { + // Setting has changed + if( ( iIdentifier == EProfileSetting3dEffectId && newValue != EProfile3DEffectOff ) || + ( iIdentifier == EProfileSetting3dEchoId && i3DEffectOrEcho != EProfile3DEffectOff ) ) + { + // Set 3D parameters + if( iIdentifier == EProfileSetting3dEffectId ) + { + iController->Set3dEffects( K3DEffectBase + newValue ); + iController->Set3dEffects( K3DEchoBase + i3DEffectOrEcho ); + } + else + { + iController->Set3dEffects( K3DEffectBase + i3DEffectOrEcho ); + iController->Set3dEffects( K3DEchoBase + newValue ); + } + iController->Set3dEffects( ETrue ); + } + else + { + iController->Set3dEffects( EFalse ); + } + + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EFocusChanged, iPreviewTone->Des() ); + } + return; + } + // Cancels playback on any key event + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EOtherKeyEvent, iPreviewTone->Des() ); + + CAknPopupSettingPage::HandlePointerEventL( aPointerEvent ); + } + + +// ----------------------------------------------------------------------------- +// CProfile3dSettingPage::CheckRingingToneTypeL +// ----------------------------------------------------------------------------- +// +void CProfile3dSettingPage::CheckRingingToneTypeL() + { + // Get default tone from cenrep + TFileName defaultTone; + CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine ); + CleanupStack::PushL( cenrep ); + User::LeaveIfError( cenrep->Get( KProEngDefaultRingingTone, defaultTone ) ); + CleanupStack::PopAndDestroy( cenrep ); + + if( !BaflUtils::FileExists( *iFs, iRingingTone ) ) + { + // If the file does not exist, use default tone for volume preview + iPreviewTone = defaultTone.AllocL(); + return; + } + +#ifdef RD_VIDEO_AS_RINGING_TONE + // Find out MIME type + RApaLsSession apaLsSession; + User::LeaveIfError( apaLsSession.Connect() ); + CleanupClosePushL( apaLsSession ); + TUid dummyUid = { 0 }; // instantiate as zero + TDataType dataType( dummyUid ); + User::LeaveIfError( + apaLsSession.AppForDocument( iRingingTone, dummyUid, dataType ) ); + CleanupStack::PopAndDestroy(); // apaLsSession.Close() + + // See if this is a video MIME type + if ( dataType.Des().MatchF( KFLDCommonVideoType ) == 0 || + dataType.Des().CompareF( KFLDRM1VideoMimeType ) == 0 || + dataType.Des().CompareF( KFLDRM2VideoMimeType ) == 0 || + dataType.Des().CompareF( KFLDSDPVideoMimeType ) == 0 ) + { + iPreviewTone = defaultTone.AllocL(); + } + else + { + iPreviewTone = iRingingTone.AllocL(); + } +#else + iPreviewTone = iRingingTone.AllocL(); +#endif + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfile3dSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,123 @@ +/* +* Copyright (c) 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: Setting page class for 3D settings. +* +*/ + + + +#ifndef CPROFILE3DSETTINGPAGE_H +#define CPROFILE3DSETTINGPAGE_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFLDController; + +// CLASS DECLARATION +/** +* Setting page class for 3D settings. +* CProfile3dSettingPage extends CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 5.0 +*/ +NONSHARABLE_CLASS( CProfile3dSettingPage ) : public CAknPopupSettingPage + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource ID. + * @param aQueryValue + * @param aRingingTone Ringing tone. + * @param aRingingType Ringing type. + * @param aVibratingAlert Vibrating alert. + * @param aVolume Volume. + * @param a3DEffectOrEcho 3D effect or echo. + * @param aIdentifier Setting item identifier. + */ + CProfile3dSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TInt& aVolume, + const TInt& a3DEffectOrEcho, + TInt aIdentifier ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CProfile3dSettingPage(); + + private: // Functions from base classes + + /** + * From CCoeControl + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + private: // New functions + + /** + * Checks if ringing tone is video and if so, sets default tone + */ + void CheckRingingToneTypeL(); + + private: // Data + + // Ringing tone. + const TDesC& iRingingTone; + + // Ringing type. + const TInt& iRingingType; + + // Vibrating alert. + const TBool& iVibratingAlert; + + // Volume. + const TInt& iVolume; + + // 3D effect or echo + const TInt& i3DEffectOrEcho; + + // Setting item identifier + TInt iIdentifier; + + // Temporary setting value + TInt iTempValue; + + // Own: File List Dialog + CFLDController* iController; + + // Preview tone: either ringing tone or default tone + HBufC* iPreviewTone; + + // Fileserver session + RFs* iFs; + + }; + +#endif // CPROFILE3DSETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,446 @@ +/* +* Copyright (c) 2002 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: Setting item class for "Alert for" setting. +* +*/ + + + +// INCLUDES +#include "CProfileAlertForSettingItem.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "CProfileAlertForSettingPage.h" + +// CONSTANTS +const TInt KContactItemArrayGranularity( 8 ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::CProfileAlertForSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileAlertForSettingItem::CProfileAlertForSettingItem( + TInt aIdentifier, + RArray& aContactList, + CCoeEnv* aCoeEnv ) + : CAknSettingItem( aIdentifier ), + iPopupArray( KContactItemArrayGranularity ), + iExternalContactArray( aContactList ), + iCoeEnv( aCoeEnv ) + { + } + +// Destructor +CProfileAlertForSettingItem::~CProfileAlertForSettingItem() + { + delete iChangeNotifier; + delete iPbkContactEngine; + delete iTextSeveralGroups; + delete iTextAllCallers; + iFullContactArray.Close(); + iPopupArray.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::CompleteConstructionL() + { + // Read localised texts from resource + iTextAllCallers = StringLoader::LoadL( R_PROFILE_TEXT_ALL_CALLERS ); + iTextSeveralGroups = StringLoader::LoadL( R_PROFILE_TEXT_SEVERAL_GROUPS ); + + // Create Phonebook contact engine and change notifier + iPbkContactEngine = CPbkContactEngine::NewL(); + iChangeNotifier = iPbkContactEngine->CreateContactChangeNotifierL( this ); + + PopulatePopupArrayL(); + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::AlertForStatus +// ----------------------------------------------------------------------------- +// +CProfileAlertForSettingItem::TAlertForStatus CProfileAlertForSettingItem::AlertForStatus() const + { + TInt count( iPopupArray.Count() ); + if( count > 1 ) + { + // Array contains 2 or more items + if( SelectionStatus( 0 ) ) + { + // If first item is selected, return EAlertForAllCallers + return EAlertForAllCallers; + } + TInt selectCount( 0 ); + // Start from index 1, because 0 is "All callers" + for( TInt index( 1 ); index < count; index++ ) + { + if( SelectionStatus( index ) ) + { + // Found a selected item, increase counter + selectCount++; + } + } + if( selectCount == 1 ) + { + return EAlertForSingleGroup; + } + return EAlertForSeveralGroups; + } + // Pop-up array is empty or contains only "All callers" + return EAlertForAllCallers; + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::SetSelectionStatus +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::SetSelectionStatus( TInt aIndex, TBool aStatus ) + { + if( aIndex < iPopupArray.MdcaCount() ) + { + iPopupArray.At( aIndex )->SetSelectionStatus( aStatus ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::SelectionStatus +// ----------------------------------------------------------------------------- +// +TBool CProfileAlertForSettingItem::SelectionStatus( TInt aIndex ) const + { + if( aIndex < iPopupArray.MdcaCount() ) + { + return iPopupArray.At( aIndex )->SelectionStatus(); + } + else + { + return EFalse; + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::PopulatePopupArrayL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::PopulatePopupArrayL() + { + iPopupArray.ResetAndDestroy(); + iFullContactArray.Reset(); + + // Create first item to popup array, "All callers" + CSelectableItem* item = new( ELeave ) CSelectableItem( + *iTextAllCallers, EFalse ); + CleanupStack::PushL( item ); + item->ConstructL(); + iPopupArray.AppendL( item ); // Ownership is transferred + CleanupStack::Pop( item ); + + CContactIdArray* groupIdArray = iPbkContactEngine->Database().GetGroupIdListL(); + CleanupStack::PushL( groupIdArray ); + TInt count( groupIdArray->Count() ); + TContactItemId contactId; + CContactGroup* contactGroup = NULL; + TPtrC contactGroupName; + for( TInt index( 0 ); index < count; index++ ) + { + contactId = ( *groupIdArray )[ index ]; + + iFullContactArray.Append( contactId ); + contactGroup = iPbkContactEngine->ReadContactGroupL( contactId ); + CleanupStack::PushL( contactGroup ); + contactGroupName.Set( contactGroup->GetGroupLabelL() ); + + item = new( ELeave ) CSelectableItem( contactGroupName, EFalse ); + CleanupStack::PushL( item ); + item->ConstructL(); + iPopupArray.AppendL( item ); // Ownership is transferred + CleanupStack::Pop( item ); + + CleanupStack::PopAndDestroy( contactGroup ); + } + + CleanupStack::PopAndDestroy( groupIdArray ); + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::CheckAllCallersSetting +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::CheckAllCallersSetting() + { + TInt count( iPopupArray.Count() ); + if( count > 0 ) + { + // Check whether the first item, "All callers", is selected or not. + if( SelectionStatus( 0 ) ) + { + // "All callers" is selected. + // Set other groups unselected. + for( TInt index( 1 ); index < count; index++ ) + { + SetSelectionStatus( index, EFalse ); + } + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::UpdateSettingPageL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::UpdateSettingPageL() + { + // Closing and opening the database has because + // the database doesn't update its information otherwise + iPbkContactEngine->Database().CloseTables(); + iPbkContactEngine->Database().OpenTablesL(); + + RArray selectedContacts; + CleanupClosePushL( selectedContacts ); + StoreL( selectedContacts ); + PopulatePopupArrayL(); + LoadL( selectedContacts ); + CleanupStack::PopAndDestroy(); // selectedContacts + + UpdateListBoxTextL(); // Calls SettingTextL() + + if( SettingPage() ) + { + // Pop-up is popped up + CProfileAlertForSettingPage* sp = + static_cast< CProfileAlertForSettingPage* >( SettingPage() ); + TInt lastIndex( iPopupArray.Count() - 1 ); + TInt currentIndex( sp->ListBoxControl()->View()->CurrentItemIndex() ); + if( currentIndex > lastIndex ) + { + sp->ListBoxControl()->SetCurrentItemIndex( lastIndex ); + } + if( currentIndex < 0 ) + { + sp->ListBoxControl()->SetCurrentItemIndex( 0 ); + } + + // Must clear listbox view's selections, because if items have been deleted, + // non existent selections remain in view's selection array. + sp->ListBoxControl()->View()->ClearSelection(); + // Set the new selection array to setting page + sp->SetSelectionItemArrayL( &iPopupArray ); + // Update possibly changed CBA visibility + sp->UpdateCba(); + } + else // Setting page is not visible + { + LoadL(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::StoreL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::StoreL( RArray& aArray ) const + { + aArray.Reset(); + TInt count( iPopupArray.Count() ); + // Start from index 1 (0 is 'All callers') + for( TInt index( 1 ); index < count; index++ ) + { + // If an item in array is selected + if( SelectionStatus( index ) ) + { + // Add its id to external contact array + aArray.Append( iFullContactArray[ index - 1 ] ); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::LoadL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::LoadL( const RArray& aArray ) + { + TInt index( 0 ); + TInt count( iPopupArray.Count() ); + + // Set all selections false + for( ; index < count; index++ ) + { + SetSelectionStatus( index, EFalse ); + } + + TContactItemId contactId; + TInt foundCount( 0 ); + TInt foundIndex; + count = aArray.Count(); + for( index = 0; index < count; index++ ) + { + contactId = aArray[ index ]; + // Try to find contact id from full contact group array + foundIndex = iFullContactArray.Find( contactId ); + if( foundIndex >= 0 ) + { + // Indices in iFullContactArray are the same as in iPopupArray + // except that iPopupArray's 1st item is "All callers". Therefore + 1. + SetSelectionStatus( foundIndex + 1, ETrue ); + // A valid contact id is found, increase counter + foundCount++; + } + } + + // If there were no contact groups selected, + // or selected groups are not longer valid, select "All callers" + if( foundCount == 0 ) + { + SetSelectionStatus( 0, ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::StoreL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::StoreL() + { + StoreL( iExternalContactArray ); + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::LoadL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::LoadL() + { + LoadL( iExternalContactArray ); + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::EditItemL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::EditItemL( TBool /* aCalledFromMenu */ ) + { + CProfileAlertForSettingPage* dlg = new( ELeave ) CProfileAlertForSettingPage( + SettingPageResourceId(), &iPopupArray ); + SetSettingPage( dlg ); // Set iSettingPage to indicate that pop-up is displayed + dlg->SetSettingPageObserver( this ); + dlg->ExecuteLD(); + SetSettingPage( NULL ); // iSettingPage is NULL, pop-up is closed + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::SettingTextL +// ----------------------------------------------------------------------------- +// +const TDesC& CProfileAlertForSettingItem::SettingTextL() + { + switch( AlertForStatus() ) + { + case EAlertForAllCallers: + { + iSettingText = *iTextAllCallers; + break; + } + case EAlertForSingleGroup: + { + TInt count( iPopupArray.Count() ); + if( count > 0 ) + { + // Search the selected group + while( !SelectionStatus( --count ) && count > 1 ) {} + // Get its name + iSettingText = iPopupArray.At( count )->ItemText(); + } + break; + } + case EAlertForSeveralGroups: + { + iSettingText = *iTextSeveralGroups; + break; + } + default: + { + break; + } + } + return iSettingText; + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::HandleDatabaseEventL +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::HandleDatabaseEventL( TContactDbObserverEvent aEvent ) + { + if( ( aEvent.iType == EContactDbObserverEventGroupAdded ) || // A contact item group has been added. + ( aEvent.iType == EContactDbObserverEventGroupChanged ) || // A contact item group has been updated. + ( aEvent.iType == EContactDbObserverEventGroupDeleted ) ) // A contact item group has been deleted from the database. + { + UpdateSettingPageL(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingItem::HandleSettingPageEventL +// After settings have been accepted, some checks are made in this method. +// If "Alert for" is selected , all other groups must be unselected. +// If nothing is selected , "Alert for" must be selected. +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingItem::HandleSettingPageEventL( + CAknSettingPage* aSettingPage, TAknSettingPageEvent aEventType ) + { + switch( aEventType ) + { + case EEventSettingOked: + { + // Check that "All callers" is in correct state + CheckAllCallersSetting(); + break; + } + case EEventSettingCancelled: + { + // If setting is cancelled, load old values + LoadL(); + break; + } + case EEventSettingChanged: + { + // If setting has changed, update CBA visibility + static_cast( aSettingPage )->UpdateCba(); + break; + } + default: + { + break; + } + } + CAknSettingItem::HandleSettingPageEventL( aSettingPage, aEventType ); + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,202 @@ +/* +* Copyright (c) 2002 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: Setting item class for "Alert for" setting. +* +*/ + + + +#ifndef CPROFILEALERTFORSETTINGITEM_H +#define CPROFILEALERTFORSETTINGITEM_H + +// INCLUDES +#include +#include +#include // For CSelectionItemList member data + +// FORWARD DECLARATIONS +class CCoeEnv; +class CPbkContactChangeNotifier; + +// CONSTANTS +const TInt KMaxPbkContactGroupNameLength( 64 ); + +// CLASS DECLARATION +/** +* Setting item class for "Alert for" setting. +* CProfileAlertForSettingItem reads user defined groups from +* Phonebook contact database and shows a list of the groups +* in a check box setting page (CAknCheckBoxSettingPage). +* CProfileAlertForSettingItem is inherited from MPbkContactDbObserver +* in order to catch Phonebook contact group change events and +* dynamically update its contents. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileAlertForSettingItem ) : public CAknSettingItem + ,public MPbkContactDbObserver + { + + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Resource identifier. + * @aContactList Array where selected contact groups are stored. + * @aCoeEnv A pointer to Control Environment. + */ + CProfileAlertForSettingItem( + TInt aIdentifier, + RArray& aContactList, + CCoeEnv* aCoeEnv ); + + /** + * Destructor + */ + ~CProfileAlertForSettingItem(); + + private: // Enumerations + + enum TAlertForStatus + { + EAlertForAllCallers, + EAlertForSingleGroup, + EAlertForSeveralGroups + }; + + private: // New functions + + /** + * Resolves the alert for status of iPopupArray. + * @return Returns the alert for status of iPopupArray. + */ + TAlertForStatus AlertForStatus() const; + + /** + * Sets selection status to iPopupArray at specified index. + * @param aIndex Index in iPopupArray. + * @param aStatus Selection status of an item. + */ + void SetSelectionStatus( TInt aIndex, TBool aStatus ); + + /** + * Returns selection status of an item in iPopupArray. + * @param aIndex Index in iPopupArray. + * @return Returns selection status of an item. + */ + TBool SelectionStatus( TInt aIndex ) const; + + /** + * Populates iPopupArray. Reads contact group names from Phonebook engine. + */ + void PopulatePopupArrayL(); + + /** + * Sets other groups unselected if "All callers" has been selected. + */ + void CheckAllCallersSetting(); + + /** + * Updates iPopupArray and if setting page is opened, + * updates items of the setting page too. + */ + void UpdateSettingPageL(); + + /** + * Stores currently selected groups to given array. + * @param aArray An array to store currently selected groups to. + */ + void StoreL( RArray& aArray ) const; + + /** + * Loads selected groups from given array and sets them to iPopupArray. + * @param aArray An array to load currently selected groups from. + */ + void LoadL( const RArray& aArray ); + + private: // Functions from base classes + + /** + * From CAknSettingItem + */ + void CompleteConstructionL(); + + /** + * From CAknSettingItem + */ + void StoreL(); + + /** + * From CAknSettingItem + */ + void LoadL(); + + /** + * From CAknSettingItem + */ + void EditItemL( TBool aCalledFromMenu ); + + /** + * From CAknSettingItem + */ + const TDesC& SettingTextL(); + + /** + * From MPbkContactDbObserver + */ + void HandleDatabaseEventL( TContactDbObserverEvent aEvent ); + + /** + * From MAknSettingPageObserver + */ + void HandleSettingPageEventL( + CAknSettingPage* aSettingPage, + TAknSettingPageEvent aEventType ); + + private: // Data + + // Contains all items in check box setting list + // (item name string and selection status boolean value) + CSelectionItemList iPopupArray; + + // Own: Localised text "All callers" + HBufC* iTextAllCallers; + + // Own: Localised text "Several groups" + HBufC* iTextSeveralGroups; + + // Text to return with SettingTextL() + TBuf iSettingText; + + // An array which contains contact item id:s of all contact groups + RArray iFullContactArray; + + // Array of selected contact groups + RArray& iExternalContactArray; + + // Own: PhoneBook contact change notifier + CPbkContactChangeNotifier* iChangeNotifier; + + // Own: PhoneBook contact engine + CPbkContactEngine* iPbkContactEngine; + + // Ref: Pointer to Control Environment + CCoeEnv* iCoeEnv; + + }; + +#endif // CPROFILEALERTFORSETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2002 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: Setting page class for "Alert for" setting. +* +*/ + + + +// INCLUDES +#include "CProfileAlertForSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingPage::CProfileAlertForSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileAlertForSettingPage::CProfileAlertForSettingPage( + TInt aResourceID, + CSelectionItemList* aItemArray ) + : CAknCheckBoxSettingPage( aResourceID, aItemArray ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileAlertForSettingPage::UpdateCba +// ----------------------------------------------------------------------------- +// +void CProfileAlertForSettingPage::UpdateCba() + { + // Cache the pointer to button group container + CEikButtonGroupContainer* cba = Cba(); + // Left softkey should be visible if there are items selected, + // i.e. the selection index array has items. + TBool visible( ListBoxControl()->View()->SelectionIndexes()->Count() > 0 ); + // Resolve left softkey command id + TInt leftId( cba->ButtonGroup()->CommandId( 0 ) ); + // Check if left softkey visibility has changed + if( visible != cba->IsCommandVisible( leftId ) ) + { + // Left softkey visibility has changed, update it + cba->MakeCommandVisible( leftId, visible ); + } + cba->DrawDeferred(); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileAlertForSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,62 @@ +/* +* Copyright (c) 2002 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: Setting page class for "Alert for" setting. +* +*/ + + + +#ifndef CPROFILEALERTFORSETTINGPAGE_H +#define CPROFILEALERTFORSETTINGPAGE_H + +// INCLUDES +#include + +// CLASS DECLARATION +/** +* Setting page class for "Alert for" setting. +* CProfileAlertForSettingPage extends CAknCheckBoxSettingPage in order to +* hide left softkey when no contact groups are selected. However, it is +* the responsibility of the setting page observer to call UpdateCbaL, when +* setting changes. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileAlertForSettingPage ) + : public CAknCheckBoxSettingPage + { + + public: // Constructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource id. + * @param aItemArray The array which contains all setting items. + */ + CProfileAlertForSettingPage( + TInt aResourceID, CSelectionItemList* aItemArray ); + + public: // New functions + + /** + * Hides left softkey (Ok) if no items are selected. + */ + void UpdateCba(); + + }; + +#endif // CPROFILEALERTFORSETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileEngineHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileEngineHandler.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,114 @@ +/* +* Copyright (c) 2002 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: Profile engine handler +* +*/ + + + +// INCLUDE FILES +#include "CProfileEngineHandler.h" + +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::CProfileEngineHandler +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileEngineHandler::CProfileEngineHandler() + { + } + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileEngineHandler::ConstructL() + { + // Create the Profile Engine + iEngine = CreateProfileEngineExtendedL(); + // Get a list of profile Id:s + ReadIdArrayL(); + } + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileEngineHandler* CProfileEngineHandler::NewL() + { + CProfileEngineHandler* self = new( ELeave ) CProfileEngineHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor. +CProfileEngineHandler::~CProfileEngineHandler() + { + delete iIdArray; + if( iEngine ) + { + iEngine->Release(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::Engine +// ----------------------------------------------------------------------------- +// +EXPORT_C MProfileEngineExtended* CProfileEngineHandler::Engine() const + { + return iEngine; + } + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::ReadIdArrayL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CProfileEngineHandler::ReadIdArrayL() + { + MProfilesNamesArray* idArray = iEngine->ProfilesNamesArrayLC(); + CleanupStack::Pop(); + delete iIdArray; + iIdArray = idArray; + } + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::IdArray +// ----------------------------------------------------------------------------- +// +EXPORT_C MProfilesNamesArray* CProfileEngineHandler::IdArray() const + { + return iIdArray; + } + +// ----------------------------------------------------------------------------- +// CProfileEngineHandler::IdForIndex +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CProfileEngineHandler::IdForIndex( TInt aIndex ) const + { + return iIdArray->ProfileName( aIndex )->Id(); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,68 @@ +/* +* Copyright (c) 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: Setting item class for Feedback settings. +* +*/ + + + +// INCLUDES +#include "CProfileFeedbackSettingItem.h" +#include "CProfileFeedbackSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingItem::CProfileFeedbackSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileFeedbackSettingItem::CProfileFeedbackSettingItem( + TInt aIdentifier, TInt& aValue ) + : CAknEnumeratedTextPopupSettingItem( aIdentifier, aValue ) + { + iIdentifier = aIdentifier; + } + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CProfileFeedbackSettingItem::CompleteConstructionL() + { + CAknEnumeratedTextPopupSettingItem::CompleteConstructionL(); + CArrayPtr* array = EnumeratedTextArray(); + TInt count( array->Count() ); + HBufC* text = NULL; + while( count-- ) + { + text = array->At( count )->Value(); + TPtr modifiable( text->Des() ); + AknTextUtils::LanguageSpecificNumberConversion( modifiable ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingItem::CreateSettingPageL +// ----------------------------------------------------------------------------- +// +CAknSettingPage* CProfileFeedbackSettingItem::CreateSettingPageL() + { + return new( ELeave ) CProfileFeedbackSettingPage( + SettingPageResourceId(), + *QueryValue(), + iIdentifier ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 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: Setting item class for Feedback settings. +* +*/ + + + +#ifndef CPROFILEFEEDBACKSETTINGITEM_H +#define CPROFILEFEEDBACKSETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CAknSettingPage; + +// CLASS DECLARATION +/** +* Setting item class for Feedback settings. +* CProfileFeedbackSettingItem extends CAknEnumeratedTextPopupSettingItem +* in order to launch CProfileFeedbackSettingPage +* instead of CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 5.0 +*/ +NONSHARABLE_CLASS( CProfileFeedbackSettingItem ) : public CAknEnumeratedTextPopupSettingItem + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Setting item identifier. + * @param aValue Feedback setting value. + */ + CProfileFeedbackSettingItem( + TInt aIdentifier, + TInt& aValue ); + + private: // Functions from base classes + + /** + * From CAknEnumeratedTextPopupSettingItem + */ + void CompleteConstructionL(); + + /** + * From CAknEnumeratedTextPopupSettingItem + */ + CAknSettingPage* CreateSettingPageL(); + + private: // Data + + // Setting item identifier + TInt iIdentifier; + }; + +#endif // CPROFILEFEEDBACKSETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,111 @@ +/* +* Copyright (c) 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: Setting page class for Feedback settings. +* +*/ + + + +// INCLUDES +#include +#include // For StringLoader +#include // For CAknInformationNote + +// for power save mode handling +#include +#include +#include + +#include "CProfileFeedbackSettingPage.h" +#include "ProfileSettingsView.hrh" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingPage::CProfileFeedbackSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileFeedbackSettingPage::CProfileFeedbackSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue, + TInt aIdentifier ) + : CAknPopupSettingPage( aResourceID, aQueryValue ), + iIdentifier( aIdentifier ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingPage::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileFeedbackSettingPage::ConstructL() + { + CAknPopupSettingPage::ConstructL(); + } + +// Destructor. +CProfileFeedbackSettingPage::~CProfileFeedbackSettingPage() + { + } + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingPage::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CProfileFeedbackSettingPage::OkToExitL( TBool aAccept ) + { + if( aAccept ) + { + TInt psm = EPsmsrvModeNormal; + CRepository* cenrep = CRepository::NewLC( KCRUidPowerSaveMode ); + cenrep->Get( KPsmCurrentMode, psm ); + CleanupStack::PopAndDestroy( cenrep ); + if( psm == EPsmsrvModePowerSave ) + { + HBufC* buf = StringLoader::LoadLC( R_PROFILE_TEXT_PSM_INFONOTE ); + CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote( EFalse ); + queryDialog->ExecuteLD( *buf ); + CleanupStack::PopAndDestroy( buf ); + } + } + return ETrue; + } + + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingPage::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CProfileFeedbackSettingPage::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + return CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType ); + } + + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingPage::HandlePointerEventL +// ----------------------------------------------------------------------------- +// +void CProfileFeedbackSettingPage::HandlePointerEventL( + const TPointerEvent& aPointerEvent ) + { + CAknPopupSettingPage::HandlePointerEventL( aPointerEvent ); + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFeedbackSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,90 @@ +/* +* Copyright (c) 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: Setting page class for Feedback settings. +* +*/ + + + +#ifndef CPROFILEFEEDBACKSETTINGPAGE_H +#define CPROFILEFEEDBACKSETTINGPAGE_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFLDController; + +// CLASS DECLARATION +/** +* Setting page class for Feedback settings. +* CProfileFeedbackSettingPage extends CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 5.0 +*/ +NONSHARABLE_CLASS( CProfileFeedbackSettingPage ) : public CAknPopupSettingPage + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource ID. + * @param aQueryValue + * @param aIdentifier Setting item identifier. + */ + CProfileFeedbackSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue, + TInt aIdentifier ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CProfileFeedbackSettingPage(); + + private: // Functions from base classes + + /** + * From CCoeControl + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + /** + * From CAknSettingPage + */ + TBool OkToExitL( TBool aAccept ); + + private: // New functions + + + private: // Data + + // Setting item identifier + TInt iIdentifier; + + // Temporary setting value + TInt iTempValue; + + }; + +#endif // CPROFILEFEEDBACKSETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFileListSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFileListSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,272 @@ +/* +* Copyright (c) 2002-2006 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: Setting item class for tone selection. +* +*/ + + + +// CLASS HEADER +#include "CProfileFileListSettingItem.h" + +// INTERNAL INCLUDES +#include + +#include // From Profile Engine +#include +#include +#include +#include +#include +#include // For TCLFMediaType::ECLFMediaTypeVideo +#include // CFeatureDiscovery + +// for mediafilelist +#include +#include +#include + + +// EXTERNAL INCLUDES +#include "ProfilePanics.h" +#include "ProfileSettingsView.hrh" + +namespace + { +// CONSTANTS + _LIT( KIgnoredExtension, ".RNG" ); + _LIT( KProfileSilentTone, "Z:No_Sound.wav" ); + + _LIT( KProfileAudioMpeg, "audio/mpegurl" ); + _LIT( KProfileAudioRAPlugin, "audio/x-pn-realaudio-plugin" ); +#ifndef __WMA + _LIT( KProfileAudioWMA, "audio/x-ms-wma" ); +#endif + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::CProfileFileListSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileFileListSettingItem::CProfileFileListSettingItem( + TInt aIdentifier, + TDes& aToneFileName, + const TInt& aRingingType, + const TInt& aRingingVolume, + const TBool& aVibratingAlert, + TInt& a3DEffect, + TInt& a3DEcho, + CCoeEnv* aCoeEnv ) + : CAknSettingItem( aIdentifier ), + iExternalToneFileName( aToneFileName ), + iRingingType( aRingingType ), + iRingingVolume( aRingingVolume ), + iVibratingAlert( aVibratingAlert ), + i3DEffect( a3DEffect ), + i3DEcho( a3DEcho ), + iCoeEnv( aCoeEnv ) + { + } + +// Destructor +CProfileFileListSettingItem::~CProfileFileListSettingItem() + { + delete iTitle; + delete iNoSoundFileName; + delete iNoSoundText; + delete iInternalToneFileName; + } + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CProfileFileListSettingItem::CompleteConstructionL() + { + iNoSoundText = + StringLoader::LoadL( R_PROFILE_TEXT_NONE ); + + TFileName fileName; + TParse* fp = new(ELeave) TParse(); + fp->Set(KProfileSilentTone, &KDC_RESOURCE_FILES_DIR, NULL); + fileName.Copy( fp->FullName() ); + delete fp; + iNoSoundFileName = fileName.AllocL(); + iTitle = + StringLoader::LoadL( R_PROFILE_TEXT_SELECT_TONE ); + + iInternalToneFileName = new( ELeave ) TFileName(); + } + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::StoreL +// ----------------------------------------------------------------------------- +// +void CProfileFileListSettingItem::StoreL() + { + if( iInternalToneFileName->Length() == 0 ) + { + iInternalToneFileName->Copy( iNoSoundFileName->Des() ); + } + iExternalToneFileName.Copy( *iInternalToneFileName ); + } + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::LoadL +// ----------------------------------------------------------------------------- +// +void CProfileFileListSettingItem::LoadL() + { + iInternalToneFileName->Copy( iExternalToneFileName ); + + if( iInternalToneFileName->Length() == 0 ) + { + iInternalToneFileName->Copy( iNoSoundFileName->Des() ); + } + } + + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::EditItemL +// ----------------------------------------------------------------------------- +// +void CProfileFileListSettingItem::EditItemL( TBool /*aCalledFromMenu*/ ) + { + TInt ringingType( iRingingType ); + TInt id( Identifier() ); + if( ( id == EProfileSettingMessageAlertToneId ) || + ( id == EProfileSettingEmailAlertToneId ) ) + { + // Message alert tone is always played EProfileRingingTypeRingingOnce + // Exceptions are Silent and Beeb Once + if( ( ringingType == EProfileRingingTypeRinging ) || + ( ringingType == EProfileRingingTypeAscending ) ) + { + ringingType = EProfileRingingTypeRingingOnce; + } + } + + TFileName fileName; + TInt nullItem = KErrNotFound; + + CMediaFileList* list = CMediaFileList::NewL(); + CleanupStack::PushL( list ); + + list->SetAttrL( CMediaFileList::EAttrTitle, *iTitle ); + list->SetAttrL( CMediaFileList::EAttrVolume, iRingingVolume ); + list->SetAttrL( CMediaFileList::EAttrVibra, iVibratingAlert ); + list->SetAttrL( CMediaFileList::EAttrRingingType, ringingType ); + list->SetAttrL( CMediaFileList::EAttrExcludeMimeType, KProfileAudioMpeg ); + list->SetAttrL( CMediaFileList::EAttrExcludeMimeType, KProfileAudioRAPlugin ); +#ifndef __WMA + list->SetAttrL( CMediaFileList::EAttrExcludeMimeType, KProfileAudioWMA ); +#endif + + list->SetAttrL( CMediaFileList::EAttrAutomatedType, CDRMHelper::EAutomatedTypeRingingTone ); + + if( id == EProfileSettingPTTRingingToneId ) + { + // PTT does not allow videos + list->SetAttrL( CMediaFileList::EAttrExcludeFolder, CMediaFileList::EMediaFileTypeVideo ); + } + + if( id == EProfileSettingMessageAlertToneId ) + { + list->SetAttrL( CMediaFileList::EAttrAutomatedType, CDRMHelper::EAutomatedTypeMessageAlert ); + } + else if( id == EProfileSettingEmailAlertToneId ) + { + list->SetAttrL( CMediaFileList::EAttrAutomatedType, CDRMHelper::EAutomatedTypeEmailAlert ); + } + + // Size limit for voice call tone files + // Messaging tone size is also limited if the + // "FF_LIMITED_MESSAGE_AND_ALARM_TONE_SIZE" feature flag is enabled + if ( id == EProfileSettingRingingToneId || + id == EProfileSettingRingingToneLine1Id || + id == EProfileSettingRingingToneLine2Id || + ( id == EProfileSettingMessageAlertToneId && + CFeatureDiscovery::IsFeatureSupportedL( KFeatureIdFfLimitedMessageAndAlarmToneSize ) ) ) + { + TInt sizeLimitKB = 0; + CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine ); + CleanupStack::PushL( cenrep ); + User::LeaveIfError( cenrep->Get( KProEngRingingToneMaxSize, sizeLimitKB ) ); + CleanupStack::PopAndDestroy(); // cenrep + + list->SetAttrL( CMediaFileList::EAttrFileSize, sizeLimitKB ); + + } + + list->SetAttrL( CMediaFileList::EAttr3DEffect, i3DEffect ); + list->SetAttrL( CMediaFileList::EAttr3DEcho, i3DEcho ); + + list->SetNullItemL( *iNoSoundText, *iNoSoundFileName, + CMediaFileList::EMediaFileTypeAudio, + CMediaFileList::ENullItemIconOff ); + + TInt ret = list->ShowMediaFileListL( iInternalToneFileName, &nullItem, NULL, NULL ); + + CleanupStack::PopAndDestroy( list ); + + if( ret ) + { + // Setting Oked. + UpdateListBoxTextL(); + } + } + + + + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::SettingTextL +// ----------------------------------------------------------------------------- +// +const TDesC& CProfileFileListSettingItem::SettingTextL() + { + if( iInternalToneFileName->Length() > 0 ) + { + // FLD has returned a filename + if( iInternalToneFileName->CompareF( *iNoSoundFileName ) == 0 ) + { + // Filename is "No_Sound", return localized text "None" + iSettingText.Set( *iNoSoundText ); + } + else + { + // Filename is something else + TParsePtrC parse( *iInternalToneFileName ); + if( parse.Ext().CompareF( KIgnoredExtension ) == 0 ) + { + iSettingText.Set( parse.Name() ); + } + else + { + iSettingText.Set( parse.NameAndExt() ); + } + } + } + else + { + // Filename is an empty descriptor, return localised text "None" + iSettingText.Set( *iNoSoundText ); + } + return iSettingText; + } + +// End Of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFileListSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileFileListSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,135 @@ +/* +* Copyright (c) 2002 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: Setting item class for tone selection. +* +*/ + + + +#ifndef CPROFILEFILELISTSETTINGITEM_H +#define CPROFILEFILELISTSETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CCoeEnv; + + +// CLASS DECLARATION +/** +* Setting item class for tone selection. +* CProfileFileListSettingItem launches File List Dialog common component +* from which user can select a file for ringing tone. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileFileListSettingItem ) : public CAknSettingItem + { + + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Resource identifier. + * Tells which setting item is currently edited. + * @param aToneFileName File name of the selected tone is stored here. + * @param aRingingType Describes how the tone is played. + * @param aRingingVolume The volume how loud the tone is played. + * @param aVibratingAlert Setting of the vibrating alert. + * @param aCoeEnv Pointer to Control Environment. + */ + CProfileFileListSettingItem( + TInt aIdentifier, + TDes& aToneFileName, + const TInt& aRingingType, + const TInt& aRingingVolume, + const TBool& aVibratingAlert, + TInt& a3DEffect, + TInt& a3DEcho, + CCoeEnv* aCoeEnv ); + + /** + * Destructor. + */ + ~CProfileFileListSettingItem(); + + private: // Functions from base classes + + /** + * From CAknSettingItem + */ + void CompleteConstructionL(); + + /** + * From CAknSettingItem + */ + void StoreL(); + + /** + * From CAknSettingItem + */ + void LoadL(); + + /** + * From CAknSettingItem + */ + void EditItemL( TBool aCalledFromMenu ); + + /** + * From CAknSettingItem + */ + const TDesC& SettingTextL(); + + + private: // Data + + // Internal buffer for filename of selected tone + TFileName* iInternalToneFileName; + + // External filename for selected tone + TDes& iExternalToneFileName; + + // Ringing type for tone playback + const TInt& iRingingType; + + // Ringing volume for tone playback + const TInt& iRingingVolume; + + // Vibrating alert setting for tone playback + const TBool& iVibratingAlert; + + // Own: Localised text qtn_tc_none + HBufC* iNoSoundText; + + // Own: "No_Sound.wav" file name + HBufC* iNoSoundFileName; + + // Own: Localised text for title for tone selection + HBufC* iTitle; /// Title for tone selection + + // Text that is returned by SettingTextL + TPtrC iSettingText; + + TInt& i3DEffect; + TInt& i3DEcho; + // Ref: Pointer to Control Environment + CCoeEnv* iCoeEnv; + + }; + +#endif // CPROFILEFILELISTSETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileIndexHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileIndexHandler.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,235 @@ +/* +* Copyright (c) 2002 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: Profile index handler (for use of Settings Container +* if multiple profiles are edited) +* +*/ + + +// INCLUDES +#include "CProfileIndexHandler.h" + +#include +#include + +#include "CProfileEngineHandler.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::CProfileIndexHandler +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileIndexHandler::CProfileIndexHandler( + CProfileEngineHandler& aEngineHandler ) + : iEngineHandler( aEngineHandler ) + { + } + +void CProfileIndexHandler::ConstructL() + { + } + +EXPORT_C CProfileIndexHandler* CProfileIndexHandler::NewL( + CProfileEngineHandler& aEngineHandler ) + { + CProfileIndexHandler* self = + new( ELeave ) CProfileIndexHandler( aEngineHandler ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +CProfileIndexHandler::~CProfileIndexHandler() + { + iIndexArray.Close(); + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::CurrentProfileIndex +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CProfileIndexHandler::CurrentProfileIndex() const + { + return iCurrentProfileIndex; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::SetCurrentProfileIndex +// Note that there is no boundary checking. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CProfileIndexHandler::SetCurrentProfileIndex( TInt aIndex ) + { + iCurrentProfileIndex = aIndex; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::CreateIndexArrayL +// Resets the index array and populates it with zeroes +// ----------------------------------------------------------------------------- +// +void CProfileIndexHandler::CreateIndexArrayL() + { + iIndexArray.Reset(); + TItem item = { 0, 0 }; + TInt count( iEngineHandler.IdArray()->MdcaCount() ); + while( --count >= 0 ) + { + User::LeaveIfError( iIndexArray.Append( item ) ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::StoreIndices +// ----------------------------------------------------------------------------- +// +void CProfileIndexHandler::StoreIndices() + { + if( !iListBox ) + { + return; + } + + TItem& item = iIndexArray[iCurrentProfileIndex]; + item.iIndex = iListBox->View()->CurrentItemIndex(); + item.iTopIndex = iListBox->View()->TopItemIndex() - item.iIndex; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::LoadIndices +// ----------------------------------------------------------------------------- +// +void CProfileIndexHandler::LoadIndices() + { + if( !iListBox ) + { + return; + } + + const TInt KMaxLastIndex( 2 ); // Three items fit to screen at the same time + + TInt lastIndex( iListBox->Model()->MatchableTextArray()->MdcaCount() - 1 ); + + TItem item = iIndexArray[iCurrentProfileIndex]; + if( item.iIndex > lastIndex ) + { + item.iIndex = lastIndex; + } + if( item.iIndex < 0 ) + { + item.iIndex = 0; + } + item.iTopIndex += item.iIndex; + if( item.iTopIndex > lastIndex - KMaxLastIndex ) + { + item.iTopIndex = lastIndex - KMaxLastIndex; + } + if( item.iTopIndex < 0 ) + { + item.iTopIndex = 0; + } + + iListBox->View()->SetCurrentItemIndex( item.iIndex ); + iListBox->View()->SetTopItemIndex( item.iTopIndex ); + iListBox->DrawDeferred(); + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::IndexAt +// ----------------------------------------------------------------------------- +// +TInt CProfileIndexHandler::IndexAt( TInt aIndex ) const + { + return iIndexArray[aIndex].iIndex; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::TopIndexAt +// ----------------------------------------------------------------------------- +// +TInt CProfileIndexHandler::TopIndexAt( TInt aIndex ) const + { + return iIndexArray[aIndex].iTopIndex; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::RemoveAndInsert +// ----------------------------------------------------------------------------- +// +TInt CProfileIndexHandler::RemoveAndInsert( + TInt aOldIndex, TInt aNewIndex, TInt aIndexValue, TInt aTopIndexValue ) + { + TInt count( iIndexArray.Count() ); + if( aOldIndex < 0 || aOldIndex >= count ) + { + return KErrNotFound; + } + if( aNewIndex < 0 || aNewIndex > count ) + { + return KErrArgument; + } + iIndexArray.Remove( aOldIndex ); + TItem item = { aIndexValue, aTopIndexValue }; + iIndexArray.Insert( item, aNewIndex ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::SetListBox +// ----------------------------------------------------------------------------- +// +void CProfileIndexHandler::SetListBox( CEikListBox* aListBox ) + { + iListBox = aListBox; + } + +// ----------------------------------------------------------------------------- +// CProfileIndexHandler::ReadIdArrayAndUpdateL +// ----------------------------------------------------------------------------- +// +TInt CProfileIndexHandler::ReadIdArrayAndUpdateL() + { + // Index of the profile before the engine rearranges the profiles. + TInt oldProfileIndex( iCurrentProfileIndex ); + + // ID of the profile so that we can find it after the engine + // rearranges the profiles. + TInt profileId( iEngineHandler.IdForIndex( oldProfileIndex ) ); + + // Store the indices for edited profile. + StoreIndices(); + + TInt newItemIndex( IndexAt( oldProfileIndex ) ); + TInt newTopItemIndex( TopIndexAt( oldProfileIndex ) ); + + // Refresh profile names. Order of the profiles may change. + iEngineHandler.ReadIdArrayL(); + + // Find out which of the profiles is now the edited profile + TInt newProfileIndex( iEngineHandler.IdArray()->FindById( profileId ) ); + + // Set it to current profile + SetCurrentProfileIndex( newProfileIndex ); + + // Update indices + User::LeaveIfError( RemoveAndInsert( oldProfileIndex, newProfileIndex, + newItemIndex, newTopItemIndex ) ); + + return newProfileIndex; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2002 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: Setting item class for keypad volume setting. +* +*/ + + + +// INCLUDES +#include + +#include "CProfileKeypadVolumeSettingItem.h" +#include "CProfileKeypadVolumeSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingItem::CProfileKeypadVolumeSettingItem +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CProfileKeypadVolumeSettingItem::CProfileKeypadVolumeSettingItem( + TInt aIdentifier, + TInt& aValue, + CAknKeySoundSystem* aSoundSystem ) + : CAknEnumeratedTextPopupSettingItem( aIdentifier, aValue ), + iSoundSystem( aSoundSystem ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CProfileKeypadVolumeSettingItem::CompleteConstructionL() + { + CAknEnumeratedTextPopupSettingItem::CompleteConstructionL(); + CArrayPtr* array = EnumeratedTextArray(); + TInt count( array->Count() ); + HBufC* text = NULL; + while( count-- ) + { + text = array->At( count )->Value(); + TPtr modifiable( text->Des() ); + AknTextUtils::LanguageSpecificNumberConversion( modifiable ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingItem::CreateSettingPageL +// ----------------------------------------------------------------------------- +// +CAknSettingPage* CProfileKeypadVolumeSettingItem::CreateSettingPageL() + { + return new( ELeave ) CProfileKeypadVolumeSettingPage( + SettingPageResourceId(), + *QueryValue(), + iSoundSystem ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,74 @@ +/* +* Copyright (c) 2002 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: Setting item class for keypad volume setting. +* +*/ + + + +#ifndef CPROFILEKEYPADVOLUMESETTINGITEM_H +#define CPROFILEKEYPADVOLUMESETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CAknSettingPage; +class CAknKeySoundSystem; + +// CLASS DECLARATION +/** +* Setting item class for keypad volume setting. +* CProfileKeypadVolumeSettingItem extends CAknEnumeratedTextPopupSettingItem +* in order to launch +* CProfileKeypadVolumeSettingPage instead of CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileKeypadVolumeSettingItem ) + : public CAknEnumeratedTextPopupSettingItem + { + public: // Constructor + + /** + * C++ constructor. + */ + CProfileKeypadVolumeSettingItem( + TInt aIdentifier, + TInt& aValue, + CAknKeySoundSystem* aSoundSystem ); + + private: // Functions from base classes + + /** + * From CAknEnumeratedTextPopupSettingItem + */ + void CompleteConstructionL(); + + /** + * From CAknEnumeratedTextPopupSettingItem + */ + CAknSettingPage* CreateSettingPageL(); + + private: // Data + + // Ref: Pointer to AVKON key sound system + CAknKeySoundSystem* iSoundSystem; + + }; + +#endif // CPROFILEKEYPADVOLUMESETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,198 @@ +/* +* Copyright (c) 2002 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: Setting page class for keypad volume setting. +* +*/ + + + +// INCLUDES +#include "CProfileKeypadVolumeSettingPage.h" + +#include +#include +#include // For StringLoader +#include // For CAknInformationNote +#include + +// for power save mode handling +#include +#include +#include + +namespace + { +// CONSTANTS +#ifdef __WINS__ + // These constants are for WINS only because sequences are not played in emulator. + const TInt KKeypadToneFrequency( 1760 ); /// In Hz + const TInt KKeypadToneDuration( 20000 ); /// In microseconds +#endif // __WINS__ + } +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingPage::CProfileKeypadVolumeSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileKeypadVolumeSettingPage::CProfileKeypadVolumeSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue, + CAknKeySoundSystem* aSoundSystem ) + : CAknPopupSettingPage( aResourceID, aQueryValue ), + iSoundSystem( aSoundSystem ) + { + } + +// Destructor. +CProfileKeypadVolumeSettingPage::~CProfileKeypadVolumeSettingPage() + { + if( iAudioUtility ) + { + if( iAudioUtility->State() != EMdaAudioToneUtilityNotReady ) + { + // Set volume back to original + iAudioUtility->SetVolume( iOriginalVolume ); + } + delete iAudioUtility; + } + if( iSoundSystem ) + { + // Re-enable keypad sounds + iSoundSystem->PopContext(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingPage::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileKeypadVolumeSettingPage::ConstructL() + { + User::LeaveIfNull( iSoundSystem ); + + CAknPopupSettingPage::ConstructL(); + + // Own construction starts here + + // Disable keypad sounds + iSoundSystem->PushContextL( R_AVKON_SILENT_SKEY_LIST ); + + // Create audio player and prepare to play a tone + iAudioUtility = CMdaAudioToneUtility::NewL( *this ); + +#ifdef __WINS__ // Sequences are not supported on emulator + iAudioUtility->PrepareToPlayTone( KKeypadToneFrequency, + TTimeIntervalMicroSeconds( KKeypadToneDuration ) ); +#else + CAknSoundInfo* soundInfo = CAknSoundInfo::NewL(); + CleanupStack::PushL( soundInfo ); + User::LeaveIfError( iSoundSystem->RequestSoundInfoL( + EAvkonSIDStandardKeyClick, *soundInfo ) ); + iAudioUtility->PrepareToPlayDesSequence( *soundInfo->iSequence ); + CleanupStack::PopAndDestroy( soundInfo ); +#endif // __WINS__ + } + + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingPage::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CProfileKeypadVolumeSettingPage::OkToExitL( TBool aAccept ) + { + if( aAccept ) + { + TInt psm = EPsmsrvModeNormal; + CRepository* cenrep = CRepository::NewLC( KCRUidPowerSaveMode ); + cenrep->Get( KPsmCurrentMode, psm ); + CleanupStack::PopAndDestroy( cenrep ); + if( psm == EPsmsrvModePowerSave ) + { + HBufC* buf = StringLoader::LoadLC( R_PROFILE_TEXT_PSM_INFONOTE ); + CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote( EFalse ); + queryDialog->ExecuteLD( *buf ); + CleanupStack::PopAndDestroy( buf ); + } + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingPage::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CProfileKeypadVolumeSettingPage::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + // Cache pointer used multiple times + CAknSetStyleListBox* listBoxControl = ListBoxControl(); + // Get current index from listbox + TInt oldIndex( listBoxControl->CurrentItemIndex() ); + // Call OfferKeyEventL of base class + TKeyResponse response( CAknPopupSettingPage::OfferKeyEventL( aKeyEvent, aType ) ); + // Get audio player state + TInt state( iAudioUtility->State() ); + // Get new index from listbox + TInt newIndex( listBoxControl->CurrentItemIndex() ); + + if( ( oldIndex != newIndex ) && // check if listbox focus has changed + ( newIndex != 0 ) && // check that new focus is not on first item "Off" + ( state != EMdaAudioToneUtilityNotReady ) ) // check that tone player is ready + { + // Resolve last index of listbox + TInt lastIndex( listBoxControl->Model()->MatchableTextArray()->MdcaCount() - 1 ); + // Resolve correct volume from current listbox index + TInt volume( iAudioUtility->MaxVolume() * newIndex / lastIndex ); + + if( state == EMdaAudioToneUtilityPlaying ) + { + // Cancel play if still playing previous keyclick + iAudioUtility->CancelPlay(); + } + iAudioUtility->SetVolume( volume ); + iAudioUtility->Play(); + } + return response; + } + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingPage::MatoPrepareComplete +// ----------------------------------------------------------------------------- +// +void CProfileKeypadVolumeSettingPage::MatoPrepareComplete( TInt aError ) + { + if( !aError ) + { + // After prepare is completed, store original volume level + iOriginalVolume = iAudioUtility->Volume(); + // Set priority + iAudioUtility->SetPriority( KAudioPriorityKeyPress, + TMdaPriorityPreference( KAudioPrefKeyPressPreview ) ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileKeypadVolumeSettingPage::MatoPlayComplete +// Error ignored because if playing of the keypad tone is unsuccesful +// nothing can be done. +// ----------------------------------------------------------------------------- +// +void CProfileKeypadVolumeSettingPage::MatoPlayComplete( TInt /*aError*/ ) + { + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileKeypadVolumeSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,103 @@ +/* +* Copyright (c) 2002 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: Setting page class for keypad volume setting. +* +*/ + + + +#ifndef CPROFILEKEYPADVOLUMESETTINGPAGE_H +#define CPROFILEKEYPADVOLUMESETTINGPAGE_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CAknKeySoundSystem; + +// CLASS DECLARATION +/** +* Setting page class for keypad volume setting. +* CProfileKeypadVolumeSettingPage extends CAknPopupSettingPage in order to +* play a preview sound of the selected keypad volume when changing focus +* in the setting list. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +class CProfileKeypadVolumeSettingPage : public CAknPopupSettingPage + , public MMdaAudioToneObserver + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource id. + * @param aQueryValue + * @param aSoundSystem Pointer to AVKON key sound system. + */ + CProfileKeypadVolumeSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue, + CAknKeySoundSystem* aSoundSystem ); + + /** + * Destructor. + */ + ~CProfileKeypadVolumeSettingPage(); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + private: // Function from base classes + + /** + * From CCoeControl + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + + /** + * From CAknSettingPage + */ + TBool OkToExitL( TBool aAccept ); + + /** + * From MMdaAudioToneObserver + */ + void MatoPrepareComplete( TInt aError ); + + /** + * From MMdaAudioToneObserver + */ + void MatoPlayComplete( TInt aError ); + + private: // Data + + // Ref: Pointer to AVKON key sound system. + CAknKeySoundSystem* iSoundSystem; + + // Own: Media client to play audio. + CMdaAudioToneUtility* iAudioUtility; + + // Original volume value. + TInt iOriginalVolume; + + }; + +#endif // CPROFILEKEYPADVOLUMESETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,59 @@ +/* +* Copyright (c) 2002 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: Setting item class for profile name setting. +* +*/ + + + +// INCLUDES +#include "CProfileNameSettingItem.h" +#include "CProfileNameSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileNameSettingItem::CProfileNameSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileNameSettingItem::CProfileNameSettingItem( + TInt aIdentifier, + TDes& aText, + CProfileEngineHandler& aEngineHandler ) + : CAknTextSettingItem( aIdentifier, aText ), + iEngineHandler( aEngineHandler ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileNameSettingItem::EditItemL +// We do not need to know if the setting page has been launched +// with selection key or from Options menu. +// ----------------------------------------------------------------------------- +// +void CProfileNameSettingItem::EditItemL( TBool /* aCalledFromMenu */ ) + { + CProfileNameSettingPage* dlg = new( ELeave ) CProfileNameSettingPage( + SettingPageResourceId(), + InternalTextPtr(), + SettingPageFlags(), + iEngineHandler ); + SetSettingPage( dlg ); + dlg->SetSettingPageObserver( this ); + dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); + SetSettingPage( NULL ); // it is deleted now + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2002 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: Setting item class for profile name setting. +* +*/ + + + +#ifndef CPROFILENAMESETTINGITEM_H +#define CPROFILENAMESETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CProfileEngineHandler; + +// CLASS DECLARATION +/** +* Setting item class for profile name setting. +* CProfileNameSettingItem extends CAknTextSettingItem in order to launch +* CProfileNameSettingPage instead of CCAknTextSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileNameSettingItem ) : public CAknTextSettingItem + { + public: // Constructor + + /** + * C++ constructor. + * @param aIdentifier Setting item identifier. + * @param aText A descriptor where new profile name is stored. + * @param aEngineHandler Profile Engine Handler. + */ + CProfileNameSettingItem( + TInt aIdentifier, + TDes& aText, + CProfileEngineHandler& aEngineHandler ); + + private: // Functions from base classes + + /** + * From CAknSettingItem + */ + void EditItemL( TBool aCalledFromMenu ); + + private: // Data + + // Profile Engine Handler. + CProfileEngineHandler& iEngineHandler; + + }; + +#endif // CPROFILENAMESETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 2002 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: Setting page class for profile name setting. +* +*/ + + + +// INCLUDES +#include "CProfileNameSettingPage.h" + +#include +#include +#include +#include + +#include "CProfileEngineHandler.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileNameSettingPage::CProfileNameSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileNameSettingPage::CProfileNameSettingPage( + TInt aResourceID, + TDes& aText, + TInt aTextSettingPageFlags, + CProfileEngineHandler& aEngineHandler ) + : CAknTextSettingPage( aResourceID, aText, aTextSettingPageFlags ), + iEngineHandler( aEngineHandler ), + iOriginalText( aText ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileNameSettingPage::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CProfileNameSettingPage::OkToExitL( TBool aAccept ) + { + if( aAccept ) + { + CEikEdwin* edwin = TextControl(); + TBuf editedName; + edwin->GetText( editedName ); + + if( editedName.Compare( iOriginalText ) == 0 ) + { + return ETrue; + } + if( iEngineHandler.IdArray()->FindByName( editedName ) != KErrNotFound ) + { + // A profile was found that has the same name which user just entered + // and it isn't the currently modified profile + + // Show error note + HBufC* errorText = StringLoader::LoadLC( R_PROFILE_TEXT_RENAME_ERROR ); + CAknErrorNote* note = new( ELeave ) CAknErrorNote( ETrue ); + note->ExecuteLD( *errorText ); + CleanupStack::PopAndDestroy( errorText ); + + // Set original text to editor + edwin->SetTextL( &iOriginalText ); + + // Don't let the setting page exit + return EFalse; + } + } + return ETrue; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNameSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2002 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: Setting page class for profile name setting. +* +*/ + + + +#ifndef CPROFILENAMESETTINGPAGE_H +#define CPROFILENAMESETTINGPAGE_H + +// INCLUDES +#include "CProfileStruct.h" // KProfileMaxProfileNameLength +#include + +// FORWARD DECLARATIONS +class CProfileEngineHandler; + +// CLASS DECLARATION +/** +* Setting page class for profile name setting. +* CProfileNameSettingPage extends CAknTextSettingPage in order to check +* validity of user typed profile name. +* Error note is shown if entered profile name already exists. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileNameSettingPage ) : public CAknTextSettingPage + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource ID. + * @param aText The new profile name will be stored here. + * @param aTextSettingPageFlags Flags for the setting page. + * @param aEngineHandler Profile Engine Handler. + */ + CProfileNameSettingPage( + TInt aResourceID, + TDes& aText, + TInt aTextSettingPageFlags, + CProfileEngineHandler& aEngineHandler ); + + private: // Functions from base classes + + /** + * From CAknSettingPage + */ + TBool OkToExitL( TBool aAccept ); + + private: // Data + + /// Profile Engine Handler; + CProfileEngineHandler& iEngineHandler; + + /// The original profile name + TBuf iOriginalText; + + }; + +#endif // CPROFILENAMESETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNaviPaneContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileNaviPaneContainer.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,125 @@ +/* +* Copyright (c) 2002 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: Container for navi pane decorator. +* +*/ + + + +// INCLUDE FILES +#include "CProfileNaviPaneContainer.h" + +#include +#include +#include +#include // EEikStatusPaneUidNavi +#include // AknTextUtils +#include +#include +#include + +#include "CProfileEngineHandler.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileNaviPaneContainer::CProfileNaviPaneContainer +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileNaviPaneContainer::CProfileNaviPaneContainer( + CProfileEngineHandler& aEngineHandler ) + : iEngineHandler( aEngineHandler ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileNaviPaneContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileNaviPaneContainer::ConstructL( CEikStatusPane& aStatusPane ) + { + iNaviPane = static_cast< CAknNavigationControlContainer* >( + aStatusPane.ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); + iNaviDecorator = iNaviPane->CreateNavigationLabelL(); + iNaviPane->PushL( *iNaviDecorator ); + } + +// ----------------------------------------------------------------------------- +// CProfileNaviPaneContainer::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileNaviPaneContainer* CProfileNaviPaneContainer::NewL( + CEikStatusPane& aStatusPane, CProfileEngineHandler& aEngineHandler ) + { + CProfileNaviPaneContainer* self = + new( ELeave ) CProfileNaviPaneContainer( aEngineHandler ); + CleanupStack::PushL( self ); + self->ConstructL( aStatusPane ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CProfileNaviPaneContainer::~CProfileNaviPaneContainer() + { + Release(); + } + +// ----------------------------------------------------------------------------- +// CProfileNaviPaneContainer::SetNaviPaneTextL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CProfileNaviPaneContainer::SetNaviPaneTextL( const TDesC& aText ) + { + CAknNaviLabel* label = static_cast< CAknNaviLabel* >( + iNaviDecorator->DecoratedControl() ); + RBuf title; + title.CreateL( aText ); + CleanupClosePushL( title ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( title ); + label->SetTextL( title ); + CleanupStack::PopAndDestroy( &title ); + label->DrawDeferred(); + } + +// ----------------------------------------------------------------------------- +// CProfileNaviPaneContainer::SetNaviPaneTextL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CProfileNaviPaneContainer::SetNaviPaneTextL() + { + iEngineHandler.ReadIdArrayL(); + MProfilesNamesArray* nameArray = iEngineHandler.IdArray(); + TInt index( nameArray->FindById( iEngineHandler.Engine()->ActiveProfileId() ) ); + SetNaviPaneTextL( nameArray->ProfileName( index )->NaviName() ); + } + +// ----------------------------------------------------------------------------- +// CProfileNaviPaneContainer::SetNaviPaneTextL +// ----------------------------------------------------------------------------- +// +void CProfileNaviPaneContainer::Release() + { + if( iNaviDecorator ) + { + iNaviPane->Pop( iNaviDecorator ); + delete iNaviDecorator; + iNaviDecorator = NULL; + } + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 2002 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: Setting item class for ringing volume setting. +* +*/ + + + +// INCLUDES +#include "CProfilePlayingVolumeSettingItem.h" +#include "CProfilePlayingVolumeSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingItem::CProfilePlayingVolumeSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfilePlayingVolumeSettingItem::CProfilePlayingVolumeSettingItem( + TInt aIdentifier, + TInt& aRingingVolume, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TBool aDisplayQuery ) + : CAknVolumeSettingItem( aIdentifier, aRingingVolume ), + iRingingTone( aRingingTone ), + iRingingType( aRingingType ), + iVibratingAlert( aVibratingAlert ), + iDisplayQuery( aDisplayQuery ) + { + } + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingItem::EditItemL +// ----------------------------------------------------------------------------- +// +void CProfilePlayingVolumeSettingItem::EditItemL( TBool /* aCalledFromMenu */ ) + { + CProfilePlayingVolumeSettingPage* dlg = new( ELeave ) CProfilePlayingVolumeSettingPage( + SettingPageResourceId(), + InternalVolumeValue(), + iRingingTone, + iRingingType, + iVibratingAlert, + iDisplayQuery ); + SetSettingPage( dlg ); + SettingPage()->SetSettingPageObserver( this ); + SettingPage()->ExecuteLD(); + SetSettingPage( NULL ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2002 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: Setting item class for ringing volume setting. +* +*/ + + + +#ifndef CPROFILEPLAYINGVOLUMESETTINGITEM_H +#define CPROFILEPLAYINGVOLUMESETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS + +// CLASS DECLARATION +/** +* Setting item class for ringing volume setting. +* CProfilePlayingVolumeSettingItem extends CAknVolumeSettingItem +* in order to launch CProfilePlayingVolumeSettingPage +* instead of CAknVolumeSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfilePlayingVolumeSettingItem ) : public CAknVolumeSettingItem + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Setting item identifier. + * @param aRingingVolume Ringing volume. + * @param aRingingTone Ringing tone. + * @param aRingingType Ringint type. + * @param aVibratingAlert Vibrating alert. + * @param aDisplayQuery Information of whether + * CProfilePlayingVolumeSettingPage + * should display confirmation note + * when setting maximum volume + */ + CProfilePlayingVolumeSettingItem( + TInt aIdentifier, + TInt& aRingingVolume, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TBool aDisplayQuery ); + + private: // Functions from base classes + + /** + * From CAknVolumeSettingItem + */ + void EditItemL( TBool aCalledFromMenu ); + + private: // Data + + // Ringing tone. + const TDesC& iRingingTone; + + // Ringing type. + const TInt& iRingingType; + + // Vibrating alert. + const TBool& iVibratingAlert; + + // Display confirmation note. + const TBool iDisplayQuery; + + }; + +#endif // CPROFILEPLAYINGVOLUMESETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,250 @@ +/* +* Copyright (c) 2002 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: Setting page class for ringing volume setting. +* +*/ + + + +// INCLUDES +#include "CProfilePlayingVolumeSettingPage.h" + +#include +#include +#include +#include "CProfileStruct.h" // KProfileMaxProfileNameLength +#include // For RApaLsSession +#include // For BaflUtils +#include +#include + +// CONSTANTS +namespace + { + const TInt KRepeatDelayInMicroSeconds( 1000000 ); // One second + +#ifdef RD_VIDEO_AS_RINGING_TONE + _LIT( KFLDCommonVideoType, "video/*" ); + _LIT( KFLDRM1VideoMimeType, "application/vnd.rn-realmedia" ); + _LIT( KFLDRM2VideoMimeType, "application/x-pn-realmedia" ); + _LIT( KFLDSDPVideoMimeType, "application/sdp" ); +#endif + + } +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingPage::CProfilePlayingVolumeSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfilePlayingVolumeSettingPage::CProfilePlayingVolumeSettingPage( + TInt aResourceID, + TInt& aVolume, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + TBool aDisplayQuery ) + : CAknVolumeSettingPage( aResourceID, aVolume ), + iRingingTone( aRingingTone ), + iRingingType( aRingingType ), + iVibratingAlert( aVibratingAlert ), + iDisplayQuery( aDisplayQuery ) + { + } + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingPage::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfilePlayingVolumeSettingPage::ConstructL() + { + CAknVolumeSettingPage::ConstructL(); + TBool showErrorMsgs( EFalse ); + + iFs = new ( ELeave ) RFs; + User::LeaveIfError( iFs->Connect() ); + + CheckRingingToneTypeL(); + + iController = CFLDController::NewL( showErrorMsgs, KRepeatDelayInMicroSeconds ); + iController->CompleteConstructionL( Window() ); + iController->SetRingingType( iRingingType ); + iController->SetVibra( iVibratingAlert ); + } + +// Destructor. +CProfilePlayingVolumeSettingPage::~CProfilePlayingVolumeSettingPage() + { + if( iFs ) + { + iFs->Close(); + } + delete iFs; + delete iController; + delete iPreviewTone; + } + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingPage::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CProfilePlayingVolumeSettingPage::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + if( aType == EEventKey ) + { + if( ( aKeyEvent.iCode == EKeyLeftArrow ) || + ( aKeyEvent.iCode == EKeyRightArrow ) ) + { + // Cache pointer + CAknVolumeControl* volumeControl = VolumeControl(); + // Get current volume level + TInt currentVolume( volumeControl->Value() ); + // Call base classes method + TKeyResponse response( CAknVolumeSettingPage::OfferKeyEventL( aKeyEvent, aType ) ); + // Get new volume level + TInt newVolume( volumeControl->Value() ); + if( newVolume != currentVolume ) + { + // Volume level has changed + CheckRingingToneTypeL(); + iController->SetVolume( newVolume ); + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EFocusChanged, iPreviewTone->Des() ); + } + return response; + } + // Cancels playback on any key event + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EOtherKeyEvent, iPreviewTone->Des() ); + } + return CAknVolumeSettingPage::OfferKeyEventL( aKeyEvent, aType ); + } + + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingPage::HandlePointerEventL +// ----------------------------------------------------------------------------- +// +void CProfilePlayingVolumeSettingPage::HandlePointerEventL( + const TPointerEvent& aPointerEvent ) + { + if( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + // Get current volume level + iTempVolume = VolumeControl()->Value(); + } + else if( aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + CAknVolumeSettingPage::HandlePointerEventL( aPointerEvent ); + // Get new volume level + TInt newVolume( VolumeControl()->Value() ); + if( newVolume != iTempVolume ) + { + // Volume level has changed + CheckRingingToneTypeL(); + iController->SetVolume( newVolume ); + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EFocusChanged, iPreviewTone->Des() ); + } + return; + } + // Cancels playback on any key event + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EOtherKeyEvent, iPreviewTone->Des() ); + + CAknVolumeSettingPage::HandlePointerEventL( aPointerEvent ); + } + + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingPage::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CProfilePlayingVolumeSettingPage::OkToExitL(TBool aAccept) + { + if( aAccept ) + { + CAknVolumeControl* volumeControl = VolumeControl(); + if(( volumeControl->Value() == KProfileMaxVolumeLevel ) // Maximum volume level + && (iDisplayQuery)) // Maximum volume query is wanted + { + iController->HandleFileListBoxEventL( + MFLDFileListBoxObserver::EListBoxClosed, KNullDesC ); + + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + TBool returnValue( dlg->ExecuteLD( R_PROFILE_VOLUME_CONFIRMATION_QUERY ) ); + if( !returnValue ) + { + // User didn't want to set volume to maximum level, set it one down. + volumeControl->SetValue( KProfileMaxVolumeLevel - 1 ); + volumeControl->DrawDeferred(); + } + return returnValue; + } + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CProfilePlayingVolumeSettingPage::CheckRingingToneTypeL +// ----------------------------------------------------------------------------- +// +void CProfilePlayingVolumeSettingPage::CheckRingingToneTypeL() + { + // Get default tone from cenrep + TFileName defaultTone; + CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine ); + CleanupStack::PushL( cenrep ); + User::LeaveIfError( cenrep->Get( KProEngDefaultRingingTone, defaultTone ) ); + CleanupStack::PopAndDestroy( cenrep ); + + if( !BaflUtils::FileExists( *iFs, iRingingTone ) ) + { + // If the file does not exist, use default tone for volume preview + iPreviewTone = defaultTone.AllocL(); + return; + } + +#ifdef RD_VIDEO_AS_RINGING_TONE + // Find out MIME type + RApaLsSession apaLsSession; + User::LeaveIfError( apaLsSession.Connect() ); + CleanupClosePushL( apaLsSession ); + TUid dummyUid = { 0 }; // instantiate as zero + TDataType dataType( dummyUid ); + User::LeaveIfError( + apaLsSession.AppForDocument( iRingingTone, dummyUid, dataType ) ); + CleanupStack::PopAndDestroy(); // apaLsSession.Close() + + // See if this is a video MIME type + if ( dataType.Des().MatchF( KFLDCommonVideoType ) == 0 || + dataType.Des().CompareF( KFLDRM1VideoMimeType ) == 0 || + dataType.Des().CompareF( KFLDRM2VideoMimeType ) == 0 || + dataType.Des().CompareF( KFLDSDPVideoMimeType ) == 0 ) + { + iPreviewTone = defaultTone.AllocL(); + } + else + { + iPreviewTone = iRingingTone.AllocL(); + } +#else + iPreviewTone = iRingingTone.AllocL(); +#endif + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfilePlayingVolumeSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,122 @@ +/* +* Copyright (c) 2002 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: Setting page class for ringing volume setting. +* +*/ + + + +#ifndef CPROFILEPLAYINGVOLUMESETTINGPAGE_H +#define CPROFILEPLAYINGVOLUMESETTINGPAGE_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFLDController; + +// CLASS DECLARATION +/** +* Setting page class for ringing volume setting. +* CProfilePlayingVolumeSettingPage extends CAknVolumeSettingPage in order to +* play a ringing tone at selected volume and to show a confirmation query +* if user selects the highest volume level. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfilePlayingVolumeSettingPage ) : public CAknVolumeSettingPage + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource ID. + * @param aVolume Selected ringing tone will be stored here. + * @param aRingingTone Ringing tone. + * @param aRingingType Ringing type. + * @param aVibratingAlert Vibrating alert. + * @param aDisplayQuery Info whether to show + * maximum volume query if volume is set to max + */ + CProfilePlayingVolumeSettingPage( + TInt aResourceID, + TInt& aVolume, + const TDesC& aRingingTone, + const TInt& aRingingType, + const TBool& aVibratingAlert, + const TBool aDisplayQuery ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CProfilePlayingVolumeSettingPage(); + + private: // Functions from base classes + + /** + * From CCoeControl + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + /** + * From CAknSettingPage + */ + TBool OkToExitL(TBool aAccept); + + private: // New functions + + /** + * Checks if ringing tone is video and if so, sets default tone + */ + void CheckRingingToneTypeL(); + + private: // Data + + // Ringing tone. + const TDesC& iRingingTone; + + // Ringing type. + const TInt& iRingingType; + + // Vibrating alert. + const TBool& iVibratingAlert; + + // Own: File List Dialog + CFLDController* iController; + + // Information of whether to display + // maximum volume query dialog + const TBool iDisplayQuery; + + // Preview tone: either ringing tone or default tone + HBufC* iPreviewTone; + + // Fileserver session + RFs* iFs; + + // Temporary volume value + TInt iTempVolume; + + }; + +#endif // CPROFILEPLAYINGVOLUMESETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileSettingsContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileSettingsContainer.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,1543 @@ +/* +* Copyright (c) 2002 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: Container class of settings view. +* +*/ + + + +// CLASS HEADER +#include "CProfileSettingsContainer.h" + +// INTERNAL INCLUDES +#include "CProfileEngineHandler.h" +#include "CProfileIndexHandler.h" +#include "CProfileTabHandler.h" +#include "ProfileSettingsView.hrh" +#include "CProfile3dSettingItem.h" +#include "CProfileFeedbackSettingItem.h" +#include "CProfileVibraSettingItem.h" +#include "CProfilePlayingVolumeSettingItem.h" +#include "CProfileNameSettingItem.h" +#include "CProfileKeypadVolumeSettingItem.h" +#include "CProfileFileListSettingItem.h" +#include "CProfileAlertForSettingItem.h" +#include "CProfileStruct.h" +#include "MProfilesLocalFeatures.h" +#include "ProfilesVariant.hrh" // KProEngFeatureIdVTRingingTone +#include "CProfileSettingsView.h" +#include "MProfileViewHandler.h" +#include "ProfilesDebug.h" + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include // For BaflUtils +#include // For StringLoader +#include // For KCRUidProfileEngine +#include // For KProEngDefaultRingingTone +#include // For CAknQueryDialog +#include "CProfileNaviPaneContainer.h" // For CProfileNaviPaneContainer +#include // For CAknInformationNote + +// for power save mode handling +#include +#include +#include +#include +#include + +namespace + { + // CONSTANTS + const TUid KUidProfileApp = { 0x100058F8 }; // UID of the application + const TInt KVoIPOFF = 0; + + const TInt KFileCheckDelay = 100000; // microseconds + const TInt KFileCheckInterval = 5000000; + + _LIT( KSettingsViewResourceFileName, "z:PROFILESETTINGSVIEW.RSC" ); + + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::CProfileSettingsContainer +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileSettingsContainer::CProfileSettingsContainer( + MProfileViewHandler& aProfileViewHandler, + CProfileEngineHandler& aEngineHandler, + MProfileExternalSettingsHandler& aExternalSettingsHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane ) + : + iResourceLoader( *iCoeEnv ), + iProfileViewHandler( aProfileViewHandler ), + iEngineHandler( aEngineHandler ), + iExternalSettingsHandler( aExternalSettingsHandler ), + iIndexHandler( aIndexHandler ), + iTabHandler( aTabHandler ), + iTitlePane( aTitlePane ), + iAlternateLineService( EFalse ) + { + SetMopParent( &( iProfileViewHandler.View() ) ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::ConstructL( const TRect& aRect, + TInt aResourceId ) + { + iFs = new ( ELeave ) RFs; + User::LeaveIfError( iFs->Connect() ); + + PRODEBUG1( "CProfileSettingsContainer ConstructL(%d)",aResourceId ); + if( iIndexHandler ) + { + iIndexHandler->CreateIndexArrayL(); + } + + iCopyProfile = CProfileStruct::NewL(); + + iLocalFeatures = &( iEngineHandler.Engine()->LocalFeatures() ); + + // Read settings of currently selected profile + ReadProfileL(); + + // Read alternate line service setting and register as observer + if( iSSSettings.Open() == KErrNone ) + { + iSSSettings.Register( ESSSettingsAls, *this ); // ignore return value + TInt als( ESSSettingsAlsNotSupported ); + iSSSettings.Get( ESSSettingsAls, als ); // ignore return value + if( als != ESSSettingsAlsNotSupported ) + { + iAlternateLineService = ETrue; + } + } + + // CRepository session for TTS ringingtone + iTTSSession = CRepository::NewL( KCRUidProfilesLV ); + + iDefaultTone = new( ELeave ) TFileName(); + + iSession = CRepository::NewL(KCRUidProfileEngine); + User::LeaveIfError( iSession->Get( KProEngDefaultRingingTone, *iDefaultTone ) ); + + TInt VoIPSupported( 0 ); + iVoIPVariation = CRepository::NewL( KCRUidTelephonySettings ); + iVoIPVariation->Get( KDynamicVoIP, VoIPSupported ); + iVoIPVariationNotifier = CCenRepNotifyHandler::NewL( *this, *iVoIPVariation, + CCenRepNotifyHandler::EIntKey, KDynamicVoIP ); + iVoIPVariationNotifier->StartListeningL(); + + iVoIPStatus = KVoIPOFF != VoIPSupported; + + iKeySounds = static_cast< CAknAppUi* > ( iEikonEnv->AppUi() )->KeySounds(); + + TParse* fp = new(ELeave) TParse(); + fp->Set(KSettingsViewResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL); + TFileName resourceFileName( fp->FullName() ); + delete fp; + + iResourceLoader.OpenL( resourceFileName ); + + // Construct the setting items + CAknSettingItemList::ConstructFromResourceL( aResourceId ); + // Hide all items that must be hidden + SetHiddenFlagsL(); + + if( iIndexHandler ) + { + iIndexHandler->SetListBox( ListBox() ); + } + if( iTabHandler ) + { + iTabHandler->SetTabObserver( this ); + } + else + { + // If the iTabHandler is NULL, set the navi label text to + // the name of current profile. + iNaviPaneContainer = CProfileNaviPaneContainer::NewL( + *( iAvkonAppUi->StatusPane() ), iEngineHandler ); + + MProfilesNamesArray* nameArray = iEngineHandler.IdArray(); + if( iIndexHandler ) + { + iNaviPaneContainer->SetNaviPaneTextL( + nameArray->MdcaPoint( iIndexHandler->CurrentProfileIndex() ) ); + } + } + + iNotifier = CProfileChangeNotifyHandler::NewL( this ); + + iExternalSettingsHandler.SetObserver( *this ); + SetRect( aRect ); + ActivateL(); + PRODEBUG1( "CProfileSettingsContainer ConstructL(%d) return",aResourceId ); + + //CheckFileExistenceL(); + // If CheckFileExistenceL is called directly from + // ConstructL, DoActivateL in ProfileApp::CProfileSettingsView will be + // blocked while the notes are displayed, causing problems. + // This timer will trigger only once (after 100 ms). After + // that it will be destroyed. + iPeriodic = CPeriodic::NewL( CActive::EPriorityStandard ); + iPeriodic->Start(KFileCheckDelay, + KFileCheckInterval, + TCallBack( CProfileSettingsContainer::StartFileCheckL, this ) + ); + + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::NewL +// Two-phased constructor. Note, this constructor is DEPRECATED and will return +// only NULL if called. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileSettingsContainer* CProfileSettingsContainer::NewL( + CAknView& /* aAknView */, + CProfileEngineHandler& /* aEngineHandler */, + CProfileIndexHandler* /* aIndexHandler */, + CProfileTabHandler* /* aTabHandler */, + CAknTitlePane* /* aTitlePane */ ) + { + return NULL; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileSettingsContainer* CProfileSettingsContainer::NewL( + MProfileViewHandler& aProfileViewHandler, + CProfileEngineHandler& aEngineHandler, + MProfileExternalSettingsHandler& aExternalSettingsHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane ) + { + return CProfileSettingsContainer::NewL( aProfileViewHandler, aEngineHandler, + aExternalSettingsHandler, aIndexHandler, aTabHandler, aTitlePane, + R_PROFILE_SETTING_ITEM_LIST ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileSettingsContainer* CProfileSettingsContainer::NewL( + MProfileViewHandler& aProfileViewHandler, + CProfileEngineHandler& aEngineHandler, + MProfileExternalSettingsHandler& aExternalSettingsHandler, + CProfileIndexHandler* aIndexHandler, + CProfileTabHandler* aTabHandler, + CAknTitlePane* aTitlePane, + TInt aResourceId ) + { + CProfileSettingsContainer* self = new( ELeave ) CProfileSettingsContainer( + aProfileViewHandler, aEngineHandler, aExternalSettingsHandler, + aIndexHandler, aTabHandler, aTitlePane ); + CleanupStack::PushL( self ); + self->ConstructL( aProfileViewHandler.View().ClientRect(), aResourceId ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor. +CProfileSettingsContainer::~CProfileSettingsContainer() + { + if( iPeriodic ) + { + iPeriodic->Cancel(); + delete iPeriodic; + } + + if( iFs ) + { + iFs->Close(); + } + delete iFs; + + PRODEBUG( "~CProfileSettingsContainer begin" ); + delete iNotifier; + PRODEBUG( "~CProfileSettingsContainer 2" ); + if( iTabHandler ) + { + iTabHandler->SetTabObserver( NULL ); + } + PRODEBUG( "~CProfileSettingsContainer 3" ); + if( iIndexHandler ) + { + iIndexHandler->SetListBox( NULL ); + } + PRODEBUG( "~CProfileSettingsContainer 4" ); + iResourceLoader.Close(); + PRODEBUG( "~CProfileSettingsContainer 5" ); + ReleaseProfile(); + PRODEBUG( "~CProfileSettingsContainer 6" ); + delete iCopyProfile; + PRODEBUG( "~CProfileSettingsContainer 7" ); + + if ( iVoIPVariationNotifier ) + { + iVoIPVariationNotifier->StopListening(); + delete iVoIPVariationNotifier; + } + if ( iVoIPVariation ) + { + delete iVoIPVariation; + } + + delete iTTSSession; + delete iSession; + + delete iDefaultTone; + PRODEBUG( "~CProfileSettingsContainer 8" ); + + iSSSettings.Close(); + PRODEBUG( "~CProfileSettingsContainer end" ); + delete iNaviPaneContainer; + } + +// ------------------------------------------------------------------------------ +// CProfileSettingsContainer::StartFileCheckL +// ------------------------------------------------------------------------------ +// +TInt CProfileSettingsContainer::StartFileCheckL( TAny* aObj ) + { + static_cast(aObj)->DoFileCheckL(); + return 1; + } + +// ------------------------------------------------------------------------------ +// CProfileSettingsContainer::DoFileCheckL +// ------------------------------------------------------------------------------ +// +void CProfileSettingsContainer::DoFileCheckL() + { + if( iPeriodic ) + { + iPeriodic->Cancel(); + delete iPeriodic; + iPeriodic = NULL; + } + + CheckFileExistenceL(); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::AllowedToChange +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CProfileSettingsContainer::AllowedToChange( + TInt aSettingItemId ) const + { + TUint32 flags( iProfile->ModifiableFlags() ); + switch( aSettingItemId ) + { + // Fall through: If ringing tone is not allowed to change, then none of + // these setting items are allowed to change. + case EProfileSettingRingingToneId: + case EProfileSettingRingingToneLine1Id: + case EProfileSettingRingingToneLine2Id: + { + TInt profileId( 0 ); + // Get id of the edited profile + profileId=iProfile->ProfileName().Id(); + if( profileId == EProfileOffLineId ) + { + // VOIP Changes: WLAN can be enabled also in off-line profile + TBool featuresSupported( + FeatureManager::FeatureSupported(KFeatureIdCommonVoip) + && + FeatureManager::FeatureSupported(KFeatureIdProtocolWlan) + ); + return ( ( flags & EProfileFlagRingingTone ) && + featuresSupported && iVoIPStatus ); + } + else + { + return flags & EProfileFlagRingingTone; + } + } + + + case EProfileSettingVideoCallToneId: + { + return flags & EProfileFlagVideoCallRingingTone; + } + case EProfileSettingRingingTypeId: + { + return flags & EProfileFlagRingingType; + } + case EProfileSettingRingingVolumeId: + { + return flags & EProfileFlagRingingVolume; + } + case EProfileSettingMediaVolumeId: + { + return flags & EProfileFlagMediaVolume; + } + case EProfileSettingMessageAlertToneId: + { + return flags & EProfileFlagMessageAlertTone; + } + case EProfileSettingEmailAlertToneId: + { + return flags & EProfileFlagEmailAlertTone; + } + case EProfileSettingVibratingAlertId: + { + return flags & EProfileFlagVibratingAlert; + } + case EProfileSettingEmailVibratingAlertId: + { + return flags & EProfileFlagVibratingAlert; + } + case EProfileSettingKeypadVolumeId: + { + return flags & EProfileFlagKeypadVolume; + } + case EProfileSettingWarningAndGameTonesId: + { + return flags & EProfileFlagWarningTones; + } + case EProfileSettingTTSRingingToneId: + { + return flags & EProfileFlagTextToSpeechTone; + } + case EProfileSettingAlertForId: + { + return flags & EProfileFlagAlertFor; + } + case EProfileSettingProfileNameId: + { + return flags & EProfileFlagProfileName; + } + case EProfileSettingPTTRingingToneId: + { + return flags & EProfileFlagPttTone; + } + case EProfileSettingPTTStatusId: + { + return flags & EProfileFlagPttStatus; + } + case EProfileSettingTactileFeedbackId: + { + return flags & EProfileFlagTactileFeedback; + } + case EProfileSettingAudioFeedbackId: + { + return flags & EProfileFlagAudioFeedback; + } + case EProfileSetting3dEffectId: + { + return flags & EProfileFlag3DEffect; + } + case EProfileSetting3dEchoId: + { + return flags & EProfileFlag3DEcho; + } + + default: + { + return iExternalSettingsHandler.AllowedToChange( aSettingItemId ); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::ReleaseProfile +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::ReleaseProfile() + { + if( iProfile ) + { + iProfile->Release(); + iProfile = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::ReadProfileL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::ReadProfileL() + { + TInt profileId( KErrNotFound ); + if( iIndexHandler ) + { + // Index handler is set, get id of the edited profile + profileId = iEngineHandler.IdForIndex( + iIndexHandler->CurrentProfileIndex() ); + } + else + { + // Index handler is not set. + profileId = User::LeaveIfError( + iEngineHandler.Engine()->ActiveProfileId() ); + } + MProfileExtended* profile = iEngineHandler.Engine()->ProfileLC( profileId ); + iCopyProfile->LoadL( profile ); + CleanupStack::Pop(); // profile + ReleaseProfile(); // delete old iProfile + iProfile = profile; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::SetHiddenFlagsL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::SetHiddenFlagsL() + { + CAknSettingItemArray* array = SettingItemArray(); + TUint32 flags( iProfile->VisibleFlags() ); + TInt profileId( 0 ); + const MProfileTones& tones = iProfile->ProfileTones(); + const TProfileToneSettings& toneSettings = tones.ToneSettings(); + + TBool hide3DEcho = EFalse; + TInt effect = iProfile->ProfileExtraSettings().Profile3DToneSettings().Effect(); + if ( effect == EProfile3DEffectOff || effect == EProfile3DEffectStereoWidening ) + { + hide3DEcho = ETrue; + } + + // Get id of the edited profile + profileId=iProfile->ProfileName().Id(); + + if( profileId == EProfileOffLineId ) + { + TBool featuresSupported( + FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) && + FeatureManager::FeatureSupported( KFeatureIdProtocolWlan) ); + SetItemHidden( EProfileSettingRingingToneId, array, + ( iAlternateLineService ) || ( ( ~flags & EProfileFlagRingingTone ) + || !featuresSupported || !iVoIPStatus ) ); + SetItemHidden( EProfileSettingRingingToneLine1Id, array, + ( !iAlternateLineService ) || ( ( ~flags & EProfileFlagRingingTone ) + || !featuresSupported || !iVoIPStatus ) ); + SetItemHidden( EProfileSettingRingingToneLine2Id, array, + ( !iAlternateLineService ) || ( ( ~flags & EProfileFlagRingingTone ) + || !featuresSupported || !iVoIPStatus ) ); + SetItemHidden( EProfileSetting3dEffectId, array, + !( ( FeatureManager::FeatureSupported( KFeatureId3DRingingTones ) ) && + ( flags & EProfileFlag3DEffect ) && featuresSupported ) ); + SetItemHidden( EProfileSetting3dEchoId, array, + !( ( FeatureManager::FeatureSupported( KFeatureId3DRingingTones ) ) && + ( flags & EProfileFlag3DEcho ) && featuresSupported ) ); + } + else + { + SetItemHidden( EProfileSettingRingingToneId, array, + ( iAlternateLineService ) || ( ~flags & EProfileFlagRingingTone ) ); + SetItemHidden( EProfileSettingRingingToneLine1Id, array, + ( !iAlternateLineService ) || ( ~flags & EProfileFlagRingingTone ) ); + SetItemHidden( EProfileSettingRingingToneLine2Id, array, + ( !iAlternateLineService ) || ( ~flags & EProfileFlagRingingTone ) ); + SetItemHidden( EProfileSetting3dEffectId, array, + !( ( FeatureManager::FeatureSupported( KFeatureId3DRingingTones ) ) && + ( flags & EProfileFlag3DEffect ) ) ); + SetItemHidden( EProfileSetting3dEchoId, array, + !( ( FeatureManager::FeatureSupported( KFeatureId3DRingingTones ) ) && + ( flags & EProfileFlag3DEcho ) ) ); + } + + if ( hide3DEcho ) + { + SetItemHidden( EProfileSetting3dEchoId, array, ETrue ); + } + + SetItemHidden( EProfileSettingVideoCallToneId, array, + !( ( iLocalFeatures->IsFeatureSupported( + KProEngFeatureIdVTRingingTone ) ) && + ( flags & EProfileFlagVideoCallRingingTone ) && + FeatureManager::FeatureSupported( KFeatureIdCsVideoTelephony ) ) ); + + SetItemHidden( EProfileSettingMessageAlertToneId, array, + ~flags & EProfileFlagMessageAlertTone ); + + SetItemHidden( EProfileSettingEmailAlertToneId, array, + !( ( FeatureManager::FeatureSupported( KFeatureIdAlwaysOnLineEmail ) ) && + ( flags & EProfileFlagEmailAlertTone ) ) ); + + SetItemHidden( EProfileSettingRingingTypeId, array, + ~flags & EProfileFlagRingingType ); + + SetItemHidden( EProfileSettingRingingVolumeId, array, + ~flags & EProfileFlagRingingVolume ); + + SetItemHidden( EProfileSettingMediaVolumeId, array, + !( ( FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ) ) && + ( flags & EProfileFlagMediaVolume ) ) ); + + SetItemHidden( EProfileSettingVibratingAlertId, array, + ~flags & EProfileFlagVibratingAlert ); + + if(!iCopyProfile->iVibratingAlert) + { + SetItemHidden( EProfileSettingEmailVibratingAlertId, array,ETrue ); + } + else + { + SetItemHidden( EProfileSettingEmailVibratingAlertId, array,EFalse ); + } + + SetItemHidden( EProfileSettingKeypadVolumeId, array, + ~flags & EProfileFlagKeypadVolume ); + + SetItemHidden( EProfileSettingWarningAndGameTonesId, array, + ~flags & EProfileFlagWarningTones ); + + // Check if TTS ringingtone is supported + TBool textToSpeech( EFalse ); + User::LeaveIfError( iTTSSession->Get( KProfilesLVFlags, textToSpeech ) ); + textToSpeech &= KProEngFeatureIdTTSRingingTone; + + SetItemHidden( EProfileSettingTTSRingingToneId, array, + !( textToSpeech && ( flags & EProfileFlagTextToSpeechTone ) ) ); + + SetItemHidden( EProfileSettingAlertForId, array, + ~flags & EProfileFlagAlertFor ); + + SetItemHidden( EProfileSettingProfileNameId, array, + ~flags & EProfileFlagProfileName ); + + SetItemHidden( EProfileSettingPTTRingingToneId, array, + !( ( FeatureManager::FeatureSupported( KFeatureIdOmaPoc ) ) && + ( flags & EProfileFlagPttTone ) ) ); + + SetItemHidden( EProfileSettingPTTStatusId, array, + !( ( FeatureManager::FeatureSupported( KFeatureIdOmaPoc ) ) && + ( flags & EProfileFlagPttStatus ) ) ); + + SetItemHidden( EProfileSettingTactileFeedbackId, array, + !( ( FeatureManager::FeatureSupported( KFeatureIdTactileFeedback ) ) && + ( flags & EProfileFlagTactileFeedback ) ) ); + SetItemHidden( EProfileSettingAudioFeedbackId, array, + !( ( FeatureManager::FeatureSupported( KFeatureIdTactileFeedback ) ) && + ( flags & EProfileFlagAudioFeedback ) ) ); + + + // Check if SilentMode is supported + TBool silentMode( + iLocalFeatures->IsFeatureSupported( KProEngFeatureIdForceSilentMode ) ); + + if( ( silentMode ) && ( profileId == EProfileSilentId ) ) + { + SetItemHidden( EProfileSettingRingingToneId, array, ETrue ); + SetItemHidden( EProfileSettingRingingToneLine1Id, array, ETrue ); + SetItemHidden( EProfileSettingRingingToneLine2Id, array, ETrue ); + SetItemHidden( EProfileSettingVideoCallToneId, array, ETrue ); + SetItemHidden( EProfileSettingTTSRingingToneId, array, ETrue ); + SetItemHidden( EProfileSettingRingingTypeId, array, ETrue ); + SetItemHidden( EProfileSettingRingingVolumeId, array, ETrue ); + SetItemHidden( EProfileSettingMessageAlertToneId, array, ETrue ); + SetItemHidden( EProfileSettingEmailAlertToneId, array, ETrue ); + SetItemHidden( EProfileSettingKeypadVolumeId, array, ETrue ); + SetItemHidden( EProfileSettingWarningAndGameTonesId, array, ETrue ); + SetItemHidden( EProfileSettingPTTRingingToneId, array, ETrue ); + SetItemHidden( EProfileSettingProfileNameId, array, ETrue ); + SetItemHidden( EProfileSettingAudioFeedbackId, array, ETrue ); + SetItemHidden( EProfileSetting3dEffectId, array, ETrue ); + SetItemHidden( EProfileSetting3dEchoId, array, ETrue ); + } + + iExternalSettingsHandler.SetHiddenItems( *array ); + + if( iIndexHandler ) + { + iIndexHandler->LoadIndices(); + } + + HandleChangeInItemArrayOrVisibilityL(); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::UpdateSettingsL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::UpdateSettingsL( TBool aReadProfileSettings ) + { + // Set listbox invicible to avoid flicker + CEikListBox* listBox = ListBox(); + listBox->MakeVisible( EFalse ); + + // Leavable function calls must be trapped in order to set listbox + // back to visible again if a leave occurs + TRAPD( error, + if( aReadProfileSettings ) + { + ReadProfileL(); + } + LoadSettingsL(); // from CAknSettingItemList + SetHiddenFlagsL(); + ); + + if( aReadProfileSettings && iIndexHandler ) + { + // Set focus back on correct index + iIndexHandler->LoadIndices(); + } + + // Set listbox back to visible + listBox->MakeVisible( ETrue ); + + // Now proceed with the leave if one occured + User::LeaveIfError( error ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::EditItemL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CProfileSettingsContainer::EditItemL( TInt aIndex, TBool aCalledFromMenu ) + { + PRODEBUG1( "CProfileSettingsContainer EditItemL(%d) begin",aIndex ); + + // Prevent opening of several setting items + if( iItemEdited ) + { + return; + } + + CAknSettingItem* item = SettingItemArray()->At( aIndex ); + TInt identifier( item->Identifier() ); + + if ( PowerSaveMode( identifier ) ) + { + HBufC* buf = StringLoader::LoadLC( R_PROFILE_TEXT_PSM_INFONOTE ); + CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote( ETrue ); + queryDialog->ExecuteLD( *buf ); + CleanupStack::PopAndDestroy( buf ); + return; + } + + if( !AllowedToChange( identifier ) ) + { + // If a setting is not allowed to change, "swallow" list box event. + return; + } + + HBufC* titleText = NULL; + + if( ( identifier != EProfileSettingRingingToneId ) && + ( identifier != EProfileSettingRingingToneLine1Id ) && + ( identifier != EProfileSettingRingingToneLine2Id ) && + ( identifier != EProfileSettingVideoCallToneId ) && + ( identifier != EProfileSettingMessageAlertToneId ) && + ( identifier != EProfileSettingEmailAlertToneId ) && + ( identifier != EProfileSettingPTTRingingToneId ) ) + { + if( aCalledFromMenu || + !( identifier == EProfileSettingVibratingAlertId || + identifier == EProfileSettingEmailVibratingAlertId || + identifier == EProfileSettingWarningAndGameTonesId || + identifier == EProfileSettingTTSRingingToneId ) ) + { + // Set profile name as title pane text. + // Tone selections launch a pop-up, so title pane is not changed. + // Binary pop-up setting item with two available values does not + // launch a setting page when not called from menu so title pane + // is not changed. + if( iTitlePane ) + { + titleText = iTitlePane->Text()->AllocLC(); + SetTitlePaneTextL( iCopyProfile->iTitleName ); + } + } + } + + + TInt threeDEffect = iCopyProfile->i3DEffect; + if( identifier == EProfileSetting3dEffectId && iIndexHandler ) + { + iIndexHandler->StoreIndices(); + } + + TInt vibratingAlert = iCopyProfile->iVibratingAlert; + if( identifier == EProfileSettingVibratingAlertId && iIndexHandler ) + { + iIndexHandler->StoreIndices(); + } + + // Set boolean value to ETrue that we know that the settings container + // is in editing mode. + iItemEdited = ETrue; + // Store currently active profile id + TInt activeProfileId( iEngineHandler.Engine()->ActiveProfileId() ); + + // Trap to set boolean value back to EFalse after EditItemL finalized. + PRODEBUG1( "CProfileSettingsContainer EditItemL before list::EditItemL(%d)",aIndex ); + TRAPD( error, CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ) ); + PRODEBUG1( "CProfileSettingsContainer EditItemL after list::EditItemL(),error=%d",error ); + iItemEdited = EFalse; + User::LeaveIfError( error ); + + // We don't know whether user cancelled or oked the setting so we must + // store the data from setting item to the modified profile (iCopyProfile). + item->StoreL(); + // Compare the settings of the modified profile + // to the settings currently in Profile Engine. + if( !iCopyProfile->CompareL( iProfile ) ) + { + // Handle removing of DRM automated content + iCopyProfile->RemoveAutomatedContentL( iProfile ); + // Something has changed. Store settings of modified profile. + iCopyProfile->StoreL( iProfile ); + // Trap saving of the profile. If for example flash memory runs out + // we can still revert the UI to its previous state. + TRAP( error, iEngineHandler.Engine()->CommitChangeL( *iProfile ) ); + if( error != KErrNone || PowerSaveMode() ) + { + // An User::Leave occurred. Try to read old settings to memory. + ReadProfileL(); + // Update setting item so UI is left to correct state. + item->LoadL(); + item->UpdateListBoxTextL(); + } + else if( identifier == EProfileSettingProfileNameId ) + { + // Profile name was changed. + UpdateProfileNamesL(); + } + + if ( threeDEffect != iCopyProfile->i3DEffect ) + { + UpdateSettingsL( EFalse ); // hide 3DEcho if 3DEffect is off + } + + if ( vibratingAlert != iCopyProfile->iVibratingAlert ) + { + UpdateSettingsL( EFalse ); //hide emailVibrating alert if vibrating alert is off + } + } + // If the setting is an external (= only in Tones View): + iExternalSettingsHandler.StoreIfChangedL( identifier ); + + if( titleText ) + { + // Set title pane text back + SetTitlePaneTextL( *titleText ); + CleanupStack::PopAndDestroy( titleText ); + } + // Compare active profile to previously active profile + TInt newActiveProfileId( iEngineHandler.Engine()->ActiveProfileId() ); + if( activeProfileId != newActiveProfileId ) + { + // Active profile has changed while editing. Update UI. + HandleActiveProfileEventL( EProfileNewActiveProfile, newActiveProfileId ); + } + User::LeaveIfError( error ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::CreateSettingItemL +// ----------------------------------------------------------------------------- +// +CAknSettingItem* CProfileSettingsContainer::CreateSettingItemL( + TInt aIdentifier ) + { + PRODEBUG1( "CProfileSettingsContainer CreateSettingsItemL(%d)",aIdentifier ); + CAknSettingItem* settingItem = NULL; + + switch( aIdentifier ) + { + // Flow through: Ringing tone and RT line 1 are stored to the same + // variable because they can not exist at the same time. + case EProfileSettingRingingToneId: + case EProfileSettingRingingToneLine1Id: + { + settingItem = CreateFileListSettingItemL( + *iCopyProfile->iRingingTone, aIdentifier ); + break; + } + case EProfileSettingRingingToneLine2Id: + { + settingItem = CreateFileListSettingItemL( + *iCopyProfile->iRingingToneLine2, aIdentifier ); + break; + } + case EProfileSettingVideoCallToneId: + { + settingItem = CreateFileListSettingItemL( + *iCopyProfile->iVideoCallTone, aIdentifier ); + break; + } + case EProfileSettingMessageAlertToneId: + { + settingItem = CreateFileListSettingItemL( + *iCopyProfile->iMessageAlertTone, aIdentifier ); + break; + } + case EProfileSettingEmailAlertToneId: + { + settingItem = CreateFileListSettingItemL( + *iCopyProfile->iEmailAlertTone, aIdentifier ); + break; + } + case EProfileSettingRingingTypeId: + { + settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem( + aIdentifier, iCopyProfile->iRingingType ); + break; + } + case EProfileSettingRingingVolumeId: + { + settingItem = new( ELeave ) CProfilePlayingVolumeSettingItem( + aIdentifier, iCopyProfile->iRingingVolume, + *iCopyProfile->iRingingTone, + iCopyProfile->iRingingType, + iCopyProfile->iVibratingAlert, + EFalse ); //Display confirmation note for maximum volume + break; + } + case EProfileSettingMediaVolumeId: + { + settingItem = new( ELeave ) CProfilePlayingVolumeSettingItem( + aIdentifier, iCopyProfile->iMediaVolume, + *iCopyProfile->iRingingTone, + iCopyProfile->iRingingType, + iCopyProfile->iVibratingAlert, + EFalse ); //Do not display confirmation note for maximum volume + break; + } + case EProfileSettingVibratingAlertId: + { + settingItem = new( ELeave ) CAknBinaryPopupSettingItem( + aIdentifier, iCopyProfile->iVibratingAlert ); + break; + } + case EProfileSettingEmailVibratingAlertId: + { + settingItem = new( ELeave ) CAknBinaryPopupSettingItem( + aIdentifier, iCopyProfile->iEmailVibratingAlert ); + break; + } + case EProfileSettingKeypadVolumeId: + { + settingItem = new( ELeave ) CProfileKeypadVolumeSettingItem( + aIdentifier, iCopyProfile->iKeypadVolume, iKeySounds ); + break; + } + case EProfileSettingWarningAndGameTonesId: + { + settingItem = new( ELeave ) CAknBinaryPopupSettingItem( + aIdentifier, iCopyProfile->iWarningAndGameTones ); + break; + } + case EProfileSettingAlertForId: + { + settingItem = new( ELeave ) CProfileAlertForSettingItem( + aIdentifier, iCopyProfile->iContactList, iCoeEnv ); + break; + } + case EProfileSettingProfileNameId: + { + settingItem = new( ELeave ) CProfileNameSettingItem( + aIdentifier, iCopyProfile->iProfileName, iEngineHandler ); + break; + } + case EProfileSettingTTSRingingToneId: + { + settingItem = new( ELeave ) CAknBinaryPopupSettingItem( + aIdentifier, iCopyProfile->iTextToSpeech ); + break; + } + case EProfileSettingPTTRingingToneId: + { + settingItem = CreateFileListSettingItemL( + *iCopyProfile->iPTTRingingTone, aIdentifier ); + break; + } + case EProfileSettingPTTStatusId: + { + settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem( + aIdentifier, iCopyProfile->iPTTStatus ); + break; + } + case EProfileSettingTactileFeedbackId: + { + /* + settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem( + aIdentifier, iCopyProfile->iTactileFeedback ); + */ + settingItem = new( ELeave ) CProfileFeedbackSettingItem( + aIdentifier, iCopyProfile->iTactileFeedback ); + break; + } + case EProfileSettingAudioFeedbackId: + { + /* + settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem( + aIdentifier, iCopyProfile->iAudioFeedback ); + */ + settingItem = new( ELeave ) CProfileFeedbackSettingItem( + aIdentifier, iCopyProfile->iAudioFeedback ); + break; + } + case EProfileSetting3dEffectId: + { + /* + settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem( + aIdentifier, iCopyProfile->i3DEffect ); + */ + settingItem = new( ELeave ) CProfile3dSettingItem( + aIdentifier, + iCopyProfile->i3DEffect, + *iCopyProfile->iRingingTone, + iCopyProfile->iRingingType, + iCopyProfile->iVibratingAlert, + iCopyProfile->iRingingVolume, + iCopyProfile->i3DEcho ); + break; + } + case EProfileSetting3dEchoId: + { + /* + settingItem = new( ELeave ) CAknEnumeratedTextPopupSettingItem( + aIdentifier, iCopyProfile->i3DEcho ); + */ + settingItem = new( ELeave ) CProfile3dSettingItem( + aIdentifier, + iCopyProfile->i3DEcho, + *iCopyProfile->iRingingTone, + iCopyProfile->iRingingType, + iCopyProfile->iVibratingAlert, + iCopyProfile->iRingingVolume, + iCopyProfile->i3DEffect ); + break; + } + + default: + { + PRODEBUG1( "CProfileSettingsContainer before extShandler::CreateSI(%d)",aIdentifier ); + settingItem = iExternalSettingsHandler.CreateSettingItemL( aIdentifier ); + PRODEBUG( "CProfileSettingsContainer after extShandler::CreateSI" ); + break; + } + } + PRODEBUG1( "CProfileSettingsContainer CreateSettingsItemL(%d) before return",aIdentifier ); + return settingItem; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::CheckFileExistenceL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::CheckFileExistenceL() + { + CAknSettingItemArray* array = SettingItemArray(); + + if( !IsItemHidden( EProfileSettingRingingToneId, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iRingingTone ) ) + { + TParsePtrC tone( *iCopyProfile->iRingingTone ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + + if( !IsItemHidden( EProfileSettingRingingToneLine1Id, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iRingingTone ) ) + { + TParsePtrC tone( *iCopyProfile->iRingingTone ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + + if( !IsItemHidden( EProfileSettingRingingToneLine2Id, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iRingingToneLine2 ) ) + { + TParsePtrC tone( *iCopyProfile->iRingingToneLine2 ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + + if( !IsItemHidden( EProfileSettingVideoCallToneId, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iVideoCallTone ) ) + { + TParsePtrC tone( *iCopyProfile->iVideoCallTone ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + + if( !IsItemHidden( EProfileSettingMessageAlertToneId, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iMessageAlertTone ) ) + { + TParsePtrC tone( *iCopyProfile->iMessageAlertTone ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + + if( !IsItemHidden( EProfileSettingEmailAlertToneId, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iEmailAlertTone ) ) + { + TParsePtrC tone( *iCopyProfile->iEmailAlertTone ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + + if( !IsItemHidden( EProfileSettingPTTRingingToneId, array ) ) + { + if( !BaflUtils::FileExists( *iFs, *iCopyProfile->iPTTRingingTone ) ) + { + TParsePtrC tone( *iCopyProfile->iPTTRingingTone ); + HBufC* ringtoneNotFoundText = + StringLoader::LoadLC( + R_PROFILE_CONFIRM_RINGTONE_FOUND, tone.NameAndExt() ); + + CProfileSettingsContainer::LaunchDialogL( *ringtoneNotFoundText ); + CleanupStack::PopAndDestroy( ringtoneNotFoundText ); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::LaunchDialogL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::LaunchDialogL( const TDesC& aTitleText ) + { + CAknQueryDialog* query = CAknQueryDialog::NewL(); + const TInt ret( query->ExecuteLD( + R_PROFILE_CONFIRM_RINGTONE_FOUND_QUERY, aTitleText) ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::CreateFileListSettingItemL +// ----------------------------------------------------------------------------- +// +CAknSettingItem* CProfileSettingsContainer::CreateFileListSettingItemL( + TDes& aFileName, TInt aIdentifier ) + { + CAknSettingItem* settingItem = new( ELeave ) CProfileFileListSettingItem( + aIdentifier, + aFileName, + iCopyProfile->iRingingType, + iCopyProfile->iRingingVolume, + iCopyProfile->iVibratingAlert, + iCopyProfile->i3DEffect, + iCopyProfile->i3DEcho, + iCoeEnv ); + + return settingItem; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::IndexForId +// ----------------------------------------------------------------------------- +// +TInt CProfileSettingsContainer::IndexForId( TInt aId ) const + { + CAknSettingItemArray* array = SettingItemArray(); + TInt count( array->Count() ); + for( TInt index( 0 ); index < count; index++ ) + { + if( array->At( index )->Identifier() == aId ) + { + // Searched ID was found, return index + return index; + } + } + return KErrNotFound; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::SetItemHidden +// Sets an item hidden if an index for the id is found. +// In other words does nothing if feature is not supported. +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::SetItemHidden( TInt aId, + CAknSettingItemArray* aArray, TBool aHidden ) + { + TInt index( IndexForId( aId ) ); + if( index == KErrNotFound ) + { + return; + } + aArray->At( index )->SetHidden( aHidden ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::IsItemHidden +// +// ----------------------------------------------------------------------------- +// +TBool CProfileSettingsContainer::IsItemHidden( TInt aId, + CAknSettingItemArray* aArray ) const + { + TInt index( IndexForId( aId ) ); + if( index == KErrNotFound ) + { + return ETrue; + } + + return aArray->At( index )->IsHidden(); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::SetTitlePaneTextL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::SetTitlePaneTextL( const TDesC& aTitle ) + { + if( !iTitlePane ) + { + return; + } + + if( aTitle.Length() > 0 ) + { + iTitlePane->SetTextL( aTitle ); + } + else + { + iTitlePane->SetTextToDefaultL(); // Application name + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::UpdateProfileNamesL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::UpdateProfileNamesL() + { + if( iIndexHandler ) + { + TInt newProfileIndex( iIndexHandler->ReadIdArrayAndUpdateL() ); + if( iTabHandler ) + { + // Refresh tabs with changed profile names + iTabHandler->RefreshTabsL(); + iTabHandler->SetActiveTab( newProfileIndex ); + } + else + { + // If the iTabHandler is NULL and the iNaviPaneContainer is not NULL + // Set the text of navi pane to currently personlize profile's name. + if ( iNaviPaneContainer ) + { + MProfilesNamesArray* nameArray = iEngineHandler.IdArray(); + iNaviPaneContainer->SetNaviPaneTextL( + nameArray->MdcaPoint( newProfileIndex ) ); + } + } + } + else + { + // No index handler. Just refresh profile name array. + iEngineHandler.ReadIdArrayL(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::SizeChanged +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::SizeChanged() + { + CEikListBox* lb = ListBox(); + if( lb ) + { + lb->SetRect( Rect() ); // Set container's rect to listbox + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::HandleListBoxEventL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::HandleListBoxEventL( + CEikListBox* aListBox, TListBoxEvent aEventType ) + { + if( aEventType == EEventEnterKeyPressed || + aEventType == EEventItemDoubleClicked ) + { + CAknSettingItemArray* array = SettingItemArray(); + if( !AllowedToChange( array->At( array->ItemIndexFromVisibleIndex( + ListBox()->CurrentItemIndex() ) )->Identifier() ) ) + { + // If a setting is not allowed to change, "swallow" list box event. + return; + } + } + CAknSettingItemList::HandleListBoxEventL( aListBox, aEventType ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::GetHelpContext +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidProfileApp; + if( !iExternalSettingsHandler.GetHelpContext( aContext ) ) + { + aContext.iContext = KMODE_HLP_PERSONALISE; + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::PhoneSettingChanged +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::PhoneSettingChanged( + TSSSettingsSetting aSetting, TInt aNewValue ) + { + if( aSetting == ESSSettingsAls ) + { + iAlternateLineService = ( aNewValue != ESSSettingsAlsNotSupported ); + if( iIndexHandler ) + { + iIndexHandler->StoreIndices(); + } + // error ignored. If not enough memory to refresh the UI, + // don't bother launching an error note. + TRAP_IGNORE( SetHiddenFlagsL() ); + if( iIndexHandler ) + { + iIndexHandler->LoadIndices(); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::TabChangedL +// When a tab changes, this method gets called. +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::TabChangedL( TInt /* aIndex */ ) + { + UpdateSettingsL(); + + CEikListBox* listBox = ListBox(); + if( listBox ) + { + listBox->UpdateScrollBarsL(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::HandleActiveProfileEventL +// When active profile changes, this method gets called. +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::HandleActiveProfileEventL( + TProfileEvent /* aProfileEvent */, TInt /* aProfileId */ ) + { + /* + if( iItemEdited ) + { + // Do not update UI if an item is being edited. + return; + } + */ + UpdateProfileNamesL(); + UpdateSettingsL(); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::HandleExternalSettingsChangedL +// When external settings change, this method gets called. +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::HandleExternalSettingsChangedL() + { + UpdateSettingsL( EFalse ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::HandleResourceChange +// ----------------------------------------------------------------------------- +// +void CProfileSettingsContainer::HandleResourceChange( TInt aType ) + { + if ( aType == KEikDynamicLayoutVariantSwitch || + aType == KAknsMessageSkinChange ) + { + iProfileViewHandler.UpdateClientRect(); + } + CAknSettingItemList::HandleResourceChange( aType ); + } + +// ---------------------------------------------------- +// CProfileSettingsContainer::HandleNotifyInt +// ---------------------------------------------------- +// +void CProfileSettingsContainer::HandleNotifyInt( + const TUint32 aID, + const TInt aNewValue ) + { + if ( KDynamicVoIP == aID) + { + iVoIPStatus = KVoIPOFF != aNewValue; + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::ItemEdited +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CProfileSettingsContainer::ItemEdited() const + { + return iItemEdited; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::PowerSaveMode +// +// ----------------------------------------------------------------------------- +// +TBool CProfileSettingsContainer::PowerSaveMode( TInt aSettingId ) + { + TInt ret = EFalse; + + if ( aSettingId == EProfileSettingVibratingAlertId || + aSettingId == EProfileSettingKeypadVolumeId || + aSettingId == EProfileSettingTactileFeedbackId || + aSettingId == EProfileSettingAudioFeedbackId ||aSettingId == EProfileSettingEmailVibratingAlertId) + { + ret = PowerSaveMode(); + } + + return ret; + } + + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::PowerSaveModeL +// +// ----------------------------------------------------------------------------- +// +TBool CProfileSettingsContainer::PowerSaveModeL() + { + if( !FeatureManager::FeatureSupported( KFeatureIdPowerSave ) ) + { + return EFalse; + } + + TInt psm = EPsmsrvModeNormal; + + // KProEngPsmChanged PubSub key is set by GSProfilesPlugin when power save + // mode changes. If the key cannot be read (doesn't exist), PSM hasn't + // changed since the last boot and the mode is read from PSM CenRep. + if( RProperty::Get( KPSUidProfileEngine, KProEngPsmChanged, psm ) != KErrNone ) + { + CRepository* cenrep = CRepository::NewLC( KCRUidPowerSaveMode ); + User::LeaveIfError( cenrep->Get( KPsmCurrentMode, psm ) ); + CleanupStack::PopAndDestroy( cenrep ); + } + + if ( psm == EPsmsrvModePowerSave ) + { + return ETrue; + } + + return EFalse; + } + + +// ----------------------------------------------------------------------------- +// CProfileSettingsContainer::PowerSaveMode +// +// ----------------------------------------------------------------------------- +// +TBool CProfileSettingsContainer::PowerSaveMode() + { + TBool psm = EFalse; + + TRAPD( err, psm = PowerSaveModeL() ); + + if ( err != KErrNone ) + { + return EFalse; + } + + return psm; + } + + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStruct.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStruct.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,258 @@ +/* +* Copyright (c) 2002 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: Data structure class for profile settings. +* +*/ + + + +// CLASS HEADER +#include "CProfileStruct.h" +#include "ProfileInternal.hrh" + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // AknTextUtils +#include +#include +#include +#include + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileStruct::CProfileStruct +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CProfileStruct::CProfileStruct( ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileStruct::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileStruct* CProfileStruct::NewL( ) + { + CProfileStruct* self = new (ELeave) CProfileStruct( ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CProfileStruct::ConstructL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +void CProfileStruct::ConstructL() + { + iRingingTone = new( ELeave ) TFileName(); + iRingingToneLine2 = new( ELeave ) TFileName(); + iVideoCallTone = new( ELeave ) TFileName(); + iMessageAlertTone = new( ELeave ) TFileName(); + iEmailAlertTone = new( ELeave ) TFileName(); + iPTTRingingTone = new( ELeave ) TFileName(); + } + +// Destructor +CProfileStruct::~CProfileStruct() + { + iContactList.Close(); + delete iRingingTone; + delete iRingingToneLine2; + delete iVideoCallTone; + delete iMessageAlertTone; + delete iEmailAlertTone; + delete iPTTRingingTone; + } + +// ----------------------------------------------------------------------------- +// CProfileStruct::LoadL +// ----------------------------------------------------------------------------- +// +void CProfileStruct::LoadL( MProfileExtended* aProfile ) + { + TArray array( aProfile->AlertForL() ); + iContactList.Reset(); + TInt count( array.Count() ); + for( TInt index( 0 ); index < count; index++ ) + { + iContactList.Append( array[ index ] ); + } + const MProfileName& name = aProfile->ProfileName(); + iProfileId = name.Id(); + iProfileName.Copy( name.Name() ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( iProfileName ); + iTitleName.Copy( name.TitleName() ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( iTitleName ); + const MProfileTones& tones = aProfile->ProfileTones(); + iRingingTone->Copy( tones.RingingTone1() ); + iRingingToneLine2->Copy( tones.RingingTone2() ); + iMessageAlertTone->Copy( tones.MessageAlertTone() ); + const TProfileToneSettings& toneSettings = tones.ToneSettings(); + iRingingType = toneSettings.iRingingType; + iKeypadVolume = toneSettings.iKeypadVolume; + iRingingVolume = toneSettings.iRingingVolume; + iMediaVolume = toneSettings.iMediaVolume; + iVibratingAlert = toneSettings.iVibratingAlert; + iEmailVibratingAlert = toneSettings.iEmailVibratingAlert; + iWarningAndGameTones = toneSettings.iWarningAndGameTones; + iTextToSpeech = toneSettings.iTextToSpeech; + const MProfileExtraTones& extra = aProfile->ProfileExtraTones(); + iEmailAlertTone->Copy( extra.EmailAlertTone() ); + iVideoCallTone->Copy( extra.VideoCallRingingTone() ); + const MProfileExtraSettings& extraSettings = aProfile->ProfileExtraSettings(); + const MProfilePttSettings& pttSettings = extraSettings.ProfilePttSettings(); + iPTTRingingTone->Copy( pttSettings.PttRingingTone() ); + iPTTStatus = pttSettings.PttStatus(); + + const MProfileFeedbackSettings& feedbackSettings = extraSettings.ProfileFeedbackSettings(); + iTactileFeedback = feedbackSettings.TactileFeedback(); + iAudioFeedback = feedbackSettings.AudioFeedback(); + + const MProfile3DToneSettings& threeDSettings = extraSettings.Profile3DToneSettings(); + i3DEffect = threeDSettings.Effect(); + i3DEcho = threeDSettings.Echo(); + } + +// ----------------------------------------------------------------------------- +// CProfileStruct::StoreL +// ----------------------------------------------------------------------------- +// +void CProfileStruct::StoreL( MProfileExtended* aProfile ) + { + aProfile->SetAlertForL( iContactList.Array() ); + const MProfileName& name = aProfile->ProfileName(); + TBuf profileNameHelperBuffer; + profileNameHelperBuffer.Copy( name.Name() ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( + profileNameHelperBuffer ); + if( iProfileName.Compare( profileNameHelperBuffer ) ) + { + // Store profile name only if it has changed in order to + // preserve localisation. + aProfile->ProfileSetName().SetNameL( iProfileName ); + iTitleName.Copy( iProfileName ); + } + MProfileSetTones& setTones = aProfile->ProfileSetTones(); + setTones.SetRingingTone1L( *iRingingTone ); + setTones.SetRingingTone2L( *iRingingToneLine2 ); + setTones.SetMessageAlertToneL( *iMessageAlertTone ); + TProfileToneSettings& toneSettings = setTones.SetToneSettings(); + toneSettings.iRingingType = TProfileRingingType( iRingingType ); + toneSettings.iKeypadVolume = TProfileKeypadVolume( iKeypadVolume ); + toneSettings.iRingingVolume = iRingingVolume; + toneSettings.iMediaVolume = iMediaVolume; + toneSettings.iVibratingAlert = iVibratingAlert; + toneSettings.iEmailVibratingAlert = iEmailVibratingAlert; + toneSettings.iWarningAndGameTones = iWarningAndGameTones; + toneSettings.iTextToSpeech = iTextToSpeech; + MProfileSetExtraTones& setExtra = aProfile->ProfileSetExtraTones(); + setExtra.SetEmailAlertToneL( *iEmailAlertTone ); + setExtra.SetVideoCallRingingToneL( *iVideoCallTone ); + + MProfileSetExtraSettings& setExtraSettings = aProfile->ProfileSetExtraSettings(); + MProfileSetPttSettings& setPttSettings = setExtraSettings.ProfileSetPttSettings(); + setPttSettings.SetPttRingingToneL( *iPTTRingingTone ); + TProfilePttStatus KPttStatus = TProfilePttStatus( iPTTStatus ); + setPttSettings.SetPttStatus( KPttStatus ); + + MProfileSetFeedbackSettings& setFeedbackSettings = + setExtraSettings.ProfileSetFeedbackSettings(); + TProfileTactileFeedback tactileFeedback = TProfileTactileFeedback( iTactileFeedback ); + TProfileAudioFeedback audioFeedback = TProfileAudioFeedback( iAudioFeedback ); + setFeedbackSettings.SetTactileFeedback( tactileFeedback ); + setFeedbackSettings.SetAudioFeedback( audioFeedback ); + + MProfileSet3DToneSettings& set3dSettings = + setExtraSettings.ProfileSet3DToneSettings(); + TProfile3DToneEffect threeDEffect = TProfile3DToneEffect( i3DEffect ); + TProfile3DToneEcho threeDEcho = TProfile3DToneEcho( i3DEcho ); + set3dSettings.SetEffect( threeDEffect ); + set3dSettings.SetEcho( threeDEcho ); + } + +// ----------------------------------------------------------------------------- +// CProfileStruct::CompareL +// ----------------------------------------------------------------------------- +// +TBool CProfileStruct::CompareL( MProfileExtended* aProfile ) const + { + const MProfileTones& tones = aProfile->ProfileTones(); + const MProfileName& name = aProfile->ProfileName(); + const TProfileToneSettings& toneSettings = tones.ToneSettings(); + const MProfileExtraTones& extra = aProfile->ProfileExtraTones(); + const MProfileExtraSettings& extraSettings = aProfile->ProfileExtraSettings(); + const MProfilePttSettings& pttSettings = extraSettings.ProfilePttSettings(); + const MProfileFeedbackSettings& feedbackSettings = extraSettings.ProfileFeedbackSettings(); + const MProfile3DToneSettings& threeDSettings = extraSettings.Profile3DToneSettings(); + + TArray array( aProfile->AlertForL() ); + TInt contactArrayCount( array.Count() ); + TInt ownContactArrayCount( iContactList.Count() ); + + if( ( iProfileId != name.Id() ) || + ( iRingingTone->Compare( tones.RingingTone1() ) ) || + ( iRingingToneLine2->Compare( tones.RingingTone2() ) ) || + ( iVideoCallTone->Compare( extra.VideoCallRingingTone() ) ) || + ( iMessageAlertTone->Compare( tones.MessageAlertTone() ) ) || + ( iProfileName.Compare( name.Name() ) ) || + ( iRingingType != toneSettings.iRingingType ) || + ( iKeypadVolume != toneSettings.iKeypadVolume ) || + ( iRingingVolume != toneSettings.iRingingVolume ) || + ( iMediaVolume != toneSettings.iMediaVolume ) || + ( iVibratingAlert != toneSettings.iVibratingAlert ) || + ( iEmailVibratingAlert != toneSettings.iEmailVibratingAlert ) || + ( iWarningAndGameTones != toneSettings.iWarningAndGameTones ) || + ( iTextToSpeech != toneSettings.iTextToSpeech ) || + ( iEmailAlertTone->Compare( extra.EmailAlertTone() ) ) || + ( ownContactArrayCount != contactArrayCount ) || + ( iTactileFeedback != feedbackSettings.TactileFeedback() ) || + ( iAudioFeedback != feedbackSettings.AudioFeedback() ) || + ( i3DEffect != threeDSettings.Effect() ) || + ( i3DEcho != threeDSettings.Echo() ) || + ( iPTTRingingTone->Compare( pttSettings.PttRingingTone() ) ) || + ( iPTTStatus != pttSettings.PttStatus() ) ) + { + return EFalse; + } + + for( TInt index( 0 ); index < contactArrayCount; index++ ) + { + if( iContactList[ index ] != array[ index ] ) + { + return EFalse; + } + } + return ETrue; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStruct.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStruct.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,172 @@ +/* +* Copyright (c) 2002 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: Data structure class for profile settings. +* +*/ + + + +#ifndef CPROFILESTRUCT_H +#define CPROFILESTRUCT_H + +// INCLUDES +#include "ProfileEng.hrh" +#include "ProfileInternal.hrh" +#include + +// CONSTANTS +const TInt KProfileMinVolumeLevel( 1 ); +const TInt KProfileMaxVolumeLevel( 10 ); +const TInt KProfileMaxProfileNameLength( PROFILES_MAX_NAME_LENGTH ); + +// FORWARD DECLARATIONS +class MProfileExtended; + +// CLASS DECLARATION +/** +* Data structure class for profile settings. +* Holds settings for one profile. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileStruct ) : public CBase + { + public: // Constructors and destructor + + /** + * Creates and returns a new instance of this class. + * @return Pointer to the CProfileStruct object + */ + static CProfileStruct* NewL( ); + + /** + * Destructor. + */ + virtual ~CProfileStruct(); + + private: // Constructors + /** + * C++ default constructor. + */ + CProfileStruct(); + + /** + * Second phase constructor + */ + void ConstructL(); + + public: // New functions + + /** + * Loads settings from Profile Engine via MProfileExtended interface to member data. + * @param aProfile Pointer to Profile Engine interface. + */ + void LoadL( MProfileExtended* aProfile ); + + /** + * Stores member data to Profile Engine via MProfileExtended interface. + * @param aProfile Pointer to Profile Engine interface. + */ + void StoreL( MProfileExtended* aProfile ); + + /** + * Returns ETrue if member data is the same as in aProfile. + * @param aProfile Profile to compare member data with. + * @return Returns ETrue if member data is the same as in aProfile. + */ + TBool CompareL( MProfileExtended* aProfile ) const; + + /** + * Compares if any ringing/alarm tone setting has changed and + * removes it from the automated content list using DRM Helper. + * @param aProfile Profile to compare member data with. + */ + void RemoveAutomatedContentL( MProfileExtended* aProfile ) const; + + public: // Data + + // ID of the profile + TInt iProfileId; + + // Filename of ringing tone or line 1 ringing tone + TFileName* iRingingTone; + + // Filename of line 2 ringing tone + TFileName* iRingingToneLine2; + + // Filename of video call tone + TFileName* iVideoCallTone; + + // Ringing type + TInt iRingingType; + + // Ringing volume (between KProfileMinVolumeLevel and KProfileMaxVolumeLevel) + TInt iRingingVolume; + + // Media volume (between KProfileMinVolumeLevel and KProfileMaxVolumeLevel) + TInt iMediaVolume; + + // Message alert tone + TFileName* iMessageAlertTone; + + // E-mail alert tone + TFileName* iEmailAlertTone; + + // Vibrating alert setting + TBool iVibratingAlert; + + // Email Vibrating alert setting + TBool iEmailVibratingAlert; + // Keypad volume level + TInt iKeypadVolume; + + // Warning and game tones setting + TBool iWarningAndGameTones; + + // Alert for setting + RArray iContactList; + + // Profile name + TBuf iProfileName; + + // Profile name for title pane + TBuf iTitleName; + + // TTS Ringingtone setting + TBool iTextToSpeech; + + // Filename of PTT ringing tone + TFileName* iPTTRingingTone; + + // PTT Status + TInt iPTTStatus; + + // Tactile feedback + TInt iTactileFeedback; + + // Audio feedback + TInt iAudioFeedback; + + // 3D effect + TInt i3DEffect; + + // 3D echo + TInt i3DEcho; + + }; + +#endif // CPROFILESTRUCT_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStructDrmEmpty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStructDrmEmpty.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2002 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: Data structure class for profile settings. +* +*/ + + + +// CLASS HEADER +#include "CProfileStruct.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileStruct::RemoveAutomatedContendL +// empty implementation for variation +// ----------------------------------------------------------------------------- +// +void CProfileStruct::RemoveAutomatedContentL( MProfileExtended* /* aProfile */ ) const + { + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStructDrmFull.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileStructDrmFull.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,66 @@ +/* +* Copyright (c) 2002 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: Data structure class for profile settings. +* +*/ + + + +// CLASS HEADER +#include "CProfileStruct.h" + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include + +// ============================ LOCAL FUNCTIONS ================================ + +void DoCompare( const TDesC& aOldFile, const TDesC& aNewFile, CDRMHelper& aDRMHelper ) + { + if( aOldFile.CompareF( aNewFile ) != 0 ) + { + // The file has been changed. + // Remove the old file from the automated content list. + // Ignore any error value. Also non-drm files are tried to be removed + // so the error might be KErrNotFound. + // + // Note: + // RemoveAutomatedPassive may leave even if it is not an L-method! + TRAP_IGNORE( aDRMHelper.RemoveAutomatedPassive( aOldFile ) ); // CSI: 59 # See the note above. + } + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileStruct::RemoveAutomatedContentL +// ----------------------------------------------------------------------------- +// +void CProfileStruct::RemoveAutomatedContentL( MProfileExtended* aProfile ) const + { + CDRMHelper* drmHelper = CDRMHelper::NewLC( *CCoeEnv::Static() ); + const MProfileTones& tones = aProfile->ProfileTones(); + const MProfileExtraTones& extra = aProfile->ProfileExtraTones(); + DoCompare( tones.RingingTone1(), *iRingingTone, *drmHelper ); + DoCompare( tones.RingingTone2(), *iRingingToneLine2, *drmHelper ); + DoCompare( extra.VideoCallRingingTone(), *iVideoCallTone, *drmHelper ); + DoCompare( tones.MessageAlertTone(), *iMessageAlertTone, *drmHelper ); + DoCompare( extra.EmailAlertTone(), *iEmailAlertTone, *drmHelper ); + CleanupStack::PopAndDestroy( drmHelper ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileTabHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileTabHandler.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,208 @@ +/* +* Copyright (c) 2002 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: Tab handler for handling tabs in Profiles +* +*/ + + + +// CLASS HDEADER +#include "CProfileTabHandler.h" + +// INTERNAL INCLUDES +#include "CProfileEngineHandler.h" +#include "CProfileIndexHandler.h" +#include "ProfileEngineConstants.h" + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include // AknTextUtils +#include + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::CProfileTabHandler +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileTabHandler::CProfileTabHandler( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknNavigationControlContainer& aNaviPane ) + : iEngineHandler( aEngineHandler ), + iIndexHandler( aIndexHandler ), + iNaviPane( aNaviPane ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileTabHandler::ConstructL() + { + CreateTabGroupL(); + iNaviPane.PushL( *iNaviDecorator ); + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileTabHandler* CProfileTabHandler::NewL( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknNavigationControlContainer& aNaviPane ) + { + CProfileTabHandler* self = new( ELeave ) CProfileTabHandler( + aEngineHandler, aIndexHandler, aNaviPane ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CProfileTabHandler::~CProfileTabHandler() + { + if( iNaviDecorator ) + { + iNaviPane.Pop( iNaviDecorator ); + delete iNaviDecorator; + } + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::TabGroup +// ----------------------------------------------------------------------------- +// +EXPORT_C CAknTabGroup* CProfileTabHandler::TabGroup() const + { + return iTabGroup; + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::SetActiveTab +// ----------------------------------------------------------------------------- +// +void CProfileTabHandler::SetActiveTab( TInt aIndex ) + { + iTabGroup->SetActiveTabByIndex( aIndex ); + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::RefreshTabsL +// ----------------------------------------------------------------------------- +// +void CProfileTabHandler::RefreshTabsL() + { + MProfilesNamesArray* array = iEngineHandler.IdArray(); + TInt count( array->MdcaCount() ); + if( iTabGroup->TabCount() == count ) + { + RBuf name; + name.CreateL( KProfileMaxNameLength ); + CleanupClosePushL( name ); + for( TInt index( 0 ); index < count; index++ ) + { + name.Copy( array->ProfileName( index )->ShortName() ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( name ); + iTabGroup->ReplaceTabTextL( index, name ); + } + CleanupStack::PopAndDestroy( &name ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::SetTabObserver +// ----------------------------------------------------------------------------- +// +void CProfileTabHandler::SetTabObserver( MAknTabObserver* aTabObserver ) + { + iTabObserver = aTabObserver; + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::TabChangedL +// CAknTabGroup notifies that tab has changed. +// ----------------------------------------------------------------------------- +// +void CProfileTabHandler::TabChangedL( TInt aIndex ) + { + iIndexHandler.StoreIndices(); + iIndexHandler.SetCurrentProfileIndex( aIndex ); + if( iTabObserver ) + { + iTabObserver->TabChangedL( aIndex ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileTabHandler::CreateTabGroupL +// ----------------------------------------------------------------------------- +// +void CProfileTabHandler::CreateTabGroupL() + { + // Remove all existing tabs, just in case + if( iNaviDecorator ) + { + iNaviPane.Pop( iNaviDecorator ); + delete iNaviDecorator; + iNaviDecorator = NULL; + } + + // Create tab group + iNaviDecorator = iNaviPane.CreateTabGroupL( this ); + iTabGroup = static_cast( iNaviDecorator->DecoratedControl() ); + + MProfilesNamesArray* array = iEngineHandler.IdArray(); + + RBuf name; + name.CreateL( KProfileMaxNameLength ); + CleanupClosePushL( name ); + // Add tabs to tab group + TInt count( array->MdcaCount() ); + for( TInt index( 0 ); index < count; index++ ) + { + name.Copy( array->ProfileName( index )->ShortName() ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( name ); + iTabGroup->AddTabL( index, name ); + } + CleanupStack::PopAndDestroy( &name ); + + // Set tab width + TInt tab( KTabWidthWithThreeLongTabs ); + if( count == 1 ) + { + tab = KTabWidthWithOneTab; + } + else if( count == 2 ) + { + tab = KTabWidthWithTwoLongTabs; + } + iTabGroup->SetTabFixedWidthL( tab ); + + // Set active tab + iTabGroup->SetActiveTabByIndex( iIndexHandler.CurrentProfileIndex() ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileToneHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileToneHandler.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,681 @@ +/* +* Copyright (c) 2002-2006 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: A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query if necessary. +* +*/ + + + +// CLASS HEADER +#include "cprofiletonehandler.h" + +// INTERNAL INCLUDES +#include "ProfileMmfInfoUtility.h" + +// EXTERNAL INCLUDES +#include +#include // KProEngRingingToneMaxSize +#include // BaflUtils +#include // RApaLsSession +#include // CCoeEnv +#include // CAknInformationNote +#include // RConeResourceLoader +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace + { + // CONSTANTS + _LIT( KProfileSilentTone, "Z:No_Sound.wav" ); + _LIT( KProfileAudioMimeType, "audio" ); + _LIT( KProfileRngMimeType, "application/vnd.nokia.ringing-tone" ); + + _LIT( KProfileCommonVideoType, "video/*" ); + _LIT( KProfileRMVideoMimeType, "application/vnd.rn-realmedia" ); + _LIT( KProfileRMVideoMimeType2, "application/x-pn-realmedia" ); + _LIT( KProfileSDPVideoMimeType, "application/sdp" ); + _LIT( KProfilePlainTextType, "text/plain" ); + // The filename of the resource file + _LIT( KProfileResourceFileName, "Z:ProfileSettingsView.RSC" ); + } + + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CProfileToneHandler +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileToneHandler::CProfileToneHandler() + { + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::ConstructL() + { + DrmConstructL(); + GetMaxToneFileSizeL(); + User::LeaveIfError( iFs.Connect() ); + iProfileEngine = CreateProfileEngineExtendedL( &iFs ); + // NB. Singleton must be released in the destructor: + iProfilesFeatures = &( ProfileUtilityInstanceL().ProfilesLocalFeatures() ); + + User::LeaveIfError( iSSSettings.Open() ); + iSSSettings.Get( ESSSettingsAls, iAlternateLineSetting ); // ignore errors + iSSSettings.Register( ESSSettingsAls, *this ); // ignore errors + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileToneHandler* CProfileToneHandler::NewLC() + { + CProfileToneHandler* self = new( ELeave ) CProfileToneHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CProfileToneHandler* CProfileToneHandler::NewL() + { + CProfileToneHandler* self = CProfileToneHandler::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CProfileToneHandler::~CProfileToneHandler() + { + iSSSettings.Close(); + iFs.Close(); + if( iProfileEngine ) + { + iProfileEngine->Release(); + } + + if ( iProfilesFeatures ) + { + ReleaseProfileUtility(); + } + + ReleaseDrm(); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetActiveProfileRingingToneL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CProfileToneHandler::SetActiveProfileRingingToneL( + const TDesC& aFileName ) + { + // Find out the ID of the active profile + TInt activeProfileId( + User::LeaveIfError( iProfileEngine->ActiveProfileId() ) ); + + return SetProfileToneL( + activeProfileId, EProfileRingingToneSetting, aFileName ); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetProfileToneL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CProfileToneHandler::SetProfileToneL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ) + { + // Check the file which is tried to set as ringing or alert tone. + TInt returnValue( CheckFileL( aFileName ) ); + returnValue = CheckResultAndProtectionL( returnValue, aFileName ); + if( returnValue != KErrNone ) + { + return returnValue; + } + + DoSetProfileToneL( aProfileId, aToneSetting, aFileName ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetProfileToneNotCheckL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CProfileToneHandler::SetProfileToneNotCheckL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ) + { + DoSetProfileToneL( aProfileId, aToneSetting, aFileName ); + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetToneForAllProfilesL +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CProfileToneHandler::SetToneForAllProfilesL( + TProfileTones aToneSetting, const TDesC& aFileName ) + { + // Check the file which is tried to set as ringing or alert tone. + TInt returnValue( CheckFileL( aFileName ) ); + returnValue = CheckResultAndProtectionL( returnValue, aFileName ); + if( returnValue != KErrNone ) + { + return returnValue; + } + + const MProfilesNamesArray* idArray = iProfileEngine->ProfilesNamesArrayLC(); + TInt arrayCount( idArray->MdcaCount() ); + TInt arrayIndex( 0 ); + TInt profileId( 0 ); + TInt activeId( iProfileEngine->ActiveProfileId() ); + + // Go through profiles and update tone + while( arrayIndex < arrayCount ) + { + profileId = idArray->ProfileName( arrayIndex )->Id(); + // Updating of the active profile will be done last to make sure that + // UI gets the new value of the ringing tone if settings view is active + // and it is containing settings of another than active profile + if( profileId != activeId ) + { + TRAPD(r, DoSetProfileToneL( profileId, aToneSetting, aFileName )); + // Filter situation when profile is not allowed to be changed + // e.g. Drive-profile + if( ( r != KErrNone ) && ( r != KErrAccessDenied ) ) + { + User::Leave( r ); + } + } + arrayIndex++; + } + CleanupStack::PopAndDestroy(); // idArray + + // Update the active profile: + TRAPD(r, DoSetProfileToneL( activeId, aToneSetting, aFileName )); + // Filter situation when profile is not allowed to be changed + // e.g. Drive-profile + if( ( r != KErrNone ) && ( r != KErrAccessDenied ) ) + { + User::Leave( r ); + } + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::PhoneSettingChanged +// Callback method inherited from MSSSettingsObserver for getting events if +// Alternate Line Service status changes. +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::PhoneSettingChanged( + TSSSettingsSetting aSetting, TInt aNewValue ) + { + if( aSetting == ESSSettingsAls ) + { + iAlternateLineSetting = aNewValue; + } + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::DoSetProfileToneL +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::DoSetProfileToneL( TInt aProfileId, + TProfileTones aToneSetting, const TDesC& aFileName ) + { + // Read the settings of the profile in question + MProfileExtended* profile = iProfileEngine->ProfileLC( aProfileId ); + + // Get the old tone in order to remove it from the automated content list + TFileName oldTone( ReadToneL( *profile, aToneSetting ) ); + + TFileName fileName( aFileName ); + if( fileName.Length() == 0 ) + { + // If no filename is given, replace it with "No_sound.wav". This way + // it's possible to e.g. play vibra during incoming call. + TParse* fp = new(ELeave) TParse(); + fp->Set(KProfileSilentTone, &KDC_RESOURCE_FILES_DIR, NULL); + fileName.Copy( fp->FullName() ); + delete fp; + } + + // Replace the old tone with the new tone + SetToneL( *profile, aToneSetting, fileName ); + + // Commit changes. Write the new settings to the Profiles Engine + iProfileEngine->CommitChangeL( *profile ); + + // Register file as automated content + TInt err( SetAutomated( aToneSetting, fileName ) ); + if( err == KErrNone ) + { + // Remove old tone from the automated content list + RemoveAutomated( oldTone ); + } + else + { + // Put the old tone back into Profiles: + TRAP_IGNORE( + SetToneL( *profile, aToneSetting, oldTone ); + iProfileEngine->CommitChangeL( *profile ); + ); + } + + CleanupStack::PopAndDestroy(); // profile + User::LeaveIfError( err ); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetToneL +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::SetToneL( MProfileExtended& aProfile, + TProfileTones aToneSetting, const TDesC& aFileName ) + { + MProfileSetExtraTones& setExtraTones = aProfile.ProfileSetExtraTones(); + MProfileSetTones& setTones = aProfile.ProfileSetTones(); + + switch( aToneSetting ) + { + case EProfileRingingToneSetting: + { + if( iAlternateLineSetting == ESSSettingsAlsAlternate ) + { + // Alternate Line Service is supported and alternate line is + // selected. Set as ringing tone for line 2. + setTones.SetRingingTone2L( aFileName ); + } + else + { + // Alternate Line Service is not supported or primary line is + // selected. Set as ringing tone for line 1. + setTones.SetRingingTone1L( aFileName ); + } + break; + } + case EProfileVideoCallToneSetting: + { + setExtraTones.SetVideoCallRingingToneL( aFileName ); + break; + } + case EProfileMessageAlertToneSetting: + { + setTones.SetMessageAlertToneL( aFileName ); + break; + } + case EProfileInstantMessageAlertToneSetting: + { + setExtraTones.SetIMMessageAlertToneL( aFileName ); + break; + } + case EProfileEmailAlertToneSetting: + { + setExtraTones.SetEmailAlertToneL( aFileName ); + break; + } + default: + { + User::Leave( KErrArgument ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::ReadToneL +// ----------------------------------------------------------------------------- +// +const TDesC& CProfileToneHandler::ReadToneL( const MProfileExtended& aProfile, + TProfileTones aToneSetting ) const + { + const MProfileExtraTones& extraTones = aProfile.ProfileExtraTones(); + const MProfileTones& tones = aProfile.ProfileTones(); + + switch( aToneSetting ) + { + case EProfileRingingToneSetting: + { + if( iAlternateLineSetting == ESSSettingsAlsAlternate ) + { + // Alternate Line Service is supported and alternate line is + // selected. + return tones.RingingTone2(); + } + else + { + // Alternate Line Service is not supported or primary line is + // selected. + return tones.RingingTone1(); + } + } + case EProfileVideoCallToneSetting: + { + return extraTones.VideoCallRingingTone(); + } + case EProfileMessageAlertToneSetting: + { + return tones.MessageAlertTone(); + } + case EProfileInstantMessageAlertToneSetting: + { + return extraTones.IMMessageAlertTone(); + } + case EProfileEmailAlertToneSetting: + { + return extraTones.EmailAlertTone(); + } + default: + { + User::Leave( KErrArgument ); + break; + } + } + return KNullDesC; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CheckFileL +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::CheckFileL( const TDesC& aFileName ) + { + if( aFileName.Length() == 0 ) + { + // The filename is empty, ok. + // It will be changed to "No_sound.wav" when writing to Profiles Engine. + return KErrNone; + } + + if( !BaflUtils::FileExists( iFs, aFileName ) ) + { + // The file does not exist. No good (start the dance). + return KErrNotFound; + } + + TBool isAudio( EFalse ); + TBool isVideo( EFalse ); + + // The file exists. Check its data (MIME) type. + TBuf dataType( DataTypeL( aFileName ) ); + if( ( dataType.Left( KProfileAudioMimeType() + .Length() ).CompareF( KProfileAudioMimeType ) == 0 ) || + ( dataType.CompareF( KProfileRngMimeType ) == 0 ) ) + { + isAudio = ETrue; + } + + if( dataType.MatchF( KProfileCommonVideoType ) == 0 || + dataType.CompareF( KProfileRMVideoMimeType ) == 0 || + dataType.CompareF( KProfileRMVideoMimeType2 ) == 0 || + dataType.CompareF( KProfileSDPVideoMimeType ) == 0 ) + { +#ifdef RD_VIDEO_AS_RINGING_TONE + isVideo = ETrue; +#else + isVideo = EFalse; +#endif + } + + if( (!isAudio) && (!isVideo) && (dataType.CompareF(KProfilePlainTextType) != 0) ) + { + // The data type does not start with "audio" or video and it's not RNG file. + return KErrNotSupported; + } + + // Check whether file is supported by MMF + TBuf8 tempDataType; + tempDataType.Copy( dataType ); + if (!ProfileMmfInfoUtility::IsMimeTypeSupportedL(tempDataType) + && !ProfileMmfInfoUtility::IsHeaderDataSupportedL(aFileName)) + { + // File is not supported by MMF + return KErrNotSupported; + } + + // Operator requirement. Check if the tones of this data type are blocked: + if( iProfilesFeatures->IsBlockedType( dataType ) || + iProfilesFeatures->IsExcludedType( dataType ) ) + { + User::Leave( KErrArgument ); + } + + // Check if the tone is WMDRM protected + if( IsFileWMDRMProtectedL( aFileName ) ) + { + return KErrPermissionDenied; + } + + TInt result( KErrNone ); + if( IsProtected( aFileName ) ) + { + // In certain variants tones of certain MIME-types are not allowed as + // alert tones if they are DRM-protected, check if this is one: + if( iProfilesFeatures->IsBlockedProtectedType( dataType ) ) + { + return KErrArgument; + } + result = CheckProtectedFileL( aFileName ); + } + else + { + result = iProfilesFeatures->IsBlockedUnprotectedType( dataType ) ? + KErrPermissionDenied : KErrNone; + } + return result; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CheckResultAndProtectionL +// Find out the mime type of the file +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::CheckResultAndProtectionL( TInt aResult, + const TDesC& aFileName ) + { + if( aResult == KErrPermissionDenied || aResult == KErrNotSupported || + aResult == KErrNotFound ) + { + User::Leave( aResult ); + } + else if( aResult != KErrNone ) + { + return aResult; + } + + // If tone file size is limited, + // check if this file's size exceeds this limit. + if ( iMaxSizeKB ) + { + if ( CheckToneFileSizeL( aFileName, iMaxSizeKB ) != KErrNone ) + { + ShowSizeErrorNoteL( iMaxSizeKB ); + return KErrTooBig; + } + } + + if( IsProtected( aFileName ) ) + { + if( !CanSetAutomated( aFileName ) ) + { + // DRM v2 content should be caught here + ShowErrorNoteL( R_PROFILE_TEXT_DRM_PREV_RIGHTS_SET ); + return KErrGeneral; + } + + // If the file in question is unactivated protected content, + // ask user if he/she wants to activate it. + if( AskAutomated( aFileName ) == KErrCancel ) + { + // User doesn't want to activate unactivated protected content. + return KErrCancel; + } + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::DataType +// Find out the mime type of the file +// ----------------------------------------------------------------------------- +// +TBuf CProfileToneHandler::DataTypeL( + const TDesC& aFileName ) const + { + RApaLsSession apaLsSession; + User::LeaveIfError( apaLsSession.Connect() ); + CleanupClosePushL( apaLsSession ); + + TUid dummyUid = { 0 }; // instantiate as zero + TDataType dataType( dummyUid ); + User::LeaveIfError( + apaLsSession.AppForDocument( aFileName, dummyUid, dataType ) ); + + CleanupStack::PopAndDestroy(); // apaLsSession.Close() + return dataType.Des(); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::ShowErrorNoteL +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::ShowErrorNoteL( TInt aResourceId ) const + { + CCoeEnv* coeEnv = CCoeEnv::Static(); + RConeResourceLoader resourceLoader( *coeEnv ); + CleanupClosePushL( resourceLoader ); + + TParse* fp = new(ELeave) TParse(); + fp->Set(KProfileResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL); + TFileName localizedFileName( fp->FullName() ); + delete fp; + + resourceLoader.OpenL( localizedFileName ); + + HBufC* errorText = StringLoader::LoadLC( aResourceId ); + CAknInformationNote* note = new( ELeave ) CAknInformationNote( EFalse ); + note->ExecuteLD( *errorText ); + + // errorText + CleanupStack::PopAndDestroy( errorText ); + // resourceLoader + CleanupStack::PopAndDestroy( ); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::ShowSizeErrorNoteL +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::ShowSizeErrorNoteL( TInt aSizeLimitKB ) + { + CCoeEnv* coeEnv = CCoeEnv::Static(); + RConeResourceLoader resourceLoader( *coeEnv ); + CleanupClosePushL( resourceLoader ); + + TParse* fp = new(ELeave) TParse(); + CleanupStack::PushL( fp ); + fp->Set( KProfileResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL); + + TFileName* fileName = new( ELeave ) TFileName(); + fileName->Copy( fp->FullName() ); + CleanupStack::PushL( fileName ); + resourceLoader.OpenL( *fileName ); + CleanupStack::PopAndDestroy( fileName ); + + HBufC* errorText = StringLoader::LoadLC( R_PROFILE_TEXT_TONE_MAXSIZE_ERROR, aSizeLimitKB ); + CAknInformationNote* note = new( ELeave ) CAknInformationNote( EFalse ); + note->ExecuteLD( *errorText ); + + CleanupStack::PopAndDestroy( errorText ); + CleanupStack::PopAndDestroy( fp ); + CleanupStack::PopAndDestroy( &resourceLoader ); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::GetMaxToneFileSizeL +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::GetMaxToneFileSizeL() + { + CRepository* cenrep = CRepository::NewL( KCRUidProfileEngine ); + CleanupStack::PushL( cenrep ); + TInt error = cenrep->Get( KProEngRingingToneMaxSize, iMaxSizeKB ); + CleanupStack::PopAndDestroy( cenrep ); + if ( error != KErrNone ) + { + iMaxSizeKB = 0; + } + if ( iMaxSizeKB < 0 ) + { + iMaxSizeKB = 0; + } + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CheckToneFileSizeL +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::CheckToneFileSizeL( const TDesC& aFile, + TInt aSizeLimitKB ) + { + // Get file size + TInt size = 0; + TInt error = KErrNone; + + TEntry entry; + if ( iFs.Entry( aFile, entry ) == KErrNone ) + { + size = entry.iSize; + } + + // Check. NOTE: now if file size couldn't be determined, check fails. + aSizeLimitKB *= KKilo; + if ( aSizeLimitKB && size > aSizeLimitKB ) + { + error = KErrTooBig; + } + + return error; + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileToneHandlerDrmEmpty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileToneHandlerDrmEmpty.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,107 @@ +/* +* Copyright (c) 2002-2004 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: A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query if necessary. +* +*/ + + + +// INCLUDE FILES +#include "CProfileToneHandler.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::DrmConstructL +// 2nd phase construct for DRM objects. Empty implementation. +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::DrmConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::ReleaseDrm +// Destructor for DRM objects. Empty implementation. +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::ReleaseDrm() + { + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CheckProtectedFileL +// Empty implementation. +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::CheckProtectedFileL( const TDesC& /*aFileName*/ ) + { + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CanSetAutomated +// Empty implementation. +// ----------------------------------------------------------------------------- +// +TBool CProfileToneHandler::CanSetAutomated( const TDesC& /*aFileName*/ ) + { + return EFalse; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::AskAutomated +// Empty implementation. +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::AskAutomated( const TDesC& /*aFileName*/ ) + { + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetAutomated +// Empty implementation. +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::SetAutomated( TProfileTones /* aToneSetting */, + const TDesC& /*aFileName*/ ) + { + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::RemoveAutomated +// Empty implementation. +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::RemoveAutomated( const TDesC& /*aFileName*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::IsProtected +// Empty implementation. +// ----------------------------------------------------------------------------- +// +TBool CProfileToneHandler::IsProtected( const TDesC& /*aFileName*/ ) const + { + return EFalse; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileToneHandlerDrmFull.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileToneHandlerDrmFull.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,497 @@ +/* +* Copyright (c) 2002-2004 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: A helper interface to be used by S60 applications for +* setting ringing and alert tones for different profiles. +* Registers DRM protected tones as automated content +* and removes old content from automated content list. +* Shows a content activation query if necessary. +* +*/ + + + +// INCLUDE FILES +#include "cprofiletonehandler.h" + +#include +#include +#include + +#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM +#include +#include +#endif + +#include + + +// ============================ LOCAL FUNCTIONS ================================ + +CDRMHelper::TDRMHelperAutomatedType ToneSettingToAutomatedType( + TProfileTones aToneSetting ) + { + switch( aToneSetting ) + { + case EProfileRingingToneSetting: + { + return CDRMHelper::EAutomatedTypeRingingTone; + } + case EProfileMessageAlertToneSetting: + { + return CDRMHelper::EAutomatedTypeMessageAlert; + } + case EProfileEmailAlertToneSetting: + { + return CDRMHelper::EAutomatedTypeEmailAlert; + } + case EProfileInstantMessageAlertToneSetting: + { + return CDRMHelper::EAutomatedTypeIMAlert; + } + default: + { + return CDRMHelper::EAutomatedTypeOther; + } + } + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::DrmConstructL +// 2nd phase construct for DRM objects +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::DrmConstructL() + { + iDrmCommon = DRMCommon::NewL(); + iDrmHelper = CDRMHelper::NewL(); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::ReleaseDrm +// Destructor for DRM objects +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::ReleaseDrm() + { + delete iDrmHelper; + iDrmHelper = NULL; + delete iDrmCommon; + iDrmCommon = NULL; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CheckProtectedFileL +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::CheckProtectedFileL( const TDesC& aFileName ) + { + DRMCommon::TContentProtection protection; + HBufC8* mimeType = NULL; // ignored + HBufC8* contentUri = NULL; + TUint dataLength; // ignored + TInt err = iDrmCommon->GetFileInfo( aFileName, protection, mimeType, + contentUri, dataLength ); + delete mimeType; + if( err ) + { + delete contentUri; + User::Leave( err ); + } + CleanupStack::PushL( contentUri ); + + TInt result( KErrGeneral ); + CDRMRights* rights = NULL; + err = iDrmCommon->GetActiveRights( *contentUri, DRMCommon::EPlay, rights ); + + CleanupStack::PopAndDestroy( contentUri ); + + if( rights == NULL ) + { + if( err == DRMCommon::ENoRights ) + { + // Handle "No rights" situation here + iDrmHelper->HandleErrorL( DRMCommon::ENoRights, aFileName ); + return result; + } + else + { + User::Leave( KErrGeneral ); + } + } + + CleanupStack::PushL( rights ); + + switch ( err ) + { + case CDRMRights::EFullRights: // Fall through + case CDRMRights::ERestrictedRights: + { + CDRMRights::TRestriction restriction; // ignore + CDRMRights::TExpiration expiration; + TUint32 constType; + + rights->GetRightsInfo( DRMCommon::EPlay, restriction, // ignore return + expiration, constType ); // value + + // This is CFM protected file, ringingtone is set to "no" + if ( ( rights->GetPermission().iInfoBits & ENoRingingTone ) + // This is normal DRM protected count-based tone + || ( constType & CDRMRights::ECountBased ) ) + { + ShowErrorNoteL( R_PROFILE_TEXT_DRM_PREV_RIGHTS_SET ); + } + else + { + switch ( expiration ) + { + case CDRMRights::EValidRights: + { + result = KErrNone; + break; + } + + case CDRMRights::EFutureRights: + { + iDrmHelper->HandleErrorL( DRMCommon::ENoRights, aFileName ); + break; + } + + case CDRMRights::EExpiredRights: + { + iDrmHelper->HandleErrorL( DRMCommon::ERightsExpired, aFileName ); + break; + } + + default: + { + break; + } + } + + } + + + break; + } + + case CDRMRights::EPreviewRights: + { + ShowErrorNoteL( R_PROFILE_TEXT_DRM_PREV_RIGHTS_SET ); + break; + } + + case DRMCommon::ENoRights: + { + iDrmHelper->HandleErrorL( DRMCommon::ENoRights, aFileName ); + break; + } + + default: + { + break; + } + + } + + CleanupStack::PopAndDestroy( rights ); + + return result; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::CanSetAutomated +// ----------------------------------------------------------------------------- +// +TBool CProfileToneHandler::CanSetAutomated( const TDesC& aFileName ) + { + TBool canSetAutomated( EFalse ); + return + iDrmHelper->CanSetAutomated( aFileName, canSetAutomated ) == KErrNone && + canSetAutomated; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::AskAutomated +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::AskAutomated( const TDesC& aFileName ) + { + return iDrmHelper->ShowAutomatedNote( aFileName ); + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetAutomated +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::SetAutomated( TProfileTones aToneSetting, + const TDesC& aFileName ) + { + TInt err = KErrNone; + + TRAP_IGNORE( err = SetAutomatedL( aToneSetting, aFileName ) ); + + return err; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::SetAutomatedL +// ----------------------------------------------------------------------------- +// +TInt CProfileToneHandler::SetAutomatedL( TProfileTones aToneSetting, + const TDesC& aFileName ) + { + iDrmHelper->SetAutomatedType( ToneSettingToAutomatedType( aToneSetting ) ); + TInt err( iDrmHelper->SetAutomatedSilent( aFileName, EFalse ) ); + if( err == KErrNone ) + { + using namespace ContentAccess; + TVirtualPathPtr path( aFileName, KDefaultContentObject ); + CData* data = CData::NewLC( path, EContentShareReadWrite ); + err = data->ExecuteIntent( EPlay ); + CleanupStack::PopAndDestroy( data ); + // According to Risto Vilkman from DRM, KErrAccessDenied + // can be ignored at this point, since if + // CanSetAutomated says the tone is OK, it's OK. + if( err == KErrAccessDenied ) + { + err = KErrNone; + } + } + return err; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::RemoveAutomated +// ----------------------------------------------------------------------------- +// +void CProfileToneHandler::RemoveAutomated( const TDesC& aFileName ) + { + iDrmHelper->RemoveAutomatedPassive( aFileName ); // ignore return value + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::IsProtected +// ----------------------------------------------------------------------------- +// +TBool CProfileToneHandler::IsProtected( const TDesC& aFileName ) const + { + TBool result = EFalse; + TRAP_IGNORE( result = IsProtectedL( aFileName ) ); + return result; + } + +// ----------------------------------------------------------------------------- +// CProfileToneHandler::IsProtectedL +// ----------------------------------------------------------------------------- +// +TBool CProfileToneHandler::IsProtectedL( const TDesC& aFileName ) const + { + TInt isProtected( EFalse ); + ContentAccess::TVirtualPathPtr path( aFileName, + ContentAccess::KDefaultContentObject ); + CData* data = CData::NewLC( path, EContentShareReadWrite ); + TInt result = data->GetAttribute( EIsProtected, isProtected ); + CleanupStack::PopAndDestroy(); // data + + return( ( result == DRMCommon::EOk ) && isProtected ); + } + + +// ----------------------------------------------------------------------------- +// +// Functions related to WMDRM protection check +// +// ----------------------------------------------------------------------------- + +#ifndef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM + +// Some magic constants +static const TInt KMinContentLength( 16 ); +//_LIT8( KContentProtectionType, "DRM" ); +_LIT8( KASFHeaderObject, "75B22630668E11CFA6D900AA0062CE6C" ); +_LIT8( KWrmHeader, "W\0R\0M\0H\0E\0A\0D\0E\0R\0" ); + +// ----------------------------------------------------------------------------- +// FormatGUID +// ----------------------------------------------------------------------------- +// +LOCAL_C void FormatGUID( TDes8 &aGUID ) + { + TBuf8<16> copyGUID( aGUID ); + TInt i; + for( i = 0; i < 4; i++ ) + { + copyGUID[i] = aGUID[3-i]; + } + for( i = 4; i < 6; i++ ) + { + copyGUID[i] = aGUID[9 - i]; + } + for( i = 6; i < 8; i++ ) + { + copyGUID[i] = aGUID[13 - i]; + } + for( i = 8; i < 16 ; i++ ) + { + copyGUID[i] = aGUID[i]; + } + aGUID.Delete( 0, 32 ); + for( i = 0; i <16; i++ ) + { + aGUID.AppendNumFixedWidthUC( copyGUID[i], EHex, 2 ); + } + } + +// ----------------------------------------------------------------------------- +// ConvertToInt64 +// ----------------------------------------------------------------------------- +// +LOCAL_C TInt64 ConvertToInt64( TDesC8& aDes ) + { + TInt64 num = 0; + TInt i; + for( i = 7 ; i >= 0; i-- ) + { + num <<= 8; + num |= aDes[i]; + } + return num; + } + + +// ----------------------------------------------------------------------------- +// IsProtectedWmDrmL +// returns ETrue, if file is protected WMDRM file +// EFalse if file is not protected WMDRM file +// Leaves with KErrUnderflow if file has too little data to decide +// whether WmDrm or not +// may also leave with other system wide error code +// ----------------------------------------------------------------------------- +// +LOCAL_C TBool IsProtectedWmDrmL( RFile& aFileHandle ) + { + TInt r( KErrNone ); + HBufC8* buffer( NULL ); + TInt pos( 0 ); + RFile file; + TBuf8< 32 > header; + + TInt64 headerSize( 0 ); + TBool isProtectedWmDrm( EFalse ); + TPtr8 headerPtr( NULL, 0 ); + + // Leave if given handle is invalid + if( !aFileHandle.SubSessionHandle() ) + { + User::Leave( KErrBadHandle ); + } + + User::LeaveIfError( file.Duplicate( aFileHandle ) ); + CleanupClosePushL( file ); + + User::LeaveIfError( file.Seek( ESeekStart, pos ) ); + + // Check if the file is an ASF file + // Check on runtime wether WM DRM is supporeted or not + + User::LeaveIfError( file.Read( 0, header, KMinContentLength ) ); + if( header.Length() < KMinContentLength ) + { + User::Leave( KErrUnderflow ); + } + + FormatGUID( header ); + + if( header == KASFHeaderObject ) + { + // It's ASF, check still whether it's WM DRM protected or not + file.Read( header,8 ); + headerSize = ConvertToInt64( header ); + if( headerSize <= 30 ) + { + User::Leave( KErrUnderflow ); + } + if ( headerSize > ( ( KMaxTInt32 / 2 ) - 1 ) ) + { + User::Leave( KErrOverflow ); + } + buffer = HBufC8::NewLC( headerSize ); + + headerPtr.Set( buffer->Des() ); + User::LeaveIfError( file.Read( headerPtr, headerSize - 24 ) ); + + r = headerPtr.Find( KWrmHeader ); + if ( KErrNotFound != r ) + { + isProtectedWmDrm = ETrue; + } + CleanupStack::PopAndDestroy( buffer ); // buffer + } + CleanupStack::PopAndDestroy(); // file + + return isProtectedWmDrm; + } + +#endif // RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM + +// ----------------------------------------------------------------------------- +// +// CProfileToneHandler::IsFileWMDRMProtectedL +// +// ----------------------------------------------------------------------------- +// +TBool CProfileToneHandler::IsFileWMDRMProtectedL( const TDesC& aFileName ) + { + TBool res = EFalse; + RFile hFile; + + TInt err = hFile.Open( iFs, aFileName, + EFileRead | EFileStream | EFileShareReadersOnly ); + if( err == KErrInUse ) + { + err = hFile.Open( iFs, aFileName, + EFileRead | EFileStream | EFileShareAny ); + } + if( err != KErrNone ) + { + User::Leave( err ); + } + CleanupClosePushL( hFile ); + +#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM + TPtrC agent( KNullDesC ); + DRM::CDrmUtility* drmUtil( DRM::CDrmUtility::NewLC() ); + drmUtil->GetAgentL( hFile, agent ); + if( agent.Compare( DRM::KDrmWMAgentName ) == 0 ) + { + res = ETrue; + } + CleanupStack::PopAndDestroy( drmUtil ); +#else + res = IsProtectedWmDrmL( hFile ); +#endif + + CleanupStack::PopAndDestroy( &hFile ); + return res; + } + +// ----------------------------------------------------------------------------- +// +// End of Functions related to WMDRM protection check +// +// ----------------------------------------------------------------------------- + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 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: Setting item class for Vibra settings. +* +*/ + + + +// INCLUDES +#include "CProfileVibraSettingItem.h" +#include "CProfileVibraSettingPage.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileVibraSettingItem::CProfileVibraSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileVibraSettingItem::CProfileVibraSettingItem( + TInt aIdentifier, TBool& aValue ) + : CAknBinaryPopupSettingItem( aIdentifier, aValue ) + { + } + + +// ----------------------------------------------------------------------------- +// CProfileVibraSettingItem::CreateSettingPageL +// ----------------------------------------------------------------------------- +// +CAknSettingPage* CProfileVibraSettingItem::CreateSettingPageL() + { + return new( ELeave ) CProfileVibraSettingPage( + SettingPageResourceId(), + *QueryValue() ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,65 @@ +/* +* Copyright (c) 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: Setting item class for Vibra settings. +* +*/ + + + +#ifndef CPROFILEVIBRASETTINGITEM_H +#define CPROFILEVIBRASETTINGITEM_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CAknSettingPage; + +// CLASS DECLARATION +/** +* Setting item class for Vibra settings. +* CProfileVibraSettingItem extends CAknBinaryPopupSettingItem +* in order to launch CProfileVibraSettingPage +* instead of CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 5.0 +*/ +NONSHARABLE_CLASS( CProfileVibraSettingItem ) : public CAknBinaryPopupSettingItem + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Setting item identifier. + * @param aValue Vibra setting value. + */ + CProfileVibraSettingItem( + TInt aIdentifier, + TBool& aValue ); + + private: // Functions from base classes + + /** + * From CAknBinaryPopupSettingItem + */ + CAknSettingPage* CreateSettingPageL(); + + private: // Data + + }; + +#endif // CPROFILEVIBRASETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingPage.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingPage.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,85 @@ +/* +* Copyright (c) 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: Setting page class for Vibra settings. +* +*/ + + + +// INCLUDES +#include +#include // For StringLoader +#include // For CAknInformationNote + +// for power save mode handling +#include +#include +#include + +#include "CProfileVibraSettingPage.h" +#include "ProfileSettingsView.hrh" + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileVibraSettingPage::CProfileVibraSettingPage +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileVibraSettingPage::CProfileVibraSettingPage( + TInt aResourceID, MAknQueryValue& aQueryValue ) + : CAknPopupSettingPage( aResourceID, aQueryValue ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileVibraSettingPage::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileVibraSettingPage::ConstructL() + { + CAknPopupSettingPage::ConstructL(); + } + +// Destructor. +CProfileVibraSettingPage::~CProfileVibraSettingPage() + { + } + +// ----------------------------------------------------------------------------- +// CProfileFeedbackSettingPage::OkToExitL +// ----------------------------------------------------------------------------- +// +TBool CProfileVibraSettingPage::OkToExitL( TBool aAccept ) + { + if( aAccept ) + { + TInt psm = EPsmsrvModeNormal; + CRepository* cenrep = CRepository::NewLC( KCRUidPowerSaveMode ); + cenrep->Get( KPsmCurrentMode, psm ); + CleanupStack::PopAndDestroy( cenrep ); + if( psm == EPsmsrvModePowerSave ) + { + HBufC* buf = StringLoader::LoadLC( R_PROFILE_TEXT_PSM_INFONOTE ); + CAknInformationNote* queryDialog = new (ELeave) CAknInformationNote( EFalse ); + queryDialog->ExecuteLD( *buf ); + CleanupStack::PopAndDestroy( buf ); + } + } + return ETrue; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingPage.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/CProfileVibraSettingPage.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,75 @@ +/* +* Copyright (c) 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: Setting page class for Vibra settings. +* +*/ + + + +#ifndef CPROFILEVIBRASETTINGPAGE_H +#define CPROFILEVIBRASETTINGPAGE_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CFLDController; + +// CLASS DECLARATION +/** +* Setting page class for Vibra settings. +* CProfileVibraSettingPage extends CAknPopupSettingPage. +* +* @lib ProfileSettingsView.lib +* @since 5.0 +*/ +NONSHARABLE_CLASS( CProfileVibraSettingPage ) : public CAknPopupSettingPage + { + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aResourceID Setting page resource ID. + * @param aQueryValue + */ + CProfileVibraSettingPage( + TInt aResourceID, + MAknQueryValue& aQueryValue ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CProfileVibraSettingPage(); + + private: // Functions from base classes + + /** + * From CAknSettingPage + */ + TBool OkToExitL( TBool aAccept ); + + private: // New functions + + private: // Data + + }; + +#endif // CPROFILEVIBRASETTINGPAGE_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,159 @@ +/* +* Copyright (c) 2002-2006 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: A wrapper interface around MMF (Multimedia Framework) to get +* information about MIME-types supported by MMF. +* +*/ + + + +// CLASS HEADER +#include "ProfileMmfInfoUtility.h" + +// INTERNAL INCLUDES + +// EXTERNAL INCLUDES +#include +#include +#include +#include +namespace + { + // CONSTANTS + _LIT8( KProfileRngMimeType, "application/vnd.nokia.ringing-tone" ); + //_LIT8( KProfilePlainTextType, "text/plain" ); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileMmfInfoUtility::IsMimeTypeSupported +// ----------------------------------------------------------------------------- +// +TBool ProfileMmfInfoUtility::IsMimeTypeSupportedL( const TDesC8& aMimeType ) + { + + //if( aMimeType.CompareF( KProfilePlainTextType ) == 0 ) + // { + // return EFalse; + // } + + if( aMimeType.CompareF( KProfileRngMimeType ) == 0 ) + { + return ETrue; + } + + TBool result( EFalse ); + + CMMFFormatSelectionParameters* formatPrms = + CMMFFormatSelectionParameters::NewLC(); + CMMFControllerPluginSelectionParameters* controllerPrms = + CMMFControllerPluginSelectionParameters::NewLC(); + + // Empty format parameters means: "get all the supported formats" + controllerPrms->SetRequiredPlayFormatSupportL( *formatPrms ); + RMMFControllerImplInfoArray cntrlArray; + controllerPrms->ListImplementationsL( cntrlArray ); + + for( TInt i( cntrlArray.Count() - 1 ); i >= 0 && !result; --i ) + { + const RMMFFormatImplInfoArray& + infoArray( cntrlArray[i]->PlayFormats() ); + + for( TInt j( infoArray.Count() - 1 ); j >= 0; --j ) + { + if( infoArray[j]->SupportsMimeType( aMimeType ) ) + { + result = ETrue; + break; + } + } + } + + cntrlArray.ResetAndDestroy(); + cntrlArray.Close(); + CleanupStack::PopAndDestroy( 2, formatPrms ); + + return result; + } + +// ----------------------------------------------------------------------------- +// CProfileMmfInfoUtility::IsHeaderDataSupportedL +// ----------------------------------------------------------------------------- +// +TBool ProfileMmfInfoUtility::IsHeaderDataSupportedL( const TDesC& aFileName ) + { + TBool result( EFalse ); + //the max header length is 256 bytes + const TInt KMaxHeaderLength( 256 ); + HBufC8* header = HBufC8::NewLC( KMaxHeaderLength ); + TPtr8 headerPtr = header->Des(); + GetFileHeaderDataL( aFileName, headerPtr, KMaxHeaderLength ); + CMMFFormatSelectionParameters* formatPrms = + CMMFFormatSelectionParameters::NewLC(); + CMMFControllerPluginSelectionParameters* controllerPrms = + CMMFControllerPluginSelectionParameters::NewLC(); + + // Empty format parameters means: "get all the supported formats" + controllerPrms->SetRequiredPlayFormatSupportL( *formatPrms ); + RMMFControllerImplInfoArray cntrlArray; + controllerPrms->ListImplementationsL( cntrlArray ); + + for ( TInt i( cntrlArray.Count() - 1 ); i >= 0 && !result; --i ) + { + const RMMFFormatImplInfoArray& infoArray( cntrlArray[i]->PlayFormats() ); + + for ( TInt j(infoArray.Count() - 1); j >= 0; --j ) + { + if ( infoArray[j]->SupportsHeaderDataL( *header ) ) + { + result = ETrue; + break; + } + } + } + + cntrlArray.ResetAndDestroy(); + cntrlArray.Close(); + CleanupStack::PopAndDestroy( 3, header );//controllerPrms, formatPrms and header + + return result; + } + +// ----------------------------------------------------------------------------- +// CProfileMmfInfoUtility::GetFileHeaderDataL +// ----------------------------------------------------------------------------- +// +void ProfileMmfInfoUtility::GetFileHeaderDataL( const TDesC& aFileName, + TDes8& aHeaderData, TInt aMaxHeaderLength ) + { + TInt error = KErrNone; + using namespace ContentAccess; + TVirtualPathPtr path( aFileName, ContentAccess::KDefaultContentObject ); + CData* data = CData::NewLC( path, EContentShareReadWrite ); + TInt size = 0; + data->DataSizeL( size ); + if ( size > 0 ) + { + if ( size > aMaxHeaderLength ) + size = aMaxHeaderLength; + TInt pos = 0; + error = data->Seek( ESeekStart, pos ); + error = data->Read( aHeaderData, size ); + } + CleanupStack::PopAndDestroy(); // data + } + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileMmfInfoUtility.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,81 @@ +/* +* Copyright (c) 2002-2006 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: A wrapper interface around MMF (Multimedia Framework) to get +* information about MIME-types supported by MMF. +* +*/ + + + +#ifndef PROFILEMMFINFOUTILITY_H +#define PROFILEMMFINFOUTILITY_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* A helper interface used by CProfileToneHandler to check whether a MIME +* type is supported by MMF. +* +* @lib ProfileSettingsView.lib +* @since Series 60 3.0 +*/ +class ProfileMmfInfoUtility + { + public: // New functions + + /** + * Checks if the given MIME-type is supported by MMF. In other words, + * checks if there is an MMF plugin to handle the given MIME type. + * @param aMimeType the MIME type for which an MMF plugin is searched. + * @return ETrue if the given MIME is supported by MMF, + * EFalse otherwise. + */ + static TBool IsMimeTypeSupportedL( const TDesC8& aMimeType ); + + /** + * Checks if the given file's header data is supported + * by MMF, especially for m4a drm files. + * @param aFileName the name of the file to be judged. + * @return ETrue if the given file is supported by MMF, + * EFalse otherwise. + */ + static TBool IsHeaderDataSupportedL( const TDesC& aFileName ); + + private: // Constructor and destructor + + /** + * Default constructor. This is private since this class is not intended + * to be instantiated. + */ + ProfileMmfInfoUtility() {}; + + // Destructor. + ~ProfileMmfInfoUtility() {}; + + //internal use + /** + * Get the header data of the file + * @param aFileName specifies the name of the file. + * @param aHeaderData contains the header data of the file. + * @param aMaxLength the length of header data. + */ + static void GetFileHeaderDataL(const TDesC& aFileName, TDes8& aHeaderData, TInt aMaxLength); + }; + +#endif // PROFILEMMFINFOUTILITY_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfilePanics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfilePanics.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2002 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: Panic codes of Profiles application. +* +*/ + + + +#ifndef PROFILEPANICS_H +#define PROFILEPANICS_H + +/** +* Enumerations for panics of Profiles application. +*/ +enum TProfilePanics + { + EProfilePanicInvalidSettingItemId, + EProfilePanicProfileIndexOutOfRange, + EProfilePanicNoProfiles + }; + +_LIT( KProfilePanicText, "ProfileApp" ); + +#endif // PROFILEPANICS_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileSettingsView.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileSettingsView.hrh Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,58 @@ +/* +* Copyright (c) 2002 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: Resource headers of Profile Settings View +* +*/ + + + +#ifndef PROFILESETTINGSVIEW_HRH +#define PROFILESETTINGSVIEW_HRH + +// DATA TYPES +enum TProfileSettingItemIds + { + EProfileSettingRingingToneId = 0, + EProfileSettingRingingToneLine1Id, + EProfileSettingRingingToneLine2Id, + EProfileSettingVideoCallToneId, + EProfileSettingRingingTypeId, + EProfileSettingRingingVolumeId, + EProfileSettingMediaVolumeId, + EProfileSettingMessageAlertToneId, + EProfileSettingEmailAlertToneId, + EProfileSettingVibratingAlertId, + EProfileSettingEmailVibratingAlertId, + EProfileSettingKeypadVolumeId, + EProfileSettingWarningAndGameTonesId, + EProfileSettingAlertForId, + EProfileSettingProfileNameId, + EProfileSettingTTSRingingToneId, + EProfileSettingPTTRingingToneId, + EProfileSettingPTTStatusId, + EProfileSetting3dEffectId, + EProfileSetting3dEchoId, + EProfileSettingTactileFeedbackId, + EProfileSettingAudioFeedbackId + }; + +enum TProfileControlIds + { + EProfileControlIdConfirmationNote = 1 + }; + +#endif // PROFILESETTINGSVIEW_HRH + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileSettingsView.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileSettingsView.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,401 @@ +/* +* Copyright (c) 2002 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: Profiles Settings View resources +* +*/ + + + +// RESOURCE IDENTIFIER +NAME PRO2 + +// INTERNAL INCLUDES +#include +#include +#include "ProfileSettingsView.hrh" +#include "ProfileInternal.hrh" + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// RESOURCE DEFINITIONS + +RESOURCE RSS_SIGNATURE {} + +RESOURCE TBUF { buf = ""; } + +RESOURCE EIK_APP_INFO {} + +// Include the common part of the resources (of application and plugin): +#include "ProfileSettingsViewCommon.rss" + +// ----------------------------------------------------------------------------- +// +// r_profile_setting_item_list +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_ITEM_LIST r_profile_setting_item_list + { + items = + { + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingToneId; + name = qtn_mode_ringing_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingToneLine1Id; + name = qtn_mode_line1_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingToneLine2Id; + name = qtn_mode_line2_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingTypeId; + name = qtn_mode_ringing_type_2; + setting_page_resource = r_profile_ringing_type_setting_page; + associated_resource = r_profile_ringing_type_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingVolumeId; + name = qtn_mode_ringing_volume; + setting_page_resource = r_profile_ringing_volume_setting_page; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingMediaVolumeId; + name = qtn_profiles_media_volume; + setting_page_resource = r_profile_media_volume_setting_page; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingMessageAlertToneId; + name = qtn_mode_message_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingKeypadVolumeId; + name = qtn_mode_keypad_volume; + setting_page_resource = r_profile_keypad_volume_setting_page; + associated_resource = r_profile_keypad_volume_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingVibratingAlertId; + name = qtn_mode_vibrating_alert; + setting_page_resource = r_profile_vibrating_alert_setting_page; + associated_resource = r_profile_vibrating_alert_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingEmailVibratingAlertId; + name = qtn_profiles_email_vibra; + setting_page_resource = r_profile_email_vibrating_alert_setting_page; + associated_resource = r_profile_email_vibrating_alert_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingVideoCallToneId; + name = qtn_mode_vt_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingEmailAlertToneId; + name = qtn_profiles_e_mail_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingWarningAndGameTonesId; + name = qtn_mode_warning_game; + setting_page_resource = r_profile_warning_tones_setting_page; + associated_resource = r_profile_warning_alert_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingTTSRingingToneId; + name = qtn_mode_tts_ringing_tone; + setting_page_resource = r_profile_tts_tones_setting_page; + associated_resource = r_profile_tts_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSetting3dEffectId; + name = qtn_profiles_tone_3d_effect; + setting_page_resource = r_profile_3d_effect_setting_page; + associated_resource = r_profile_3d_effect_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSetting3dEchoId; + name = qtn_profiles_tone_3d_echo; + setting_page_resource = r_profile_3d_echo_setting_page; + associated_resource = r_profile_3d_echo_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingTactileFeedbackId; + name = qtn_mode_tactile_feedback; + setting_page_resource = r_profile_tactile_feedback_setting_page; + associated_resource = r_profile_tactile_feedback_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingAudioFeedbackId; + name = qtn_mode_audio_feedback; + setting_page_resource = r_profile_audio_feedback_setting_page; + associated_resource = r_profile_audio_feedback_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingAlertForId; + name = qtn_mode_alert_for; + setting_page_resource = r_profile_alert_for_setting_page; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingPTTRingingToneId; + name = qtn_poc_profile_ringing_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingPTTStatusId; + name = qtn_poc_profile_status; + setting_page_resource = r_profile_ptt_status_setting_page; + associated_resource = r_profile_ptt_status_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingProfileNameId; + name = qtn_mode_sett_profile_name; + setting_page_resource = r_profile_name_setting_page; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_alert_for_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_alert_for_setting_page + { + label = qtn_mode_alert_for; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__UNMARK; + type = EAknSetListBox; + editor_resource_id = r_profile_alert_for_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_alert_for_control +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE LISTBOX r_profile_alert_for_control + { + flags = EEikListBoxMultipleSelection; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_name_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_name_setting_page + { + label = qtn_mode_sett_profile_name; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EEikCtEdwin; + editor_resource_id = r_profile_name_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_name_control +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE EDWIN r_profile_name_control + { + flags = EEikEdwinNoLineOrParaBreaks; + width = 9; + lines = 5; + maxlength = PROFILES_MAX_NAME_LENGTH; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_media_volume_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_media_volume_setting_page + { + label = qtn_profiles_media_volume; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtVolumeControl; + editor_resource_id = r_profile_ringing_volume_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ptt_status_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_ptt_status_setting_page + { + label = qtn_mode_ringing_type_2; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ptt_status_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_ptt_status_setting_texts + { + setting_texts_resource = r_profile_ptt_status_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ptt_status_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_ptt_status_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { + value = EProfilePttActive; text = qtn_poc_profile_status_active; }, + AVKON_ENUMERATED_TEXT { + value = EProfilePttSilent; text = qtn_poc_profile_status_silent; }, + AVKON_ENUMERATED_TEXT { + value = EProfilePttDoNotDisturb; text = qtn_poc_profile_status_dnd; } + }; + } + + + +// ----------------------------------------------------------------------------- +// +// r_profile_text_all_callers +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_all_callers { buf = qtn_tc_all_callers; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_several_groups +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_several_groups { buf = qtn_tc_several_groups; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_rename_error +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_rename_error { buf = qtn_mode_rename_error; } + +// ----------------------------------------------------------------------------- +// +// r_profile_confirm_ringtone_found +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_confirm_ringtone_found { + buf = qtn_profiles_confirm_ringtone_found; } + +// ----------------------------------------------------------------------------- +// +// r_profile_confirm_ringtone_found_query +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_profile_confirm_ringtone_found_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_OK_EMPTY; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationQueryLayout; + label = ""; + bmpfile = AVKON_BITMAP_FILE; + bmpid = EMbmAvkonQgn_note_info; + bmpmask = EMbmAvkonQgn_note_info_mask; + }; + } + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_profile_text_psm_infonote +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_psm_infonote { buf = qtn_power_saving_protected_settings_infonote; } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileSettingsViewCommon.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/SettingsViewSrc/ProfileSettingsViewCommon.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,571 @@ +/* +* Copyright (c) 2006 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: Common part of Profiles Settings View/Profiles GS Tones view +* plugin resources. Note, that this should always be compiled as +* a part of resources (settings view or plugin). +* +*/ + +#include + +// RESOURCE DEFINITIONS + +// ----------------------------------------------------------------------------- +// +// r_profile_empty_popup_setting_list_control +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE POPUP_SETTING_LIST r_profile_empty_popup_setting_list_control + { + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ringing_type_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_ringing_type_setting_page + { + label = qtn_mode_ringing_type_2; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ringing_type_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_ringing_type_setting_texts + { + setting_texts_resource = r_profile_ringing_type_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ringing_type_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_ringing_type_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = EProfileRingingTypeRinging; text = qtn_tc_ringing; }, + AVKON_ENUMERATED_TEXT { value = EProfileRingingTypeAscending; text = qtn_tc_ascending; }, + AVKON_ENUMERATED_TEXT { value = EProfileRingingTypeRingingOnce; text = qtn_tc_ring_once; }, + AVKON_ENUMERATED_TEXT { value = EProfileRingingTypeBeepOnce; text = qtn_tc_beep_once; } +//CDMA doesn't have silent ringingtype +#ifndef __PROTOCOL_CDMA + ,AVKON_ENUMERATED_TEXT { value = EProfileRingingTypeSilent; text = qtn_tc_silent; } +#endif + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ringing_volume_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_ringing_volume_setting_page + { + label = qtn_mode_ringing_volume; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtVolumeControl; + editor_resource_id = r_profile_ringing_volume_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_ringing_volume_control +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE VOLUME r_profile_ringing_volume_control + { + flags = ESettingsVolumeControl; + value = 7; // Has to have a value, otherwise crashes + } + +// ----------------------------------------------------------------------------- +// +// r_profile_vibrating_alert_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_vibrating_alert_setting_page + { + label = qtn_mode_vibrating_alert; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_vibrating_alert_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_vibrating_alert_setting_texts + { + setting_texts_resource = r_profile_vibrating_alert_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_vibrating_alert_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_vibrating_alert_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = 1; text = qtn_mode_vibrating_alert_on; }, + AVKON_ENUMERATED_TEXT { value = 0; text = qtn_mode_vibrating_alert_off; } + }; + } + +RESOURCE AVKON_SETTING_PAGE r_profile_email_vibrating_alert_setting_page + { + label =qtn_profiles_email_vibra; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } +// ----------------------------------------------------------------------------- +// +// r_profile_vibrating_email_alert_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_email_vibrating_alert_setting_texts + { + setting_texts_resource = r_profile_email_vibrating_alert_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_email_vibrating_alert_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_email_vibrating_alert_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = 1; text = qtn_mode_email_vibra_on; }, + AVKON_ENUMERATED_TEXT { value = 0; text = qtn_mode_email_vibra_off; } + }; + } +// ----------------------------------------------------------------------------- +// +// r_profile_tactile_feedback_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_tactile_feedback_setting_page + { + label = qtn_mode_tactile_feedback; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_tactile_feedback_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_tactile_feedback_setting_texts + { + setting_texts_resource = r_profile_tactile_feedback_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_tactile_feedback_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_tactile_feedback_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = EProfileTactileFeedbackOff; text = qtn_mode_tactile_feedback_off; }, + AVKON_ENUMERATED_TEXT { value = EProfileTactileFeedbackLevel1; text = qtn_mode_tactile_feedback_level1; }, + AVKON_ENUMERATED_TEXT { value = EProfileTactileFeedbackLevel2; text = qtn_mode_tactile_feedback_level2; }, + AVKON_ENUMERATED_TEXT { value = EProfileTactileFeedbackLevel3; text = qtn_mode_tactile_feedback_level3; } + }; + } +// ----------------------------------------------------------------------------- +// +// r_profile_audio_feedback_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_audio_feedback_setting_page + { + label = qtn_mode_audio_feedback; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_audio_feedback_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_audio_feedback_setting_texts + { + setting_texts_resource = r_profile_audio_feedback_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_audio_feedback_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_audio_feedback_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = EProfileAudioFeedbackOff; text = qtn_mode_audio_feedback_off; }, + AVKON_ENUMERATED_TEXT { value = EProfileAudioFeedbackLevel1; text = qtn_mode_audio_feedback_level1; }, + AVKON_ENUMERATED_TEXT { value = EProfileAudioFeedbackLevel2; text = qtn_mode_audio_feedback_level2; }, + AVKON_ENUMERATED_TEXT { value = EProfileAudioFeedbackLevel3; text = qtn_mode_audio_feedback_level3; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_warning_alert_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_warning_alert_setting_texts + { + setting_texts_resource = r_profile_warning_alert_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_warning_alert_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_warning_alert_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = 1; text = qtn_mode_warning_game_on; }, + AVKON_ENUMERATED_TEXT { value = 0; text = qtn_mode_warning_game_off; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_tts_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_tts_setting_texts + { + setting_texts_resource = r_profile_tts_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_tts_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_tts_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = 1; text = qtn_mode_tts_ringing_tone_on; }, + AVKON_ENUMERATED_TEXT { value = 0; text = qtn_mode_tts_ringing_tone_off; } + }; + } +// ----------------------------------------------------------------------------- +// +// r_profile_keypad_volume_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_keypad_volume_setting_page + { + label = qtn_mode_keypad_volume; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_keypad_volume_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_keypad_volume_setting_texts + { + setting_texts_resource = r_profile_keypad_volume_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_keypad_volume_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_keypad_volume_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = EProfileKeypadVolumeOff; text = qtn_tc_keypad_off; }, + AVKON_ENUMERATED_TEXT { value = EProfileKeypadVolumeLevel1; text = qtn_tc_keypad_quiet; }, + AVKON_ENUMERATED_TEXT { value = EProfileKeypadVolumeLevel2; text = qtn_tc_keypad_medium; }, + AVKON_ENUMERATED_TEXT { value = EProfileKeypadVolumeLevel3; text = qtn_tc_keypad_loud; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_warning_tones_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_warning_tones_setting_page + { + label = qtn_mode_warning_game; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_tts_tones_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_tts_tones_setting_page + { + label = qtn_mode_tts_ringing_tone; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_3d_effect_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_3d_effect_setting_page + { + label = qtn_profiles_tone_3d_effect; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_3d_effect_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_3d_effect_setting_texts + { + setting_texts_resource = r_profile_3d_effect_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_3d_effect_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_3d_effect_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = EProfile3DEffectOff; text = qtn_profiles_3d_effect_off; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEffectCircle; text = qtn_profiles_3d_effect_circle; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEffectFlyby; text = qtn_profiles_3d_effect_flyby; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEffectZigZag; text = qtn_profiles_3d_effect_zig_zag; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEffectRandomWalk; text = qtn_profiles_3d_effect_random_walk; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEffectChaos; text = qtn_profiles_3d_effect_chaos; } + +#ifdef __STEREO_WIDENING_EFFECT_UI + ,AVKON_ENUMERATED_TEXT { value = EProfile3DEffectStereoWidening; text = qtn_profiles_3d_effect_stereo_widening; } +#endif + + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_3d_echo_setting_page +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_3d_echo_setting_page + { + label = qtn_profiles_tone_3d_echo; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_3d_echo_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_3d_echo_setting_texts + { + setting_texts_resource = r_profile_3d_echo_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_3d_echo_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_3d_echo_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoOff; text = qtn_profiles_3d_echo_off; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoLivingRoom; text = qtn_profiles_3d_echo_living_room; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoCave; text = qtn_profiles_3d_echo_cave; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoStoneCorridor; text = qtn_profiles_3d_echo_stone_corridor; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoForest; text = qtn_profiles_3d_echo_forest; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoSewerPipe; text = qtn_profiles_3d_echo_sewer_pipe; }, + AVKON_ENUMERATED_TEXT { value = EProfile3DEchoUnderwater; text = qtn_profiles_3d_echo_underwater; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_volume_confirmation_query +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_profile_volume_confirmation_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items= + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationQueryLayout; + label = qtn_tc_ringing_level_warning; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_select_tone +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_select_tone { buf = qtn_tc_popup_heading; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_none +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_none { buf = qtn_tsl_off; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_drm_prev_rights_set +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_drm_prev_rights_set { buf = qtn_drm_prev_rights_set; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_tone_maxsize_error +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_tone_maxsize_error { buf = qtn_profiles_tone_maxsize_error; } + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileAppUi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileAppUi.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,117 @@ +/* +* Copyright (c) 2002 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: Application UI class. +* +*/ + + +// INCLUDE FILES +#include "CProfileAppUi.h" + +#include +#include + +#include "CProfileMainView.h" +#include "CProfileSettingsView.h" +#include "ProfileApp.hrh" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileAppUi::CProfileAppUi +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileAppUi::CProfileAppUi( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ) + : iEngineHandler( aEngineHandler ), + iIndexHandler( aIndexHandler ) + { + } + +// Destructor +CProfileAppUi::~CProfileAppUi() + { + } + +// ----------------------------------------------------------------------------- +// CProfileAppUi::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileAppUi::ConstructL() + { + BaseConstructL( EAknEnableSkin | EAknEnableMSK |EAknSingleClickCompatible); + + CProfileMainView* mainView = + CProfileMainView::NewLC( iEngineHandler, iIndexHandler ); + AddViewL( mainView ); // transfer ownership to CAknViewAppUi + SetDefaultViewL( *mainView ); + CleanupStack::Pop( mainView); + iMainView = mainView; + + CProfileSettingsView* settingsView = + CProfileSettingsView::NewLC( + iEngineHandler, iIndexHandler); + AddViewL( settingsView ); // transfer ownership to CAknViewAppUi + CleanupStack::Pop( settingsView ); // iSettingsView + iSettingsView = settingsView; + } + +// ----------------------------------------------------------------------------- +// CProfileAppUi::HandleCommandL +// ----------------------------------------------------------------------------- +// +void CProfileAppUi::HandleCommandL( TInt aCommand ) + { + switch( aCommand ) + { + case EAknSoftkeyBack: // Back from Settings view + { + if ( iView == iMainView ) + { + Exit(); // Back from Settings view + break; + } + ActivateLocalViewL( iMainView->Id() ); + break; + } + case EProfileCmdPersonalise: // Personalise from Main view + { + ActivateLocalViewL( iSettingsView->Id() ); + break; + } + // FALLTHROUGH for PC Lint + // Exit from options menu and exit from right softkey do the same thing. + case EEikCmdExit: + case EAknSoftkeyExit: + { + Exit(); + break; + } + case EAknCmdHelp: + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), AppHelpContextL() ); + break; + } + default: + { + break; + } + } + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileAppUi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileAppUi.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,89 @@ +/* +* Copyright (c) 2002 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: Application UI class. +* +*/ + + + +#ifndef CPROFILEAPPUI_H +#define CPROFILEAPPUI_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CProfileMainView; +class CProfileSettingsView; +class CProfileEngineHandler; +class CProfileIndexHandler; + +// CLASS DECLARATION +/** +* Application UI class. +* CProfileAppUi instantiates two views and +* implements view switching and command handling. +* The views are owned by the base class. +* +* @lib ProfileApp.app +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileAppUi ) : public CAknViewAppUi + { + + public: // Constructors and destructor + + /** + * C++ default constructor. + */ + CProfileAppUi( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ); + + /** + * Destructor + */ + ~CProfileAppUi(); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + public: // Functions from base classes + + /** + * From CEikAppUi + */ + void HandleCommandL( TInt aCommand ); + + private: // Data + + // Engine handler + CProfileEngineHandler& iEngineHandler; + + // Index handler + CProfileIndexHandler& iIndexHandler; + + // Ref: Pointer to Main view + CProfileMainView* iMainView; + + // Ref: Pointer to Settings view + CProfileSettingsView* iSettingsView; + }; + +#endif // CPROFILEAPPUI_H + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileApplication.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileApplication.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,35 @@ +/* +* Copyright (c) 2002 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: Application class. +* +*/ + + +// INCLUDE FILES +#include "CProfileApplication.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// NewApplication implements... +// ----------------------------------------------------------------------------- +// +EXPORT_C CApaApplication* NewApplication() + { + return new CProfileApplication; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileApplication.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileApplication.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2002 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: Application class. +* +*/ + + + +#ifndef CPROFILEAPPLICATION_H +#define CPROFILEAPPLICATION_H + +// INCLUDES +#include +#include "CProfileDocument.h" + +// CONSTANTS +const TUid KUidProfileApp = { 0x100058F8 }; // UID of the application + +// CLASS DECLARATION +/** +* Application class. +* +* @lib ProfileApp.app +* @since 1.2 +*/ +class CProfileApplication : public CAknApplication + { + private: // Functions from base classes + + /** + * From CEikApplication + */ + CApaDocument* CreateDocumentL() { return( CProfileDocument::NewL( *this ) ); } + + /** + * From CApaApplication + */ + TUid AppDllUid() const { return KUidProfileApp; } + + }; + +#endif // CPROFILEAPPLICATION_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileApplication_SEC_APPARC.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileApplication_SEC_APPARC.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2002 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: ProfileApplication class for Secure AppArc +* +*/ + + +// INCLUDE FILES +#include "CProfileApplication.h" +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// NewApplication +// ----------------------------------------------------------------------------- +// +LOCAL_C CApaApplication* NewApplication() + { + return new CProfileApplication; + } + +// ----------------------------------------------------------------------------- +// E32Main +// ----------------------------------------------------------------------------- +// +GLDEF_C TInt E32Main() + { + return EikStart::RunApplication( NewApplication ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileDocument.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileDocument.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,83 @@ +/* +* Copyright (c) 2002 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: The document class for Profiles application. +* +*/ + + +// INCLUDE FILES +#include "CProfileDocument.h" + +#include +#include +#include + +#include "CProfileAppUi.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileDocument::CProfileDocument +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileDocument::CProfileDocument( CEikApplication& aApp ) + : CAknDocument( aApp ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileDocument::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileDocument::ConstructL() + { + FeatureManager::InitializeLibL(); + iEngineHandler = CProfileEngineHandler::NewL(); + iIndexHandler = CProfileIndexHandler::NewL( *iEngineHandler ); + } + +// ----------------------------------------------------------------------------- +// CProfileDocument::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileDocument* CProfileDocument::NewL( CEikApplication& aApp ) + { + CProfileDocument* self = new( ELeave ) CProfileDocument( aApp ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CProfileDocument::~CProfileDocument() + { + delete iIndexHandler; + delete iEngineHandler; + FeatureManager::UnInitializeLib(); + } + +// ----------------------------------------------------------------------------- +// CProfileDocument::CreateAppUiL +// ----------------------------------------------------------------------------- +// +CEikAppUi* CProfileDocument::CreateAppUiL() + { + return new( ELeave ) CProfileAppUi( *iEngineHandler, *iIndexHandler ); + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileDocument.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileDocument.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,87 @@ +/* +* Copyright (c) 2002 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: The document class for Profiles application. +* +*/ + + + +#ifndef CPROFILEDOCUMENT_H +#define CPROFILEDOCUMENT_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CEikAppUi; +class CProfileEngineHandler; +class CProfileIndexHandler; + +// CLASS DECLARATION +/** +* The document class for Profiles application. +* CProfileDocument owns Engine handler and Index handler. +* An instance of both are needed during application lifetime. +* CProfileDocument initializes the Feature Manager. +* +* @lib ProfileApp.app +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileDocument ) : public CAknDocument + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CProfileDocument* NewL( CEikApplication& aApp ); + + /** + * Destructor. + */ + ~CProfileDocument(); + + private: // Functions from base classes + + /** + * From CEikDocument + */ + CEikAppUi* CreateAppUiL(); + + private: + + /** + * C++ constructor. + */ + CProfileDocument( CEikApplication& aApp ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // Own: Engine handler. + CProfileEngineHandler* iEngineHandler; + + // Own: Index handler. + CProfileIndexHandler* iIndexHandler; + + }; + +#endif // CPROFILEDOCUMENT_H + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainContainer.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,293 @@ +/* +* Copyright (c) 2002 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: Container class of main view. +* +*/ + + +// INCLUDE FILES + +#include "CProfileMainContainer.h" + +#include +#include +#include // AknTextUtils +#include +#include +#include +#include +#include +#include +#include + +#include "CProfileMainView.h" +#include "CProfileDocument.h" +#include "CProfileApplication.h" +#include "ProfileApp.hrh" +#include "ProfileEngineConstants.h" + +// CONSTANTS +_LIT( KTabChar, "\t" ); +const TInt KProfileNameArrayGranularity( 5 ); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::CProfileMainContainer +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileMainContainer::CProfileMainContainer( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknView& aView ) + : iEngineHandler( aEngineHandler ), + iIndexHandler( aIndexHandler ), + iView( aView ) + { + SetMopParent( &aView ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::ConstructL( const TRect& aRect ) + { + CreateWindowL(); + + iListBox = new( ELeave ) CAknSingleStyleListBox(); + iListBox->ConstructL( this ); + iListBox->SetListBoxObserver( this ); + iListBox->CreateScrollBarFrameL( ETrue ); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + + SetRect( aRect ); + ActivateL(); + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileMainContainer* CProfileMainContainer::NewL( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknView& aView ) + { + CProfileMainContainer* self = new( ELeave ) CProfileMainContainer( + aEngineHandler, aIndexHandler, aView ); + CleanupStack::PushL( self ); + self->ConstructL( aView.ClientRect() ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CProfileMainContainer::~CProfileMainContainer() + { + delete iListBox; + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::PopulateListBoxL +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::PopulateListBoxL( TInt aTopItemIndex ) + { + // Transfer decorated array ownership for listbox model + CDesCArrayFlat* decoratedArray = + new( ELeave ) CDesCArrayFlat( KProfileNameArrayGranularity ); + CTextListBoxModel* model = iListBox->Model(); + model->SetOwnershipType( ELbmOwnsItemArray ); + model->SetItemTextArray( decoratedArray ); + + MProfilesNamesArray* array = iEngineHandler.IdArray(); + + // Populate the decorated array for listbox + TInt count( array->MdcaCount() ); + TBuf name; // + 1 for tab character + for( TInt index( 0 ); index < count; index++ ) + { + name.Copy( KTabChar ); + TBuf< KProfileMaxNameLength > tmpName( array->MdcaPoint( index ) ); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( tmpName ); + AknTextUtils::ReplaceCharacters( tmpName, KAknReplaceListControlChars, + TChar( ' ' ) ); + name.Append( tmpName ); + decoratedArray->AppendL( name ); + } + + // Update listbox + iListBox->HandleItemAdditionL(); + + // Update view + if( aTopItemIndex >= 0 ) + { + iListBox->SetTopItemIndex( aTopItemIndex ); + } + iListBox->SetCurrentItemIndex( iIndexHandler.CurrentProfileIndex() ); + iListBox->DrawNow(); + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::TopItemIndex +// ----------------------------------------------------------------------------- +// +TInt CProfileMainContainer::TopItemIndex() const + { + return iListBox->TopItemIndex(); + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::CountComponentControls +// ----------------------------------------------------------------------------- +// +TInt CProfileMainContainer::CountComponentControls() const + { + return KMainContainerSubControlCount; + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::ComponentControl +// ----------------------------------------------------------------------------- +// +CCoeControl* CProfileMainContainer::ComponentControl( TInt aIndex ) const + { + switch( aIndex ) + { + case 0: + { + return iListBox; + } + default: + { + return NULL; + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::SizeChanged +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::SizeChanged() + { + if( iListBox ) + { + iListBox->SetRect( Rect() ); // Set container's rect to listbox + // Force refreshing of iListBox: + TRAP_IGNORE( iListBox->HandleItemAdditionL() ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::OfferKeyEventL +// ----------------------------------------------------------------------------- +// +TKeyResponse CProfileMainContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + if( aType != EEventKey ) + { + return EKeyWasNotConsumed; + } + + switch( aKeyEvent.iCode ) + { + case EKeyUpArrow: // flow through, both change focus + case EKeyDownArrow: + { + TKeyResponse response( iListBox->OfferKeyEventL( aKeyEvent, aType ) ); + iIndexHandler.SetCurrentProfileIndex( iListBox->CurrentItemIndex() ); + return response; + } + case EKeyBackspace: // Clear key + { + if( ( FeatureManager::FeatureSupported( KFeatureIdDynamicProfiles ) ) && + ( !iEngineHandler.Engine()->IsDefaultProfile( + iEngineHandler.IdForIndex( iIndexHandler.CurrentProfileIndex() ) ) ) ) + { + // If dynamic profiles feature is supported and none of + // the default profiles is focused, try to delete a profile. + iView.HandleCommandL( EProfileCmdDelete ); + return EKeyWasConsumed; + } + break; + } + default: + { + break; + } + } + return iListBox->OfferKeyEventL( aKeyEvent, aType ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::HandleListBoxEventL +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::HandleListBoxEventL( + CEikListBox* /* aListBox */, TListBoxEvent aEventType ) + { + if( ( aEventType == EEventEnterKeyPressed ) || + + ( aEventType == EEventItemSingleClicked ) ) + { + iIndexHandler.SetCurrentProfileIndex( iListBox->CurrentItemIndex() ); + iView.HandleCommandL( EProfileCmdContextSpecificOptionsMenu ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::GetHelpContext +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidProfileApp; + aContext.iContext = KMODE_HLP_PROFILES_LIST; + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::HandleResourceChange +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::HandleResourceChange( TInt aType ) + { + if ( aType == KEikDynamicLayoutVariantSwitch || + aType == KAknsMessageSkinChange ) + { + (static_cast (&iView))->UpdateClientRect(); + } + + CCoeControl::HandleResourceChange( aType ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainContainer::FocusChanged +// ----------------------------------------------------------------------------- +// +void CProfileMainContainer::FocusChanged( TDrawNow aDrawNow ) + { + if( iListBox ) + { + iListBox->SetFocus( IsFocused(), aDrawNow ); + } + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainContainer.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,162 @@ +/* +* Copyright (c) 2002 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: Container class of main view. +* +*/ + + + +#ifndef CPROFILEMAINCONTAINER_H +#define CPROFILEMAINCONTAINER_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CAknView; +class CAknSingleStyleListBox; +class CProfileEngineHandler; +class CProfileIndexHandler; + +// CONSTANTS +const TInt KMainContainerSubControlCount( 1 ); + +// CLASS DECLARATION +/** +* Container class of main view. +* +* @lib ProfileApp.app +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileMainContainer ) : public CCoeControl + , public MEikListBoxObserver + { + public: // Constructors and destructors + + /** + * Two-phased constructor. + * @param aEngineHandler Engine Handler. + * @param aIndexHandler Index Handler. + * @param aView Pointer to the main view class. + * @return Returns an instance of CProfileMainContainer. + */ + static CProfileMainContainer* NewL( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknView& aView ); + + /** + * Destructor. + */ + ~CProfileMainContainer(); + + public: // New functions + + /** + * Populates listbox with names of profiles. + * Separated to own method to enable updating listbox dynamically + * (i.e. supports profiles being added or deleted). + * @param aTopItemIndex If given, sets list boxes top item index. + */ + void PopulateListBoxL( TInt aTopItemIndex = KErrNotFound ); + + /** + * Returns the top item index of the listbox. + * Needed to set index back when returning from personalise state. + * @return Returns the top item index of the listbox. + */ + TInt TopItemIndex() const; + + private: // Functions from base classes + + /** + * From CoeControl + */ + TInt CountComponentControls() const; + + /** + * From CoeControl + */ + CCoeControl* ComponentControl( TInt aIndex ) const; + + /** + * From CoeControl + */ + void SizeChanged(); + + /** + * From CoeControl + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + + /** + * From CCoeControl + */ + void GetHelpContext( TCoeHelpContext& aContext ) const; + + /** + * From CCoeControl + */ + void HandleResourceChange(TInt aType); + + /** + * From CCoeControl + */ + void FocusChanged( TDrawNow aDrawNow ); + + /** + * From MEikListBoxObserver + */ + void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType ); + + private: + + /** + * C++ constructor. + * @param aEngineHandler Engine Handler. + * @param aIndexHandler Index Handler. + * @param aView Pointer to the main view class. + */ + CProfileMainContainer( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler, + CAknView& aView ); + + /** + * By default Symbian 2nd phase constructor is private. + * @param aRect Drawing area. + */ + void ConstructL( const TRect& aRect ); + + private: // Data + + // Engine handler + CProfileEngineHandler& iEngineHandler; + + // Index handler + CProfileIndexHandler& iIndexHandler; + + // The view class (to call HandleCommandL). + CAknView& iView; + + // Own: Listbox class. + CAknSingleStyleListBox* iListBox; + + }; + +#endif // CPROFILEMAINCONTAINER_H + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainView.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,717 @@ +/* +* Copyright (c) 2002 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: Main view class. +* +*/ + +// INCLUDE FILES +#include "CProfileMainView.h" + +#include +#include +#include +#include +#include + +#ifndef RD_STARTUP_CHANGE +#include +#include +#else +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CProfileMainContainer.h" +#include "CProfileDocument.h" +#include "ProfileApp.hrh" +#include "CProfileNaviPaneContainer.h" +#include "MProfilesLocalFeatures.h" +#include "ProfilesVariant.hrh" // KProEngFeatureIdTimedProfiles + + +// CONSTANTS +namespace + { + //const TInt KNumberOfVisibleProfilesInMainView( 6 ); + const TInt KOneMinuteInMicrosecond = 1000000 * 60; + const TInt KOneHourInMinute = 60; + } + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileMainView::CProfileMainView +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileMainView::CProfileMainView( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ) + : iEngineHandler( aEngineHandler ), + iIndexHandler( aIndexHandler ), + iTopItemIndex( KErrNotFound ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileMainView::ConstructL() + { + BaseConstructL( R_PROFILE_MAIN_VIEW ); + + CAknTitlePane* titlePane = static_cast< CAknTitlePane* >( + StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + HBufC* titleText = StringLoader::LoadLC( R_PROFILE_TEXT_TITLE ); + titlePane->SetText( titleText ); // takes ownership + CleanupStack::Pop( titleText ); + + iNotifier = CProfileChangeNotifyHandler::NewL( this ); + + iLocalFeatures = &( iEngineHandler.Engine()->LocalFeatures() ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileMainView* CProfileMainView::NewLC( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ) + { + CProfileMainView* self = + new( ELeave ) CProfileMainView( aEngineHandler, aIndexHandler ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// Destructor +CProfileMainView::~CProfileMainView() + { + delete iNotifier; + delete iNaviPaneContainer; + if( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DisplayConfirmationQueryL +// ----------------------------------------------------------------------------- +// +TBool CProfileMainView::DisplayConfirmationQueryL( TInt aResourceId ) const + { + CAknQueryDialog* dlg = CAknQueryDialog::NewL(); + return dlg->ExecuteLD( aResourceId ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoCmdActivateL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoCmdActivateL() + { + // ID of the currently focused profile + // (the profile that user would like to activate) + TInt currentProfileId( + iEngineHandler.IdForIndex( iIndexHandler.CurrentProfileIndex() ) ); + + // If Off-line profile is supported + if( ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) ) && + // and active profile is Off-line + ( iEngineHandler.Engine()->ActiveProfileId() == EProfileOffLineId ) && + // and currently focused profile is not Off-line + ( currentProfileId != EProfileOffLineId ) ) + { + // We are changing from Off-line to a normal profile. + // Check if SIM card exists or not +#ifndef RD_STARTUP_CHANGE + TInt simCStatus( EPSCSimRemoved ); +#else + TInt simCStatus( ESimNotPresent ); +#endif + + RProperty simStatus; +#ifndef RD_STARTUP_CHANGE + User::LeaveIfError( + simStatus.Attach( KUidSystemCategory, KPSUidSimCStatusValue ) ); + User::LeaveIfError( simStatus.Get( simCStatus ) ); +#else + User::LeaveIfError( + simStatus.Attach( KPSUidStartup, KPSSimStatus ) ); + User::LeaveIfError( simStatus.Get( simCStatus ) ); +#endif + simStatus.Close(); + +#ifndef RD_STARTUP_CHANGE + if( simCStatus == EPSCSimRemoved ) +#else + if( simCStatus == ESimNotPresent ) +#endif + { + // SIM card does not exist. + // Show an information note and exit from method. + HBufC* infoText = StringLoader::LoadLC( R_PROFILE_TEXT_INSERT_SIM ); + CAknInformationNote* note = + new( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *infoText ); + CleanupStack::PopAndDestroy( infoText ); + return; + } + } + iEngineHandler.Engine()->SetActiveProfileL( currentProfileId ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoCmdCreateNewL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoCmdCreateNewL() + { + MProfileExtended* profile = iEngineHandler.Engine()->CreateProfileL(); // CSI: 35 # profile object deleted before leaving function calls + if( profile ) + { + // Profile creation successful + TInt id( profile->ProfileName().Id() ); + profile->Release(); + iEngineHandler.ReadIdArrayL(); + // Focus the created profile: + iIndexHandler.SetCurrentProfileIndex( + iEngineHandler.IdArray()->FindById( id ) ); + AppUi()->HandleCommandL( EProfileCmdPersonalise ); + } + else + { + // Maximum number of user created profiles reached, show error note + HBufC* errorText = StringLoader::LoadLC( + R_PROFILE_TEXT_ERROR_MAXIMUM ); + CAknErrorNote* note = new( ELeave ) CAknErrorNote( ETrue ); + note->ExecuteLD( *errorText ); + CleanupStack::PopAndDestroy( errorText ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoCmdDeleteL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoCmdDeleteL() + { + // Ask user if he/she wants to delete profile + if( !DisplayConfirmationQueryL( R_PROFILE_DELETE_CONFIRMATION_QUERY ) ) + { + // User didn't want to delete the profile, return + return; + } + + TInt currentProfileIndex( iIndexHandler.CurrentProfileIndex() ); + + // Try deleting the focused profile + TInt errorCode( iEngineHandler.Engine()->DeleteProfileL( + iEngineHandler.IdForIndex( currentProfileIndex ) ) ); + + if( errorCode == KErrNone ) + { + iEngineHandler.ReadIdArrayL(); + TInt lastIndex = iEngineHandler.IdArray()->MdcaCount() - 1; + if( currentProfileIndex > lastIndex ) + { + // The last profile in the list was deleted. change focus. + iIndexHandler.SetCurrentProfileIndex( lastIndex ); + } + iContainer->PopulateListBoxL(); + } + else + { + // Show error note if cannot delete profile + HBufC* errorText = StringLoader::LoadLC( + R_PROFILE_TEXT_DELETE_ERROR ); + CAknErrorNote* note = new( ELeave ) CAknErrorNote( ETrue ); + note->ExecuteLD( *errorText ); + CleanupStack::PopAndDestroy( errorText ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoCmdContextSpecificOptionsMenuL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoCmdContextSpecificOptionsMenuL() + { + // Switch to Context specific options menu, + // show it and switch back to main view options menu. + CEikMenuBar* menuBar = MenuBar(); + menuBar->SetMenuType( CEikMenuBar::EMenuContext ); + menuBar->SetMenuTitleResourceId( + R_PROFILE_MAIN_VIEW_CONTEXT_SPECIFIC_OPTIONS_MENUBAR ); + + // TRAP displaying of menu bar. + // If it fails, the correct resource is set back before leave. + TRAPD( error, menuBar->TryDisplayContextMenuBarL() ); + + menuBar->SetMenuType( CEikMenuBar::EMenuOptions ); + menuBar->SetMenuTitleResourceId( R_PROFILE_MAIN_VIEW_OPTIONS_MENUBAR ); + User::LeaveIfError( error ); + + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DisplayTimedNote +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DisplayTimedInfoNoteL( TInt aMinutes, TInt aHours ) const + { + TInt resourceId = R_PROFILE_CONF_SINGULAR; + TBool minutesSingular( EFalse ); + TBool hoursSingular( EFalse ); + + if( aMinutes == 1) + { + minutesSingular = ETrue; + } + if( aHours == 1 ) + { + hoursSingular = ETrue; + } + + if( ( !minutesSingular ) && ( hoursSingular ) ) + { + resourceId = R_PROFILE_CONF_HOUR_SEV_MIN; + } + else if( ( minutesSingular ) && ( !hoursSingular ) ) + { + resourceId = R_PROFILE_CONF_SEV_HOURS_MIN; + } + else if( ( !minutesSingular ) && ( !hoursSingular ) ) + { + resourceId = R_PROFILE_CONF_PLURAL; + } + + CArrayFix* array = new( ELeave ) CArrayFixFlat(1); + CleanupStack::PushL( array ); + + array->AppendL( aHours ); + array->AppendL( aMinutes ); + + HBufC* expiryText = StringLoader::LoadLC( + resourceId, *array ); + + CAknInformationNote* note = new( ELeave ) CAknInformationNote( EFalse ); + + note->ExecuteLD( *expiryText ); + + // expiryText + CleanupStack::PopAndDestroy( expiryText ); + + // array + CleanupStack::PopAndDestroy( array ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DisplayTimedQueryNote +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DisplayTimedQueryNoteL( TInt aMinutes, TInt aHours ) const + { + TInt resourceId = R_PROFILE_CONF_SINGULAR; + TBool minutesSingular( EFalse ); + TBool hoursSingular( EFalse ); + + if( aMinutes == 1) + { + minutesSingular = ETrue; + } + if( aHours == 1 ) + { + hoursSingular = ETrue; + } + + if( ( !minutesSingular ) && ( hoursSingular ) ) + { + resourceId = R_PROFILE_CONF_HOUR_SEV_MIN; + } + else if( ( minutesSingular ) && ( !hoursSingular ) ) + { + resourceId = R_PROFILE_CONF_SEV_HOURS_MIN; + } + else if( ( !minutesSingular ) && ( !hoursSingular ) ) + { + resourceId = R_PROFILE_CONF_PLURAL; + } + + CArrayFix* array = new( ELeave ) CArrayFixFlat(1); + CleanupStack::PushL( array ); + + array->AppendL( aHours ); + array->AppendL( aMinutes ); + + HBufC* expiryText = StringLoader::LoadLC( + resourceId, *array ); + + CAknQueryDialog* query = CAknQueryDialog::NewL(); + const TInt ret( + query->ExecuteLD( R_PROFILE_CONFIRM_TIMED_QUERY, *expiryText ) ); + + // expiryText + CleanupStack::PopAndDestroy( expiryText ); + + // array + CleanupStack::PopAndDestroy( array ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoCmdTimedL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoCmdTimedL() + { + // ID of the currently focused profile + // (the profile that user would like to activate) + TInt currentProfileId( + iEngineHandler.IdForIndex( iIndexHandler.CurrentProfileIndex() ) ); + + // If Off-line profile is supported + if( ( FeatureManager::FeatureSupported( KFeatureIdOfflineMode ) ) && + // and active profile is Off-line + ( iEngineHandler.Engine()->ActiveProfileId() == EProfileOffLineId ) && + // and currently focused profile is not Off-line + ( currentProfileId != EProfileOffLineId ) ) + { + // We are changing from Off-line to a normal profile. + // Check if SIM card exists or not +#ifndef RD_STARTUP_CHANGE + TInt simCStatus( EPSCSimRemoved ); +#else + TInt simCStatus( ESimNotPresent ); +#endif + + RProperty simStatus; +#ifndef RD_STARTUP_CHANGE + User::LeaveIfError( + simStatus.Attach( KUidSystemCategory, KPSUidSimCStatusValue ) ); + User::LeaveIfError( simStatus.Get( simCStatus ) ); +#else + User::LeaveIfError( + simStatus.Attach( KPSUidStartup, KPSSimStatus ) ); + User::LeaveIfError( simStatus.Get( simCStatus ) ); +#endif + simStatus.Close(); + +#ifndef RD_STARTUP_CHANGE + if( simCStatus == EPSCSimRemoved ) +#else + if( simCStatus == ESimNotPresent ) +#endif + { + // SIM card does not exist. + // Show an information note and exit from method. + HBufC* infoText = StringLoader::LoadLC( R_PROFILE_TEXT_INSERT_SIM ); + CAknInformationNote* note = + new( ELeave ) CAknInformationNote( ETrue ); + note->ExecuteLD( *infoText ); + CleanupStack::PopAndDestroy( infoText ); + return; + } + } + + TTime expireTime; + expireTime.HomeTime(); + + HBufC* expiryTime = + StringLoader::LoadLC( R_PROFILE_SETTING_EXPIRY_TIME ); + + CAknTimeQueryDialog* dlg = new(ELeave) CAknTimeQueryDialog( expireTime ); + if (dlg->ExecuteLD(R_PROFILE_TIME_QUERY, *expiryTime )) + { + // Timing currently active profile is not allowed. This can happen + // if active profile is changed after the timing process begins. + // Exception: re-timing a timed profile. + MProfileEngine* profileEngine = CreateProfileEngineL(); + CleanupReleasePushL( *profileEngine ); + TBool isActiveProfileTimed = profileEngine->IsActiveProfileTimedL(); + CleanupStack::PopAndDestroy( profileEngine ); + + if( currentProfileId == iEngineHandler.Engine()->ActiveProfileId() + && !isActiveProfileTimed ) + { + HBufC* errorText = StringLoader::LoadLC( + R_PROFILE_ERROR_TIMING_ACTIVE_PROFILE ); + CAknErrorNote* note = new( ELeave ) CAknErrorNote( ETrue ); + note->ExecuteLD( *errorText ); + CleanupStack::PopAndDestroy( errorText ); + return; + } + + TTime originalTime; + originalTime.HomeTime(); + + TDateTime expiredtime = expireTime.DateTime(); + TDateTime originaltdtime = originalTime.DateTime(); + expiredtime.SetDay(originaltdtime.Day()); + expiredtime.SetMonth(originaltdtime.Month()); + expiredtime.SetYear(originaltdtime.Year()); + expireTime = expiredtime; + + if( expireTime < originalTime ) + { + expireTime += TTimeIntervalDays(1); + } + + TTimeIntervalMicroSeconds remainTime( + expireTime.MicroSecondsFrom( originalTime ) ); + TInt64 tmp = ( remainTime.Int64() ) / KOneMinuteInMicrosecond; + TInt minutes = I64INT(tmp); + TInt hours(minutes / KOneHourInMinute); + minutes -= hours * KOneHourInMinute; + + DisplayTimedQueryNoteL( minutes, hours ); + + MProfileEngineExtended* engine = iEngineHandler.Engine(); + engine->SetActiveProfileTimedL( currentProfileId, expireTime ); + } + CleanupStack::PopAndDestroy( expiryTime ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::Id +// ----------------------------------------------------------------------------- +// +TUid CProfileMainView::Id() const + { + return KProfileAppMainViewId; + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::HandleCommandL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EProfileCmdActivate: + { + DoCmdActivateL(); + break; + } + case EProfileCmdCreateNew: + { + DoCmdCreateNewL(); + break; + } + case EProfileCmdDelete: + { + DoCmdDeleteL(); + break; + } + case EProfileCmdContextSpecificOptionsMenu: + case EAknSoftkeyContextOptions: + { + DoCmdContextSpecificOptionsMenuL(); + break; + } + case EProfileCmdTimed: + { + DoCmdTimedL(); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoActivateL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoActivateL( + const TVwsViewId& /* aPrevViewId */, + TUid aCustomMessageId, + const TDesC8& /* aCustomMessage */ ) + { + if( !iContainer ) + { + iContainer = CProfileMainContainer::NewL( + iEngineHandler, iIndexHandler, *this ); + iContainer->PopulateListBoxL( iTopItemIndex ); + iNaviPaneContainer = + CProfileNaviPaneContainer::NewL( *StatusPane(), iEngineHandler ); + // Set the name of the active profile to navi pane + iNaviPaneContainer->SetNaviPaneTextL(); + AppUi()->AddToViewStackL( *this, iContainer ); + iContainer->MakeVisible( ETrue ); + } + + if( aCustomMessageId == KProfileAppMainViewId ) + { + DoCmdCreateNewL(); + } + + CEikMenuBar* menuBar = MenuBar(); + menuBar->SetContextMenuTitleResourceId( + R_PROFILE_MAIN_VIEW_CONTEXT_SPECIFIC_OPTIONS_MENUBAR ); + + + if ( iEikonEnv->StartedAsServerApp() ) + { + UpdateCbaL(R_PROFILE_MAIN_VIEW_CBA_2); + } + + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DoDeactivate +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DoDeactivate() + { + delete iNaviPaneContainer; + iNaviPaneContainer = NULL; + if( iContainer ) + { + iTopItemIndex = iContainer->TopItemIndex(); + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::DynInitMenuPaneL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane ) + { + if( !iContainer || + ( (aResourceId != R_PROFILE_MAIN_VIEW_OPTIONS_MENUPANE) && + (aResourceId != R_PROFILE_MAIN_VIEW_CONTEXT_SPECIFIC_OPTIONS_MENUPANE) + ) ) + { + return; + } + + // ID of the currently focused profile + TInt currentProfileId( + iEngineHandler.IdForIndex( iIndexHandler.CurrentProfileIndex() ) ); + TInt activeProfileId( iEngineHandler.Engine()->ActiveProfileId() ); + + // "Timed" item is in both menus: + if( aResourceId == R_PROFILE_MAIN_VIEW_CONTEXT_SPECIFIC_OPTIONS_MENUPANE && (( !iLocalFeatures->IsFeatureSupported( KProEngFeatureIdTimedProfiles ) ) + || ( currentProfileId == EProfileOffLineId ) || + ( ( activeProfileId == currentProfileId ) && + !iEngineHandler.Engine()->IsActiveProfileTimedL() ) )) + { + // Timed profiles is not supported. Hide Timed option from + // Options menu + aMenuPane->SetItemDimmed( EProfileCmdTimed, ETrue ); + } + if(aResourceId == R_PROFILE_MAIN_VIEW_CONTEXT_SPECIFIC_OPTIONS_MENUPANE && ( FeatureManager::FeatureSupported(KFeatureIdDynamicProfiles) ) && + iEngineHandler.Engine()->IsDefaultProfile( currentProfileId ) ) + { + // A default profile is focused. Hide Delete from Options menu + aMenuPane->SetItemDimmed( EProfileCmdDelete, ETrue ); + } + + if( aResourceId == R_PROFILE_MAIN_VIEW_OPTIONS_MENUPANE ) + { + if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + // Help is not supported. Hide Help from Options menu + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + // Check that dynamic profiles are supported + // before trying to hide Delete from Options menu. + /* if( ( FeatureManager::FeatureSupported(KFeatureIdDynamicProfiles) ) && + iEngineHandler.Engine()->IsDefaultProfile( currentProfileId ) ) + { + // A default profile is focused. Hide Delete from Options menu + aMenuPane->SetItemDimmed( EProfileCmdDelete, ETrue ); + }*/ + } + + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::HandleActiveProfileEventL +// ----------------------------------------------------------------------------- +// +void CProfileMainView::HandleActiveProfileEventL( + TProfileEvent /* aProfileEvent */, TInt /* aProfileId */ ) + { + if( iNaviPaneContainer ) + { + // Active profile has changed. Change active profile name in navi pane. + iNaviPaneContainer->SetNaviPaneTextL(); + } + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::UpdateClientRect +// ----------------------------------------------------------------------------- +// +void CProfileMainView::UpdateClientRect() + { + iContainer->SetRect( ClientRect() ); + } + +// ----------------------------------------------------------------------------- +// CProfileMainView::View +// ----------------------------------------------------------------------------- +// +CAknView& CProfileMainView::View() + { + return *this; + } + + +// ----------------------------------------------------------------------------- +// CProfileMainView::UpdateCbaL +// +// ----------------------------------------------------------------------------- +// +void CProfileMainView::UpdateCbaL(TInt aResourceId) + { + CEikButtonGroupContainer* cba = Cba(); + cba->SetCommandSetL(aResourceId); + cba->DrawDeferred(); + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileMainView.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,213 @@ +/* +* Copyright (c) 2002 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: Main view class. +* +*/ + + + +#ifndef CPROFILEMAINVIEW_H +#define CPROFILEMAINVIEW_H + +// INCLUDES +#include +#include "MProfileChangeObserver.h" +#include "MProfileViewHandler.h" + +// CONSTANTS +const TUid KProfileAppMainViewId = { 1 }; // UID of view + +// FORWARD DECLARATIONS +class CProfileEngineHandler; +class CProfileIndexHandler; +class CProfileMainContainer; +class CProfileChangeNotifyHandler; +class CProfileNaviPaneContainer; +class MProfilesLocalFeatures; + +// CLASS DECLARATION +/** +* Main view class. +* Derived from MProfileChangeObserver to get an event when active profile is +* changed (needed for updating the navi pane). +* +* @lib ProfileApp.app +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileMainView ) : public CAknView, + public MProfileChangeObserver, + public MProfileViewHandler + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aEngineHandler Engine Handler. + * @param aIndexHandler Index Handler. + * @return Returns an instance of CProfileMainView. + */ + static CProfileMainView* NewLC( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ); + + /** + * Destructor. + */ + ~CProfileMainView(); + + public: // Functions from base classes + + /** + * From CAknView + */ + TUid Id() const; + + /** + * From CAknView + */ + void HandleCommandL( TInt aCommand ); + + /** + * From MProfileViewHandler + */ + void UpdateClientRect(); + + /** + * From MProfileViewHandler + */ + CAknView& View(); + + private: // New functions + + /** + * Launches a CAknQueryDialog. + * @param aResourceId Resource id to DIALOG resource. + * @return Returns ETrue if user accepted the query. + */ + TBool DisplayConfirmationQueryL( TInt aResourceId ) const; + + /** + * HandleCommandL switch separated to own method. + */ + void DoCmdActivateL(); + + /** + * HandleCommandL switch separated to own method. + */ + void DoCmdCreateNewL(); + + /** + * HandleCommandL switch separated to own method. + */ + void DoCmdDeleteL(); + + /** + * HandleCommandL switch separated to own method. + */ + void DoCmdContextSpecificOptionsMenuL(); + + /** + * HandleCommandL switch separated to own method. + */ + void DoCmdTimedL(); + + /** + * Displays information note containing time left + * until the profile expires + */ + void DisplayTimedInfoNoteL( TInt aMinutes, TInt aHours ) const; + /** + * Displays confirmation note containing time left + * until the profile expires + */ + void DisplayTimedQueryNoteL( TInt aMinutes, TInt aHours ) const; + + /** + * Update cba. + */ + void UpdateCbaL(TInt aResourceId); + + + private: // Functions from base classes. + + /** + * From CAknView + */ + void DoActivateL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * From CAknView + */ + void DoDeactivate(); + + /** + * From CAknView + */ + void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + /** + * From MProfileChangeObserver + */ + void HandleActiveProfileEventL( + TProfileEvent aProfileEvent, TInt aProfileId ); + + private: + + /** + * C++ constructor. + * @param aEngineHandler Engine Handler. + * @param aIndexHandler Index Handler. + */ + CProfileMainView( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // Engine handler + CProfileEngineHandler& iEngineHandler; + + // Index handler + CProfileIndexHandler& iIndexHandler; + + // Top item index of the listbox. + TInt iTopItemIndex; + + // Own: Main Container. + CProfileMainContainer* iContainer; + + // Own: Profile change notify handler. + CProfileChangeNotifyHandler* iNotifier; + + // Own: Navi pane container. + CProfileNaviPaneContainer* iNaviPaneContainer; + + // Not own: locally variated features of Profiles: + MProfilesLocalFeatures* iLocalFeatures; + + }; + + +#endif // CPROFILEMAINVIEW_H + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileSettingsView.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileSettingsView.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,375 @@ +/* +* Copyright (c) 2002 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: Settings view class. +* +*/ + + +// INCLUDE FILES +#include "CProfileSettingsView.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ProfilePanics.h" +#include "CProfileSettingsContainer.h" +#include "ProfileApp.hrh" + + + +/****************************************************************************** + * class CProfileTopControl + ******************************************************************************/ + + +// ----------------------------------------------------------------------------- +// CProfileTopControl::NewL() +// +// ----------------------------------------------------------------------------- +// +CProfileTopControl* CProfileTopControl::NewL( CCoeControl* aFocusControl ) + { + CProfileTopControl* self = new ( ELeave ) CProfileTopControl(); + self->iFocusControl = aFocusControl; + return self; + } + + +// ----------------------------------------------------------------------------- +// CProfileTopControl::FocusChanged() +// +// ----------------------------------------------------------------------------- +// +void CProfileTopControl::FocusChanged( TDrawNow aDrawNow ) + { + // Not calling super::FocusChanged is intentional + if( iFocusControl ) + { + iFocusControl->SetFocus( IsFocused(), aDrawNow ); + } + } + + +/****************************************************************************** + * class CProfileDummyHandler + ******************************************************************************/ + + +// ----------------------------------------------------------------------------- +// CProfileDummyHandler::CProfileDummyHandler() +// +// ----------------------------------------------------------------------------- +// +CProfileDummyHandler::CProfileDummyHandler() + { + } + + +// ----------------------------------------------------------------------------- +// CProfileDummyHandler::~CProfileDummyHandler() +// +// ----------------------------------------------------------------------------- +// +CProfileDummyHandler::~CProfileDummyHandler() + { + } + + +// ----------------------------------------------------------------------------- +// CProfileDummyHandler::CreateSettingItemL() +// +// This should never be called in Profiles App. +// ----------------------------------------------------------------------------- +// +CAknSettingItem* CProfileDummyHandler::CreateSettingItemL( TInt /* aIdentifier */ ) + { + User::Panic( KProfilePanicText, EProfilePanicInvalidSettingItemId ); + return NULL; // to make compiler happy + } + + +// ----------------------------------------------------------------------------- +// CProfileDummyHandler::SetObserver() +// +// ----------------------------------------------------------------------------- +// +void CProfileDummyHandler::SetObserver(MProfileExternalSettingsObserver& /* aObserver */ ) + { + } + + +// ----------------------------------------------------------------------------- +// CProfileDummyHandler::AllowedToChange() +// +// ----------------------------------------------------------------------------- +// +TBool CProfileDummyHandler::AllowedToChange( TInt /* aSettingItemId */ ) const + { + return EFalse; + } + + + +/****************************************************************************** + * class CProfileSettingsView + ******************************************************************************/ + + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::CProfileSettingsView +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfileSettingsView::CProfileSettingsView( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ) + : iEngineHandler( aEngineHandler ), + iIndexHandler( aIndexHandler ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +void CProfileSettingsView::ConstructL() + { + BaseConstructL( R_PROFILE_SETTINGS_VIEW ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileSettingsView* CProfileSettingsView::NewLC( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler ) + { + CProfileSettingsView* self = new( ELeave ) CProfileSettingsView( + aEngineHandler, aIndexHandler ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// Destructor. +CProfileSettingsView::~CProfileSettingsView() + { + if( iTopControl ) + { + AppUi()->RemoveFromStack( iTopControl ); + } + if( iTabHandler ) + { + AppUi()->RemoveFromStack( iTabHandler->TabGroup() ); + } + if( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + } + delete iContainer; + delete iTabHandler; + delete iTopControl; + delete iDummyHandler; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::Id +// ----------------------------------------------------------------------------- +// +TUid CProfileSettingsView::Id() const + { + return KProfileAppSettingViewId; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::HandleCommandL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsView::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EAknSoftkeyBack: + { + if( iContainer && iContainer->ItemEdited() ) + { + break; + } + AppUi()->HandleCommandL( aCommand ); + break; + } + case EAknSoftkeyChange: // From context specific options menu + case EProfileCmdChange: + { + if( !iContainer ) + { + break; + } + iContainer->EditItemL( + iContainer->SettingItemArray()->ItemIndexFromVisibleIndex( + iContainer->ListBox()->CurrentItemIndex() ), + ( aCommand == EProfileCmdChange ) ); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::DoActivateL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsView::DoActivateL( + const TVwsViewId& /* aPrevViewId */, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ) + { + if ( !iContainer ) + { + // If aCustomMessageId is the same as CProfileSettingsView id, + // the caller is external. Check if profile id is given and open it. + if( aCustomMessageId == KProfileAppSettingViewId ) + { + TLex8 lex( aCustomMessage ); + TInt value = 0; + lex.Val( value ); + TInt err = KErrNone; + MProfilesNamesArray* profileNamesArray = iEngineHandler.Engine()->ProfilesNamesArrayLC(); + TInt index = profileNamesArray->FindById(value); + CleanupStack::PopAndDestroy(); + TRAP( err, iIndexHandler.SetCurrentProfileIndex( index ) ); + + CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current(); + CleanupStack::PushL( cba ); + cba->SetCommandSetL( R_PROFILE_SETTINGS_VIEW_CBA_IDLE ); + CleanupStack::Pop( cba ); + cba->DrawDeferred(); + } + + // Get pointer to navi pane + CAknNavigationControlContainer* naviPane = + static_cast( + StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); + // Get pointer to title pane + CAknTitlePane* titlePane = static_cast< CAknTitlePane* >( + StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + //iTabHandler = CProfileTabHandler::NewL( + // iEngineHandler, iIndexHandler, *naviPane ); + + iDummyHandler = new ( ELeave ) CProfileDummyHandler(); + iContainer = CProfileSettingsContainer::NewL( + *this, iEngineHandler, *iDummyHandler, &iIndexHandler, + iTabHandler, titlePane ); + + iTopControl = CProfileTopControl::NewL( iContainer ); + + AppUi()->AddToViewStackL( *this, iContainer ); + // Tab group must be added to stack last. + //AppUi()->AddToStackL( *this, iTabHandler->TabGroup() ); + // Top control is always on top as it listens to focus changes (which + // will be routed to container to adapt highlight animation to focus) + AppUi()->AddToStackL( *this, iTopControl ); + + iContainer->MakeVisible( ETrue ); + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::DoDeactivate +// ----------------------------------------------------------------------------- +// +void CProfileSettingsView::DoDeactivate() + { + if( iTopControl ) + { + AppUi()->RemoveFromStack( iTopControl ); + delete iTopControl; + iTopControl = NULL; + } + if( iTabHandler ) + { + AppUi()->RemoveFromStack( iTabHandler->TabGroup() ); + delete iTabHandler; + iTabHandler = NULL; + } + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + delete iDummyHandler; + iDummyHandler = NULL; + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::DynInitMenuPaneL +// ----------------------------------------------------------------------------- +// +void CProfileSettingsView::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane ) + { + if( ( iContainer ) && + ( aResourceId == R_PROFILE_SETTINGS_VIEW_OPTIONS_MENUPANE ) ) + { + // Check if the setting item is allowed to be changed + // If not, hide "Change" from Options menu + CAknSettingItemArray* array = iContainer->SettingItemArray(); + if( !iContainer->AllowedToChange( + array->At( array->ItemIndexFromVisibleIndex( + iContainer->ListBox()->CurrentItemIndex() ) )->Identifier() ) ) + { + aMenuPane->SetItemDimmed( EProfileCmdChange, ETrue ); + } + if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) // Help + { + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::UpdateClientRect +// ----------------------------------------------------------------------------- +// +void CProfileSettingsView::UpdateClientRect() + { + iContainer->SetRect( ClientRect() ); + } + +// ----------------------------------------------------------------------------- +// CProfileSettingsView::View +// ----------------------------------------------------------------------------- +// +CAknView& CProfileSettingsView::View() + { + return *this; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/CProfileSettingsView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/CProfileSettingsView.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2002 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: Settings view class. +* +*/ + + + +#ifndef CPROFILESETTINGSVIEW_H +#define CPROFILESETTINGSVIEW_H + +// INCLUDES +#include +#include "MProfileViewHandler.h" + +#include "MProfileExternalSettingsHandler.h" + + + +// CONSTANTS +const TUid KProfileAppSettingViewId = { 2 }; // UID of view + +// FORWARD DECLARATIONS +class CProfileEngineHandler; +class CProfileIndexHandler; +class CProfileSettingsContainer; +class CProfileTabHandler; +class CProfileTopControl; +class CProfileDummyHandler; + + +// CLASS DECLARATION + + +/** +* This interceptor control sits on top of the component stack. Its only purpose +* is to route focus events to CProfileSettingsContaier. Key events are not +* handled at all, they just fall through this component. +*/ +NONSHARABLE_CLASS( CProfileTopControl ) : public CCoeControl + { + public: + static CProfileTopControl* NewL( CCoeControl* aFocusControl ); + void FocusChanged( TDrawNow aDrawNow ); // Overrides CCoeControl::FocusChanged + + private: + CCoeControl* iFocusControl; + }; + + +// This class is a dummy implementation for external settings interface needed +// by CProfileSettingsContainer. +NONSHARABLE_CLASS( CProfileDummyHandler ) : public CBase, + public MProfileExternalSettingsHandler + { + public: + CProfileDummyHandler(); + virtual ~CProfileDummyHandler(); + + public: + // This should never be called in Profiles App + CAknSettingItem* CreateSettingItemL( TInt aIdentifier ); + void SetObserver(MProfileExternalSettingsObserver& aObserver ); + TBool AllowedToChange( TInt aSettingItemId ) const; + }; + + +/** +* Settings view class. +* @lib ProfileApp.app +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfileSettingsView ) : public CAknView, + public MProfileViewHandler + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aEngineHandler Engine Handler. + * @param aIndexHandler Index Handler. + * @return Returns an instance of CProfileSettingsView. + */ + static CProfileSettingsView* NewLC( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler); + + /** + * Destructor. + */ + ~CProfileSettingsView(); + + public: // Functions from base classes + + /** + * From CAknView + */ + TUid Id() const; + + /** + * From CAknView + */ + void HandleCommandL( TInt aCommand ); + + /** + * From CAknView + */ + void DoActivateL( + const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * From CAknView + */ + void DoDeactivate(); + + /** + * From CAknView + */ + void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + /** + * From MProfileViewHandler + */ + void UpdateClientRect(); + + /** + * From MProfileViewHandler + */ + CAknView& View(); + + private: // Constructors and destructors + + /** + * C++ constructor. + * @param aEngineHandler Engine Handler. + * @param aIndexHandler Index Handler. + */ + CProfileSettingsView( + CProfileEngineHandler& aEngineHandler, + CProfileIndexHandler& aIndexHandler); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // Data + + // Engine handler + CProfileEngineHandler& iEngineHandler; + + // Index handler + CProfileIndexHandler& iIndexHandler; + + // Own: Settings container. + CProfileSettingsContainer* iContainer; + + // Own: Tab handler. + CProfileTabHandler* iTabHandler; + + // Own: Control to route focus event to settings container + CProfileTopControl* iTopControl; + + // Own: Dummy external settings handler for settings container + CProfileDummyHandler* iDummyHandler; + }; + +#endif // CPROFILESETTINGSVIEW_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/MProfileRectUpdater.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/MProfileRectUpdater.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2002 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: Interface for getting client rect area. +* +*/ + + + +#ifndef MPROFILERECTUPDATER_H +#define MPROFILERECTUPDATER_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Interface for updating the active area. +* +* @lib ProfileApp.app +* @since 2.8 +*/ +class MProfileRectUpdater + { + + public: // New functions + + /** + * Updates the client drawing area. + * @since 2.8 + */ + virtual void UpdateClientRect() = 0; + + }; + +#endif // MProfileRectUpdater_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/ProfileApp.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/ProfileApp.hrh Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,38 @@ +/* +* Copyright (c) 2002 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: Resource headers of Profiles application. +* +*/ + + + +#ifndef PROFILEAPP_HRH +#define PROFILEAPP_HRH + +// DATA TYPES +enum TProfileMenuCommandIds + { + EProfileCmdActivate = 0x6000, + EProfileCmdPersonalise, + EProfileCmdCreateNew, + EProfileCmdDelete, + EProfileCmdContextSpecificOptionsMenu, + EProfileCmdChange, + EProfileCmdTimed + }; + +#endif // PROFILEAPP_HRH + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/UIsrc/ProfileApp.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/UIsrc/ProfileApp.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,477 @@ +/* +* Copyright (c) 2002 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: Profiles Application resources +* +*/ + + + +// RESOURCE IDENTIFIER +NAME PROF + +// INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ProfileApp.hrh" +#include + +// RESOURCE DEFINITIONS + +RESOURCE RSS_SIGNATURE {} + +RESOURCE TBUF { buf = ""; } + +RESOURCE EIK_APP_INFO {} + +RESOURCE LOCALISABLE_APP_INFO r_profile_localisable_app_info + { + short_caption = qtn_apps_mode_grid; + caption_and_icon = + CAPTION_AND_ICON_INFO + { + caption = qtn_apps_mode_list; + +#ifdef __SCALABLE_ICONS + + number_of_icons = 1; + icon_file = APP_BITMAP_DIR"\\ProfileApp_aif.mif"; + +#else + + number_of_icons = 2; + icon_file = APP_BITMAP_DIR"\\ProfileApp_aif.mbm"; + +#endif // __SCALABLE_ICONS + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_VIEW r_profile_main_view + { + menubar = r_profile_main_view_options_menubar; + cba = r_profile_main_view_cba; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_settings_view +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_VIEW r_profile_settings_view + { + menubar = r_profile_settings_view_options_menubar; + cba = r_profile_settings_view_cba; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view_options_menubar +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_profile_main_view_options_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_profile_main_view_options_menupane; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view_context_specific_options_menubar +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_profile_main_view_context_specific_options_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_profile_main_view_context_specific_options_menupane; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_settings_view_options_menubar +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_BAR r_profile_settings_view_options_menubar + { + titles = + { + MENU_TITLE { menu_pane = r_profile_settings_view_options_menupane; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view_cba +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_profile_main_view_cba + { + flags = 0; + buttons = + { + CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, + CBA_BUTTON {id=EAknSoftkeyExit; txt=text_softkey_exit;}, + CBA_BUTTON {id=EAknSoftkeyContextOptions; txt=text_softkey_option;} + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view_cba_2 +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_profile_main_view_cba_2 + { + flags = 0; + buttons = + { + CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, + CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, + CBA_BUTTON {id=EAknSoftkeyContextOptions; txt=text_softkey_option;} + }; + } + + +// ----------------------------------------------------------------------------- +// +// r_profile_settings_view_cba +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_profile_settings_view_cba + { + flags = 0; + buttons = + { + CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, + CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, + CBA_BUTTON {id=EAknSoftkeyChange; txt=qtn_msk_change;} + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_settings_view_cba_idle +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE CBA r_profile_settings_view_cba_idle + { + flags = 0; + buttons = + { + CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, + CBA_BUTTON {id=EAknSoftkeyExit; txt=text_softkey_exit;}, + CBA_BUTTON {id=EAknSoftkeyChange; txt=qtn_msk_change;} + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view_options_menupane +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_profile_main_view_options_menupane + { + items = + { + // MENU_ITEM { command = EProfileCmdActivate; txt = qtn_mode_activate; }, + //MENU_ITEM { command = EProfileCmdPersonalise; txt = qtn_mode_personalise; }, + //MENU_ITEM { command = EProfileCmdTimed; txt = qtn_profiles_options_timed; }, +#ifdef __DYNAMIC_PROFILES + MENU_ITEM { command = EProfileCmdCreateNew; txt = qtn_profiles_options_create_new; }, + // MENU_ITEM { command = EProfileCmdDelete; txt = qtn_profiles_options_delete; }, +#endif // __DYNAMIC_PROFILES + MENU_ITEM { command = EAknCmdHelp; txt = qtn_options_help; }, + //MENU_ITEM { command = EEikCmdExit; txt = qtn_options_exit; } + MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_main_view_context_specific_options_menupane +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_profile_main_view_context_specific_options_menupane + { + items = + { + MENU_ITEM { command = EProfileCmdActivate; txt = qtn_mode_activate; }, + MENU_ITEM { command = EProfileCmdPersonalise; txt = qtn_mode_personalise; }, + MENU_ITEM { command = EProfileCmdDelete; txt = qtn_profiles_options_delete; }, + MENU_ITEM { command = EProfileCmdTimed; txt = qtn_profiles_options_timed; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_settings_view_options_menupane +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE MENU_PANE r_profile_settings_view_options_menupane + { + items = + { + //MENU_ITEM { command = EProfileCmdChange; txt = qtn_mode_change; }, + MENU_ITEM { command = EAknCmdHelp; txt = qtn_options_help; }, + //MENU_ITEM { command = EEikCmdExit; txt = qtn_options_exit; } + MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_leave_offline_confirmation_query +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_profile_leave_offline_confirmation_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationQueryLayout; + label = qtn_leave_offline_mode_query; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_delete_confirmation_query +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_profile_delete_confirmation_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_YES_NO; + items= + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationQueryLayout; + label = qtn_profiles_conf_delete; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_title +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_title { buf = qtn_mode_profiles; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_insert_sim +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_insert_sim { buf = qtn_su_note_insert_sim; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_error_maximum +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_error_maximum { buf = qtn_profiles_error_maximum; } + +// ----------------------------------------------------------------------------- +// +// r_profile_text_delete_error +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_text_delete_error { buf = qtn_profiles_delete_error; } + +// --------------------------------------------------------- +// +// r_profile_time_query +// ?description +// +// --------------------------------------------------------- +// +RESOURCE DIALOG r_profile_time_query + { + flags=EGeneralQueryFlags; + buttons=R_AVKON_SOFTKEYS_OK_CANCEL; + items= + { + DLG_LINE + { + type=EAknCtQuery; + id=EGeneralQuery; + control = AVKON_DATA_QUERY + { + layout = ETimeLayout; + label = text_popupfield_prompt_for_time; + control = TIME_EDITOR + { + minTime= TIME {second=0;minute=0;hour=0;}; + maxTime= TIME {second=59;minute=59;hour=23;}; + flags=EEikTimeWithoutSecondsField; + }; + }; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_setting_expiry_time +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_setting_expiry_time { buf = qtn_profiles_setting_expiry_time; } + +// ----------------------------------------------------------------------------- +// +// r_profile_conf_singular +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_conf_singular { buf = qtn_profiles_conf_singular; } + +// ----------------------------------------------------------------------------- +// +// r_profile_conf_plural +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_conf_plural { buf = qtn_profiles_conf_plural; } + +// ----------------------------------------------------------------------------- +// +// r_profile_conf_hour_sev_min +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_conf_hour_sev_min { buf = qtn_profiles_conf_hour_sev_min; } + +// ----------------------------------------------------------------------------- +// +// r_profile_conf_sev_hours_min +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_conf_sev_hours_min { buf = qtn_profiles_conf_sev_hours_min; } + +// ----------------------------------------------------------------------------- +// +// r_profile_error_timing_active_profile +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_profile_error_timing_active_profile { buf = qtn_profiles_error_timing_active_profile; } + +// ----------------------------------------------------------------------------- +// +// r_profile_confirm_timed_query +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE DIALOG r_profile_confirm_timed_query + { + flags = EGeneralQueryFlags; + buttons = R_AVKON_SOFTKEYS_OK_EMPTY; + items = + { + DLG_LINE + { + type = EAknCtQuery; + id = EGeneralQuery; + control = AVKON_CONFIRMATION_QUERY + { + layout = EConfirmationQueryLayout; + label = ""; + bmpfile = AVKON_BITMAP_FILE; + bmpid = EMbmAvkonQgn_note_info; + bmpmask = EMbmAvkonQgn_note_info_mask; + }; + } + }; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/ProfileApp.lnt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/ProfileApp.lnt Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,33 @@ +/** Unused Enum scan +-e???? +e749 +*/ + +/** Unused header scan +-e???? +e766 +*/ + +/** standard lint check +*/ +-w1 -e322 + +/** define unicode +-D_UNICODE +*/ + +/** Standard include directories */ + +-i..\aif +-i..\doc +-i..\group +-i..\help +-i..\uisrc +-i..\settingsviewinc +-i..\settingsviewsrc +-i..\..\ProfileEngine\EngInc +-i\epoc32\include +-i\epoc32\include\oem + +/** Examined application source directories */ +..\uisrc\*.cpp +..\settingsviewsrc\*.cpp + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/ProfileApp.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/ProfileApp.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,71 @@ +/* +* Copyright (c) 2002 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: Project definition file for Profiles application +* +*/ + + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include +#include + +TARGET profileapp.exe +EPOCSTACKSIZE 0x5000 +EPOCHEAPSIZE 0x20000 0x400000 // Min 128kb, max 4Mb +TARGETTYPE exe + +UID 0x100039CE 0x100058F8 +CAPABILITY CAP_APPLICATION +VENDORID VID_DEFAULT + +SOURCEPATH ../UIsrc + +SOURCE CProfileApplication_SEC_APPARC.cpp +SOURCE CProfileAppUi.cpp +SOURCE CProfileDocument.cpp +SOURCE CProfileMainView.cpp +SOURCE CProfileMainContainer.cpp +SOURCE CProfileSettingsView.cpp + +SYSTEMINCLUDE ../SettingsViewInc ../SettingsViewSrc + +START RESOURCE ProfileApp.rss +HEADER +TARGETPATH APP_RESOURCE_DIR +LANGUAGE_IDS +END // RESOURCE + +SOURCEPATH . +START RESOURCE ProfileApp_reg.rss +DEPENDS profileapp.rsg + // Do not change the UID + TARGETPATH /private/10003a3f/apps +END // RESOURCE + +USERINCLUDE . ../UIsrc +SYSTEMINCLUDE ../../../inc + +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib bafl.lib +LIBRARY apparc.lib cone.lib eikcore.lib eikcoctl.lib avkon.lib eikctl.lib +LIBRARY featmgr.lib // Feature Manager +LIBRARY profileeng.lib // Profile Engine +LIBRARY hlplch.lib // Help +LIBRARY profilesettingsview.lib // Profiles application settings view +LIBRARY commonengine.lib // StringLoader + + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/ProfileAppExports.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/ProfileAppExports.inc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,30 @@ +/* +* ============================================================================== +* Name : ProfileAppExports.inc +* Part of : ProfileApp +* Interface : ?Interface_category, ?Interface_name +* Description : ?Description +* Version : ?Version +* +* Copyright (c) 2007 Nokia Corporation. +* This material, including documentation and any related +* computer programs, is protected by copyright controlled by +* Nokia Corporation. All rights are reserved. Copying, +* including reproducing, storing, adapting or translating, any +* or all of this material requires the prior written consent of +* Nokia Corporation. This material also contains confidential +* information which may not be disclosed to others without the +* prior written consent of Nokia Corporation. +* ============================================================================== +*/ +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +#ifndef PROFILEAPPEXPORTS_INC +#define PROFILEAPPEXPORTS_INC + +../loc/ProfileApp.loc APP_LAYER_LOC_EXPORT_PATH(profileapp.loc) + +#endif // PROFILEAPPEXPORTS_INC + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/ProfileApp_reg.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/ProfileApp_reg.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2004 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: This file contains the application registration resource. +* +*/ + + +#include +#include +#include + +UID2 KUidAppRegistrationResourceFile +UID3 0x100058F8 + +RESOURCE APP_REGISTRATION_INFO + { + app_file = "ProfileApp"; + localisable_resource_file = APP_RESOURCE_DIR"\\ProfileApp"; + localisable_resource_id = R_PROFILE_LOCALISABLE_APP_INFO; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/ProfileSettingsView.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/ProfileSettingsView.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,98 @@ +/* +* Copyright (c) 2002 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: Project definition file for Profile Settings View +* +*/ + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include +#include + +TARGET profilesettingsview.dll +TARGETTYPE dll +UID 0x1000008d 0x100058F8 + +CAPABILITY CAP_GENERAL_DLL +VENDORID VID_DEFAULT + +SOURCEPATH ../SettingsViewSrc +SOURCE CProfileEngineHandler.cpp +SOURCE CProfileIndexHandler.cpp +SOURCE CProfileTabHandler.cpp +SOURCE CProfileSettingsContainer.cpp +SOURCE CProfile3dSettingItem.cpp +SOURCE CProfile3dSettingPage.cpp +SOURCE CProfilePlayingVolumeSettingItem.cpp +SOURCE CProfilePlayingVolumeSettingPage.cpp +SOURCE CProfileKeypadVolumeSettingPage.cpp +SOURCE CProfileNameSettingItem.cpp +SOURCE CProfileKeypadVolumeSettingItem.cpp +SOURCE CProfileNameSettingPage.cpp +SOURCE CProfileFileListSettingItem.cpp +SOURCE CProfileAlertForSettingItem.cpp +SOURCE CProfileAlertForSettingPage.cpp +SOURCE CProfileStruct.cpp +SOURCE CProfileToneHandler.cpp +SOURCE ProfileMmfInfoUtility.cpp + +SOURCE CProfileStructDrmFull.cpp +SOURCE CProfileToneHandlerDrmFull.cpp +LIBRARY drmhelper.lib +SOURCE CProfileNaviPaneContainer.cpp +SOURCE CProfileFeedbackSettingItem.cpp +SOURCE CProfileFeedbackSettingPage.cpp +SOURCE CProfileVibraSettingItem.cpp +SOURCE CProfileVibraSettingPage.cpp + +START RESOURCE ProfileSettingsView.rss + HEADER + TARGETPATH RESOURCE_FILES_DIR + LANGUAGE_IDS +END + +USERINCLUDE ../SettingsViewInc ../../Group ../UIsrc +SYSTEMINCLUDE ../../../inc + +APP_LAYER_SYSTEMINCLUDE + +LIBRARY euser.lib efsrv.lib +LIBRARY eikcore.lib eikcoctl.lib cone.lib avkon.lib apgrfx.lib +LIBRARY bafl.lib // BaflUtils +LIBRARY apmime.lib // TDataType +LIBRARY cntmodel.lib // Contact database +LIBRARY pbkeng.lib // Phone Book contact engine +LIBRARY commonengine.lib // Shared data +LIBRARY featdiscovery.lib // CFeatureDiscovery +LIBRARY featmgr.lib // Feature Manager +LIBRARY sssettings.lib // Phone settings (Alternate Line Service) +LIBRARY mediaclientaudio.lib // MultiMedia Framework, audio client +LIBRARY profileeng.lib // Profile Engine +LIBRARY filelist.lib // File List +LIBRARY mediafilelist.lib //Media File List +LIBRARY ecom.lib +LIBRARY centralrepository.lib +LIBRARY cenrepnotifhandler.lib +LIBRARY mmfcontrollerframework.lib // CMMFFormatSelectionParameters + +LIBRARY drmcommon.lib +LIBRARY drmrights.lib + +#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM +LIBRARY drmutility.lib +#endif + +LIBRARY caf.lib cafutils.lib // Content access framework + +DEBUGLIBRARY flogger.lib +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/ProjLint.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/ProjLint.bat Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,17 @@ +rem +rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +rem All rights reserved. +rem This component and the accompanying materials are made available +rem under the terms of "Eclipse Public License v1.0" +rem which accompanies this distribution, and is available +rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +rem +rem Initial Contributors: +rem Nokia Corporation - initial contribution. +rem +rem Contributors: +rem +rem Description: batch files +rem + +c:\tools\LINT-NT.EXE +v -ic:\tools\PCLint\APPS\LINT\ std.lnt -os(_lint.tmp) ProfileApp.lnt \ No newline at end of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,45 @@ +/* +* Copyright (c) 2002 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: This file provides the information required for building ProfilesApp +* +*/ + +// To get the APP_LAYER_LOC_EXPORT_PATH-definition +#include + +PRJ_PLATFORMS + DEFAULT + +PRJ_EXPORTS +#include "ProfileAppExports.inc" + +PRJ_EXTENSIONS +START EXTENSION s60/mifconv + OPTION TARGETFILE profileapp_aif.mif + OPTION SOURCES -c8,8 qgn_menu_mode +END + + +PRJ_MMPFILES +/* +#ifdef __SCALABLE_ICONS + gnumakefile icons_aif_scalable_dc.mk +#else + gnumakefile icons_aif_bitmaps_dc.mk +#endif // __SCALABLE_ICONS +*/ +ProfileSettingsView.mmp +ProfileApp.mmp + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/icons_aif_bitmaps_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/icons_aif_bitmaps_dc.mk Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,68 @@ +# +# Copyright (c) 2003 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: Icons makefile for project ProfileApp. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z +else +ZDIR=\epoc32\data\z +endif + +# ---------------------------------------------------------------------------- +# : Configure these +# ---------------------------------------------------------------------------- + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\profileapp_aif.mbm + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# : Configure these. +# +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c8,8 qgn_menu_mode_lst.bmp \ + /c8,8 qgn_menu_mode_cxt.bmp + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/group/icons_aif_scalable_dc.mk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/group/icons_aif_scalable_dc.mk Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,67 @@ +# +# Copyright (c) 2003 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: Icons makefile for project ProfileApp. +# + +ifeq (WINS,$(findstring WINS, $(PLATFORM))) +ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z +else +ZDIR=\epoc32\data\z +endif + +# ---------------------------------------------------------------------------- +# : Configure these +# ---------------------------------------------------------------------------- + +TARGETDIR=$(ZDIR)\resource\apps +ICONTARGETFILENAME=$(TARGETDIR)\profileapp_aif.mif + +do_nothing : + @rem do_nothing + +MAKMAKE : do_nothing + +BLD : do_nothing + +CLEAN : do_nothing + +LIB : do_nothing + +CLEANLIB : do_nothing + +# ---------------------------------------------------------------------------- +# : Configure these. +# +# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by +# MifConv if the mask detph is defined. +# +# NOTE 2: Usually, source paths should not be included in the bitmap +# definitions. MifConv searches for the icons in all icon directories in a +# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps. +# The directory \s60\icons is included in the search only if the feature flag +# __SCALABLE_ICONS is defined. +# ---------------------------------------------------------------------------- + +RESOURCE : + mifconv $(ICONTARGETFILENAME) \ + /c8,8 qgn_menu_mode.svg + +FREEZE : do_nothing + +SAVESPACE : do_nothing + +RELEASABLES : + @echo $(ICONTARGETFILENAME) + +FINAL : do_nothing diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/loc/ProfileApp.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/loc/ProfileApp.loc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,471 @@ +/* +* Copyright (c) 2002 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: Profiles application localisation strings. +* +*/ + + + +// LOCALISATION STRINGS + +//d: Application title (app grid view) +//l: cell_app_pane_t1 +#define qtn_apps_mode_grid "Profiles" + +//d: Application title (app list view) +//l: list_single_large_graphic_pane_t1 +#define qtn_apps_mode_list "Profiles" + +//d: Profile Title Pane text (in Profile Main dialog) +//l: title_pane_t2/opt9 +#define qtn_mode_profiles "Profiles" + +//d: Profile settings list item for ringing tone selection +//l: list_setting_pane_t1 +#define qtn_mode_ringing_tone "Ringing tone" + +//d: Profile settings list item for line 1 ringing tone selection +//l: list_setting_pane_t1 +#define qtn_mode_line1_tone "Line 1 ringing tone" + +//d: Profile settings list item for line 2 ringing tone selection +//l: list_setting_pane_t1 +#define qtn_mode_line2_tone "Line 2 ringing tone" + +//d: Profile settings list item for Video telephone tone selection +//d: Added to 2.common wk 30. +//l: list_setting_pane_t1 +#define qtn_mode_vt_tone "Video Call tone" + +// d:Error note shown when a tone can't be set +// d:because tone maximum file size is exceeded. +// l:popup_note_window +// r:3.1 +#define qtn_profiles_tone_maxsize_error "Unable to use tone. File size exceeds %N kB." + +//d: Profile settings list item for ringing type +//l: list_setting_pane_t1 +#define qtn_mode_ringing_type_2 "Ringing type" + +//d: Profile settings list item for ringing volume +//l: list_setting_pane_t1 +#define qtn_mode_ringing_volume "Ringing volume" + +//d: Profile settings list item for Media volume +//l: list_setting_pane_t1 +#define qtn_profiles_media_volume "Media volume" + +//d: Profile settings list item for message alert tone +//l: list_setting_pane_t1 +#define qtn_mode_message_tone "Message alert tone" + +//d: Profile settings list item for vibrating alert +//l: list_setting_pane_t1 +#define qtn_mode_vibrating_alert "Vibrating alert" + +//d: Profile settings list item for email vibrating alert +//l: list_setting_pane_t1 +#define qtn_profiles_email_vibra "Email Vibrating alert" + +//d: Profile settings list item for keypad tones +//l: list_setting_pane_t1 +#define qtn_mode_keypad_volume "Keypad tones" + +//d: Profile settings list item for warning and game tones +//l: list_setting_pane_t1 +#define qtn_mode_warning_game "Warning and game tones" + +//d: Profile settings list item alert for setting +//l: list_setting_pane_t1 +#define qtn_mode_alert_for "Alert for" + +//d: Profile settings list item for profile name +//l: list_setting_pane_t1 +#define qtn_mode_sett_profile_name "Profile name" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_ringing "Ringing" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_ascending "Ascending" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_ring_once "Ring once" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_beep_once "Beep once" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_silent "Silent" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:2.8 +#define qtn_mode_warning_game_on "On" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:2.8 +#define qtn_mode_warning_game_off "Off" + +// LOC STRINGS FOR KEYPAD VOLUME + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.0 +#define qtn_tc_keypad_off "Off" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_keypad_quiet "Level 1" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_keypad_medium "Level 2" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_keypad_loud "Level 3" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_all_callers "All callers" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +#define qtn_tc_several_groups "Several groups" + +//d: Message alert tone "None" +//l: list_single_graphic_pane_t1_cp2 +#define qtn_tc_none "None" + +//d: Profile Name Existing Notification Message +//l: popup_note_window +#define qtn_mode_rename_error "A profile with that name already exists" + +//d: Max Volume Level Notification Message +//l: popup_note_window +#define qtn_tc_ringing_level_warning "Select maximum volume for ringing tone?" + +//d: Options Menu +//l: list_single_pane_t1_cp2 +#define qtn_mode_change "Change" + +//d: Options Menu +//l: list_single_pane_t1_cp2 +#define qtn_mode_activate "Activate" + +//d: Options Menu +//l: list_single_pane_t1_cp2 +#define qtn_mode_personalise "Personalise" + +//d: File list dialog header +//l: heading_pane_t1 +#define qtn_tc_popup_heading "Select tone: " + +// LOC STRINGS FOR DYNAMIC PROFILES + +//d: Options menu item for creating a new profile +//l: list_single_pane_t1_cp2 +#define qtn_profiles_options_create_new "Create new profile" + +//d: Options menu item for deleting a user created profile +//l: list_single_pane_t1_cp2 +#define qtn_profiles_options_delete "Delete a profile" + +//d: Error note when user tries to delete currently active (selected) profile. +//l: popup_note_window +#define qtn_profiles_delete_error "Profile in use, cannot delete" + +//d: Error note when user has created maximum number of user created profiles +//d: and tries to create one more. +//l: popup_note_window +#define qtn_profiles_error_maximum "Maximum number of profiles exceeded" + +//d: Confirmation query for deleting a user created profile +//l: popup_note_window +#define qtn_profiles_conf_delete "Delete profile?" + +// LOC STRINGS FOR TIMED PROFILE + +//d: Options menu item for timed profile feature +//l: list_single_pane_t1_cp2 +#define qtn_profiles_options_timed "Timed" + +//d: A query window where user enters the time when the profile expires +//l: popup_query_data_window +#define qtn_profiles_setting_expiry_time "Profile expires" + +//d: Information note which shows how much time is left until profile expires +//d: 1 hour, 1 minute +//l: popup_note_window +#define qtn_profiles_conf_singular "Time left until profile expires:\n%0N hour and %1N minute" + +//d: Information note which shows how much time is left until profile expires +//d: N hours, N minutes +//l: popup_note_window +#define qtn_profiles_conf_plural "Time left until profile expires:\n%0N hours and %1N minutes" + +//d: Information note which shows how much time is left until profile expires +//d: 1 hour, N minutes +//l: popup_note_window +#define qtn_profiles_conf_hour_sev_min "Time left until profile expires:\n%0N hour and %1N minutes" + +//d: Information note which shows how much time is left until profile expires +//d: N hours, 1 minute +//l: popup_note_window +#define qtn_profiles_conf_sev_hours_min "Time left until profile expires:\n%0N hours and %1N minute" + +//d: Error note shown if active profile is being timed +//l: popup_note_window +//w: +//r:3.2 +#define qtn_profiles_error_timing_active_profile "Timing currently active profile is not allowed." + + +// LOC STRING FOR E-MAIL ALERT TONE + +//d: Profile settings list item for e-mail alert tone +//l: list_setting_pane_t1 +#define qtn_profiles_e_mail_tone "E-Mail alert tone" + +// LOC STRINGS FOR TTS RINGINGTONE + +//d: Profile Settings list item for Text-to-Speech ringingtone +//l: list_setting_pane_t1 +//w: +//r:3.0 +#define qtn_mode_tts_ringing_tone "Say caller’s name" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//w: +//r:3.0 +#define qtn_mode_tts_ringing_tone_on "On" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//w: +//r:3.0 +#define qtn_mode_tts_ringing_tone_off "Off" + +// LOC STRINGS FOR VIBRA SETTING + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.0 +#define qtn_mode_vibrating_alert_on "On" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.0 +#define qtn_mode_vibrating_alert_off "Off" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.0 +#define qtn_mode_email_vibra_on "On" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.0 +#define qtn_mode_email_vibra_off "Off" + +// LOC STRINGS FOR POC SETTING + +//d: Profile settings list item for PTT ringing tone selection +//l: list_setting_pane_t1 +//w: +//r:3.1 +#define qtn_poc_profile_ringing_tone "PTT ringing tone" + +//d: Profile settings list item for PTT status +//l: list_setting_pane_t1 +//w: +//r:3.1 +#define qtn_poc_profile_status "PTT status" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//w: +//r:3.1 +#define qtn_poc_profile_status_active "Active" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//w: +//r:3.1 +#define qtn_poc_profile_status_silent "Silent" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//w: +//r:3.1 +#define qtn_poc_profile_status_dnd "Do not Disturb" + +// LOC STRINGS FOR AUDIO FILE EXISTENCE CHECK + +//d: Tone file not found Confirmation Note text +//d: %U name of the file +//l: popup_note_window +//r:3.1 +#define qtn_profiles_confirm_ringtone_found "%U file cannot be found. Default tone is used instead." + +// LOC STRINGS FOR 3D RINGINGTONE + +//d: Profile settings list item for 3d effect +//l: list_setting_pane_t1 +//r:5.0 +#define qtn_profiles_tone_3d_effect "Ringing 3-D effect" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_off "Off" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_circle "Circle" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_flyby "Flyby" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_zig_zag "Zig-Zag" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_random_walk "Random walk" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_chaos "Chaos" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_effect_stereo_widening "Stereo widening" + +//d: Profile settings list item for 3d echo +//l: list_setting_pane_t1 +//r:5.0 +#define qtn_profiles_tone_3d_echo "Ringing 3-D echo" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_off "Off" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_living_room "Living room" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_cave "Cave" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_stone_corridor "Stone Corridor" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_forest "Forest" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_sewer_pipe "Sewer pipe" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_profiles_3d_echo_underwater "Underwater" + +// LOC STRINGS FOR AUDIO AND TACTILE FEEDBACK + +//d: Profile settings list item for tactile feedback +//l: list_setting_pane_t1 +//r:5.0 +#define qtn_mode_tactile_feedback "Tactile feedback" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_tactile_feedback_off "Off" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_tactile_feedback_level1 "Level 1" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_tactile_feedback_level2 "Level 2" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_tactile_feedback_level3 "Level 3" + +//d: Profile settings list item for tactile feedback +//l: list_setting_pane_t1 +//r:5.0 +#define qtn_mode_audio_feedback "Audio feedback" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_audio_feedback_off "Off" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_audio_feedback_level1 "Level 1" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_audio_feedback_level2 "Level 2" + +//d: Profile Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:5.0 +#define qtn_mode_audio_feedback_level3 "Level 3" + +// Power save mode + +// d:Error note shown when editing is blocked because of power save mode +// l:popup_note_window +// r:5.0 +#define qtn_power_saving_protected_settings_infonote "Power saving is active. Unable to edit." + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/Bmarm/ProfileStifU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/Bmarm/ProfileStifU.DEF Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,3 @@ +EXPORTS + LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &) + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/Bwins/ProfileStifU.DEF --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/Bwins/ProfileStifU.DEF Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,3 @@ +EXPORTS + ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &) + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/EABI/ProfileStifU.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/EABI/ProfileStifU.def Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,3 @@ +EXPORTS + _Z9LibEntryLR13CTestModuleIf @ 1 NONAME + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/conf/tcProfile.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/conf/tcProfile.cfg Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,29 @@ +[Test] +title Test NewL +run testscripter c:\testframework\ui_Profile.cfg 1 +[Endtest] + +[Test] +title Test NewLC +run testscripter c:\testframework\ui_Profile.cfg 2 +[Endtest] + +[Test] +title Test SetActiveProfileRingingTone +run testscripter c:\testframework\ui_Profile.cfg 3 +[Endtest] + +[Test] +title Test SetProfileTone +run testscripter c:\testframework\ui_Profile.cfg 4 +[Endtest] + +[Test] +title Test SetToneForAllProfiles +run testscripter c:\testframework\ui_Profile.cfg 5 +[Endtest] + +[Test] +title Test SetProfileToneNotCheckL +run testscripter c:\testframework\ui_Profile.cfg 6 +[Endtest] diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/conf/ui_Profile.cfg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/conf/ui_Profile.cfg Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,42 @@ +[Test] +title Test NewL +create ProfileStif foobar +foobar NewLTestL +delete foobar +[Endtest] + +[Test] +title Test NewLC +create ProfileStif foobar +foobar NewLCTestL +delete foobar +[Endtest] + +[Test] +title Test SetActiveProfileRingingTone +create ProfileStif foobar +foobar SetActiveProfileRingingToneTestL +delete foobar +[Endtest] + +[Test] +title Test SetProfileTone +create ProfileStif foobar +foobar SetProfileToneTestL +delete foobar +[Endtest] + +[Test] +title Test SetToneForAllProfiles +create ProfileStif foobar +foobar SetToneForAllProfilesTestL +delete foobar +[Endtest] + +[Test] +title Test SetProfileToneNotCheckL +create ProfileStif foobar +foobar SetProfileToneNotCheckLTestL +delete foobar +[Endtest] + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/ProfileStif.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/ProfileStif.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,75 @@ +/*TYPE TESTCLASS*/ +/* +* 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: MMP file for STIF Test Framework's TestScripter +* testclass test module. +* +*/ + +#include + +TARGET ProfileStif.dll +TARGETTYPE dll +UID 0x1000008D 0x101FB3E3 + +CAPABILITY ALL -TCB +/* Remove comments and replace 0x00000000 with correct vendor id */ +// VENDORID 0x00000000 +/* Remove comments and replace 0x00000000 with correct secure id */ +// SECUREID 0x00000000 + +//TARGETPATH ?target_path +DEFFILE ProfileStif.def + +USERINCLUDE ../inc + +APP_LAYER_SYSTEMINCLUDE + +SOURCEPATH ../src + +SOURCE ProfileStif.cpp +SOURCE ProfileStifBlocks.cpp + + +LIBRARY euser.lib +LIBRARY stiftestinterface.lib +LIBRARY stiftestengine.lib +LIBRARY ProfileSettingsView.lib // The tested library +LIBRARY avkon.lib eikcore.lib cone.lib eikcoctl.lib + +LANG SC + +/* +START WINS +?wins_specific_information +END + +START MARM +?marm_specific_information +END +*/ +// Other possible keywords: + +// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes) +/* +START BITMAP ?target +TARGETPATH ?emulated_path_on_target_machine +HEADER +SOURCE ?color_depth ?source_bitmap +END +*/ +// DEFFILE ?filename +// AIF ?filename + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/ProfileStif.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/ProfileStif.pkg Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,60 @@ +; +; 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: +; +; Installation file for STIF +; + +; Languages +&EN + +; Provide value for uid +#{"STIF"},(0x00000000),1,1,0,TYPE=SA + +; Series60 product id for S60 3.0 +[0x101F7961], 0, 0, 0, {"Series60ProductID"} + +; Localised Vendor name +%{"Nokia"} + +; Unique Vendor name +:"Nokia" + +; Logo +; None + +; Package signature - Optional +; None + +; Start of Package body + +; Condition blocks +; None + +; Options list +; None + +; Install files +"\epoc32\release\armv5\udeb\ProfileStif.dll" - "!:\Sys\Bin\ProfileStif.dll" + +; Embedded SIS +; None + +; End of Package body + +; PKG dependencies +; None + +; PKG capabilities +; None diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/ProfileStif_DoxyFile.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/ProfileStif_DoxyFile.txt Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,239 @@ +# +# 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: +# +# + +# Doxyfile 1.4.1 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = ProfileStif +PROJECT_NUMBER = +OUTPUT_DIRECTORY = \ProfileStif\ +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = YES +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = NO +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = NO +EXTRACT_LOCAL_METHODS = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = NO +GENERATE_TESTLIST = NO +GENERATE_BUGLIST = NO +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_DIRECTORIES = YES +FILE_VERSION_FILTER = +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = \ProfileStif\ +FILE_PATTERNS = *.h \ + *.rh \ + *.hrh +RECURSIVE = YES +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = YES +REFERENCES_RELATION = YES +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = NO +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = NO +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = YES +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = YES +TOC_EXPAND = YES +DISABLE_INDEX = YES +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = YES +RTF_OUTPUT = Doc +COMPACT_RTF = YES +RTF_HYPERLINKS = YES +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = NONSHARABLE_CLASS +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/TestFramework.ini --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/TestFramework.ini Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,178 @@ +# +# This is STIFTestFramework initialization file +# Comment lines start with '#'-character. +# See STIF TestFramework users guide.doc for instructions + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set following test engine settings: +# - Set Test Reporting mode. TestReportMode's possible values are: +# + 'Summary': Summary of the tested test cases. +# + 'Environment': Hardware and software info. +# + 'TestCases': Test case report. +# + 'FullReport': Set of all above ones. +# + Example 'TestReportMode= Summary TestCases' +# +# - CreateTestReport setting controls report creation mode +# + YES, Test report will created. +# + NO, No Test report. +# +# - File path indicates the base path of the test report. +# - File name indicates the name of the test report. +# +# - File format indicates the type of the test report. +# + TXT, Test report file will be txt type, for example 'TestReport.txt'. +# + HTML, Test report will be html type, for example 'TestReport.html'. +# +# - File output indicates output source of the test report. +# + FILE, Test report logging to file. +# + RDEBUG, Test report logging to using rdebug. +# +# - File Creation Mode indicates test report overwriting if file exist. +# + OVERWRITE, Overwrites if the Test report file exist. +# + APPEND, Continue logging after the old Test report information if +# report exist. + +[Engine_Defaults] + +TestReportMode= FullReport # Possible values are: + # 'Summary', 'Environment', 'TestCases' or 'FullReport' + +CreateTestReport= YES # Possible values: YES or NO + +TestReportFilePath= C:\LOGS\TestFramework\ +TestReportFileName= TestReport + +TestReportFormat= TXT # Possible values: TXT or HTML +TestReportOutput= FILE # Possible values: FILE or RDEBUG +TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND +UITestingSupport= Yes +SeparateProcesses= YES +[End_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Module configurations start +# Modules are added between module tags +# tags. Module name is specified after ModuleName= tag, like +# ModuleName= XXXXXXXXX +# Modules might have initialisation file, specified as +# IniFile= YYYYYY +# Modules might have several configuration files, like +# TestCaseFile= NormalCases.txt +# TestCaseFile= SmokeCases.txt +# TestCaseFile= ManualCases.txt + +# (TestCaseFile is synonym for old term ConfigFile) + +# Following case specifies demo module settings. Demo module +# does not read any settings from file, so tags +# IniFile and TestCaseFile are not used. +# In the simplest case it is enough to specify only the +# name of the test module when adding new test module + +[New_Module] +ModuleName= testcombiner +TestCaseFile= c:\testframework\tcProfile.cfg +[End_Module] + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +#Load testmoduleXXX, optionally with initialization file and/or test case files +#[New_Module] +#ModuleName= testmodulexxx + +#TestModuleXXX used initialization file +#IniFile= init.txt + +#TestModuleXXX used configuration file(s) +#TestCaseFile= testcases1.cfg +#TestCaseFile= testcases2.cfg +#TestCaseFile= manualtestcases.cfg + +#[End_Module] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + + + +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- +# Set STIFTestFramework logging overwrite parameters for Logger. +# Hardware and emulator environment logging path and styles can +# be configured from here to overwrite the Logger's implemented values. +# +# Settings description: +# - Indicates option for creation log directory/directories. If log directory/directories +# is/are not created by user they will make by software. +# + YES, Create log directory/directories if not allready exist. +# + NO, Log directory/directories not created. Only created one is used. +# +# - Overwrite emulator path setting. +# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined +# Logger's path 'D:\\LOGS\\Module\\' with those definition the path +# will be 'C:\LOGS\TestFramework\LOGS\Module\' +# +# - Overwrite emulator's logging format. +# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'. +# + HTML, Log file(s) will be html type(s), for example 'Module.html'. +# +# - Overwrited emulator logging output source. +# + FILE, Logging to file(s). +# + RDEBUG, Logging to using rdebug(s). +# +# - Overwrite hardware path setting (Same description as above in emulator path). +# - Overwrite hardware's logging format(Same description as above in emulator format). +# - Overwrite hardware's logging output source(Same description as above in emulator output). +# +# - File Creation Mode indicates file overwriting if file exist. +# + OVERWRITE, Overwrites if file(s) exist. +# + APPEND, Continue logging after the old logging information if file(s) exist. +# +# - Will thread id include to the log filename. +# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'. +# + NO, No thread id to log file(s), Example filename 'Module.txt'. +# +# - Will time stamps include the to log file. +# + YES, Time stamp added to each line in log file(s). Time stamp is +# for example'12.Nov.2003 115958 LOGGING INFO' +# + NO, No time stamp(s). +# +# - Will line breaks include to the log file. +# + YES, Each logging event includes line break and next log event is in own line. +# + NO, No line break(s). +# +# - Will event ranking include to the log file. +# + YES, Event ranking number added to each line in log file(s). Ranking number +# depends on environment's tics, for example(includes time stamp also) +# '012 12.Nov.2003 115958 LOGGING INFO' +# + NO, No event ranking. +# + +[Logger_Defaults] + +#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#' + +#CreateLogDirectories= YES # Possible values: YES or NO + +#EmulatorBasePath= C:\LOGS\TestFramework\ +#EmulatorFormat= HTML # Possible values: TXT or HTML +#EmulatorOutput= FILE # Possible values: FILE or RDEBUG + +#HardwareBasePath= D:\LOGS\TestFramework\ +#HardwareFormat= HTML # Possible values: TXT or HTML +#HardwareOutput= FILE # Possible values: FILE or RDEBUG + +#FileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND + +#ThreadIdToLogFile= YES # Possible values: YES or NO +#WithTimeStamp= YES # Possible values: YES or NO +#WithLineBreak= YES # Possible values: YES or NO +#WithEventRanking= YES # Possible values: YES or NO + +[End_Logger_Defaults] +# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + +# End of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,65 @@ +/* +* 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: +* +*/ + +PRJ_PLATFORMS +// specify the platforms your component needs to be built for here +// defaults to WINS MARM so you can ignore this if you just build these + + DEFAULT + +PRJ_TESTEXPORTS +// NOTE: If using ARS requirements all export operations should be done under this. +// 'abld test export' + +PRJ_EXPORTS +// Specify the source file followed by its destination here +// copy will be used to copy the source file to its destination +// If there's no destination then the source file will be copied +// to the same name in \epoc32\include +// Example: +/* +\agnmodel\inc\AGMCOMON.H +*/ +profile_z.bat \epoc32\winscw\c\profile_z.bat +profile_c.bat \epoc32\winscw\c\profile_c.bat +testframework.ini \epoc32\winscw\c\testframework\TestFramework_profile.ini +..\conf\tcProfile.cfg \epoc32\winscw\c\testframework\tcProfile.cfg +..\conf\ui_Profile.cfg \epoc32\winscw\c\testframework\ui_Profile.cfg + +PRJ_TESTMMPFILES + + //ProfileStif_nrm.mmp + +PRJ_MMPFILES + + ProfileStif.mmp + +// Specify the .mmp files required for building the important component +// releasables. +// +// Specify "tidy" if the component you need to build doesn't need to be +// released. Specify "ignore" if the MMP file exists but should be +// ignored. +// Example: +/* +\agnmodel\group\agnmodel.mmp +#if defined(MARM) +\agnmodel\group\agsvexe.mmp +#endif +*/ + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/profile_c.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/profile_c.bat Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,23 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +copy C:\TestFramework\TestFramework_Profile.ini C:\TestFramework\TestFramework.ini +md e:\ProfileTest +md e:\ProfileTest\Results + +ATSINTERFACE.EXE -testmodule testcombiner -config C:\TestFramework\tcProfile.cfg +copy c:\Logs\TestFramework\TestReport.txt e:\ProfileTest\results\Profile.txt + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/profile_z.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/group/profile_z.bat Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,25 @@ +@rem +@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +@rem All rights reserved. +@rem This component and the accompanying materials are made available +@rem under the terms of "Eclipse Public License v1.0" +@rem which accompanies this distribution, and is available +@rem at the URL "http://www.eclipse.org/legal/epl-v10.html". +@rem +@rem Initial Contributors: +@rem Nokia Corporation - initial contribution. +@rem +@rem Contributors: +@rem +@rem Description: +@rem + +copy z:\TestFramework\TestFramework_Profile.ini C:\TestFramework\TestFramework.ini +md e:\ProfileTest +md e:\ProfileTest\Results + +ATSINTERFACE.EXE -testmodule testcombiner -config C:\TestFramework\tcProfile.cfg +copy c:\Logs\TestFramework\TestReport.txt e:\ProfileTest\results\Profile.txt + + + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/inc/ProfileStif.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/inc/ProfileStif.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,193 @@ +/* +* 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: STIF testclass declaration +* +*/ + +#ifndef PROFILESTIF_H +#define PROFILESTIF_H + +// INCLUDES +#include +#include +#include +#include + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def +#define TEST_CLASS_VERSION_MAJOR 0 +#define TEST_CLASS_VERSION_MINOR 0 +#define TEST_CLASS_VERSION_BUILD 0 + +// Logging path +_LIT( KProfileStifLogPath, "\\logs\\testframework\\ProfileStif\\" ); +// Log file +_LIT( KProfileStifLogFile, "ProfileStif.txt" ); +_LIT( KProfileStifLogFileWithTitle, "ProfileStif_[%S].txt" ); + +// FUNCTION PROTOTYPES +//?type ?function_name(?arg_list); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; +class CProfileStif; + +// DATA TYPES +//enum ?declaration +//typedef ?declaration +//extern ?data_type; + +// CLASS DECLARATION + +/** +* CProfileStif test class for STIF Test Framework TestScripter. +* ?other_description_lines +* +* @lib ?library +* @since ?Series60_version +*/ +NONSHARABLE_CLASS(CProfileStif) : public CScriptBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CProfileStif* NewL( CTestModuleIf& aTestModuleIf ); + + /** + * Destructor. + */ + virtual ~CProfileStif(); + + public: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + public: // Functions from base classes + + /** + * From CScriptBase Runs a script line. + * @since ?Series60_version + * @param aItem Script line containing method name and parameters + * @return Symbian OS error code + */ + virtual TInt RunMethodL( CStifItemParser& aItem ); + + protected: // New functions + + /** + * ?member_description. + * @since ?Series60_version + * @param ?arg1 ?description + * @return ?description + */ + //?type ?member_function( ?type ?arg1 ); + + protected: // Functions from base classes + + /** + * From ?base_class ?member_description + */ + //?type ?member_function(); + + private: + + /** + * C++ default constructor. + */ + CProfileStif( CTestModuleIf& aTestModuleIf ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + // Prohibit copy constructor if not deriving from CBase. + // ?classname( const ?classname& ); + // Prohibit assigment operator if not deriving from CBase. + // ?classname& operator=( const ?classname& ); + + /** + * Frees all resources allocated from test methods. + * @since ?Series60_version + */ + void Delete(); + + /** + * Test methods are listed below. + */ + + /** + * Example test method. + * @since ?Series60_version + * @param aItem Script line containing parameters. + * @return Symbian OS error code. + */ + virtual TInt NewLTestL( CStifItemParser& aItem ); + + virtual TInt NewLCTestL( CStifItemParser& aItem ); + + virtual TInt SetActiveProfileRingingToneTestL( CStifItemParser& aItem ); + + virtual TInt SetProfileToneTestL( CStifItemParser& aItem ); + + virtual TInt SetToneForAllProfilesTestL( CStifItemParser& aItem ); + + virtual TInt SetProfileToneNotCheckLTestL( CStifItemParser& aItem ); + /** + * Method used to log version of test class + */ + void SendTestClassVersion(); + + //ADD NEW METHOD DEC HERE + //[TestMethods] - Do not remove + + public: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + protected: // Data + // ?one_line_short_description_of_data + //?data_declaration; + + private: // Data + + // ?one_line_short_description_of_data + //?data_declaration; + + // Reserved pointer for future extension + //TAny* iReserved; + + public: // Friend classes + //?friend_class_declaration; + protected: // Friend classes + //?friend_class_declaration; + private: // Friend classes + //?friend_class_declaration; + + }; + +#endif // PROFILESTIF_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/src/ProfileStif.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/src/ProfileStif.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,199 @@ +/* +* 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: This file contains testclass implementation. +* +*/ + +// INCLUDE FILES +#include +#include "ProfileStif.h" +#include + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileStif::CProfileStif +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CProfileStif::CProfileStif( + CTestModuleIf& aTestModuleIf ): + CScriptBase( aTestModuleIf ) + { + } + +// ----------------------------------------------------------------------------- +// CProfileStif::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CProfileStif::ConstructL() + { + //Read logger settings to check whether test case name is to be + //appended to log file name. + RSettingServer settingServer; + TInt ret = settingServer.Connect(); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Struct to StifLogger settigs. + TLoggerSettings loggerSettings; + // Parse StifLogger defaults from STIF initialization file. + ret = settingServer.GetLoggerSettings(loggerSettings); + if(ret != KErrNone) + { + User::Leave(ret); + } + // Close Setting server session + settingServer.Close(); + + TFileName logFileName; + + if(loggerSettings.iAddTestCaseTitle) + { + TName title; + TestModuleIf().GetTestCaseTitleL(title); + logFileName.Format(KProfileStifLogFileWithTitle, &title); + } + else + { + logFileName.Copy(KProfileStifLogFile); + } + + iLog = CStifLogger::NewL( KProfileStifLogPath, + logFileName, + CStifLogger::ETxt, + CStifLogger::EFile, + EFalse ); + + SendTestClassVersion(); + } + +// ----------------------------------------------------------------------------- +// CProfileStif::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CProfileStif* CProfileStif::NewL( + CTestModuleIf& aTestModuleIf ) + { + CProfileStif* self = new (ELeave) CProfileStif( aTestModuleIf ); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + + return self; + + } + +// Destructor +CProfileStif::~CProfileStif() + { + + // Delete resources allocated from test methods + Delete(); + + // Delete logger + delete iLog; + + } + +//----------------------------------------------------------------------------- +// CProfileStif::SendTestClassVersion +// Method used to send version of test class +//----------------------------------------------------------------------------- +// +void CProfileStif::SendTestClassVersion() + { + TVersion moduleVersion; + moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR; + moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR; + moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD; + + TFileName moduleName; + moduleName = _L("ProfileStif.dll"); + + TBool newVersionOfMethod = ETrue; + TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod); + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + +// ----------------------------------------------------------------------------- +// LibEntryL is a polymorphic Dll entry point. +// Returns: CScriptBase: New CScriptBase derived object +// ----------------------------------------------------------------------------- +// +EXPORT_C CScriptBase* LibEntryL( + CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework + { + + return ( CScriptBase* ) CProfileStif::NewL( aTestModuleIf ); + + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/src/ProfileStifBlocks.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/ProfileStif/src/ProfileStifBlocks.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,201 @@ +/* +* 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: This file contains testclass implementation. +* +*/ + +// [INCLUDE FILES] - do not remove +#include +#include +#include +#include "ProfileStif.h" +#include + +// EXTERNAL DATA STRUCTURES +//extern ?external_data; + +// EXTERNAL FUNCTION PROTOTYPES +//extern ?external_function( ?arg_type,?arg_type ); + +// CONSTANTS +//const ?type ?constant_var = ?constant; + +// MACROS +//#define ?macro ?macro_def + +// LOCAL CONSTANTS AND MACROS +//const ?type ?constant_var = ?constant; +//#define ?macro_name ?macro_def + +// MODULE DATA STRUCTURES +//enum ?declaration +//typedef ?declaration + +// LOCAL FUNCTION PROTOTYPES +//?type ?function_name( ?arg_type, ?arg_type ); + +// FORWARD DECLARATIONS +//class ?FORWARD_CLASSNAME; + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// ?function_name ?description. +// ?description +// Returns: ?value_1: ?description +// ?value_n: ?description_line1 +// ?description_line2 +// ----------------------------------------------------------------------------- +// +/* +?type ?function_name( + ?arg_type arg, // ?description + ?arg_type arg) // ?description + { + + ?code // ?comment + + // ?comment + ?code + } +*/ + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfileStif::Delete +// Delete here all resources allocated and opened from test methods. +// Called from destructor. +// ----------------------------------------------------------------------------- +// +void CProfileStif::Delete() + { + + } + +// ----------------------------------------------------------------------------- +// CProfileStif::RunMethodL +// Run specified method. Contains also table of test mothods and their names. +// ----------------------------------------------------------------------------- +// +TInt CProfileStif::RunMethodL( + CStifItemParser& aItem ) + { + + static TStifFunctionInfo const KFunctions[] = + { + // Copy this line for every implemented function. + // First string is the function name used in TestScripter script file. + // Second is the actual implementation member function. + ENTRY( "NewLTestL", CProfileStif::NewLTestL ), + ENTRY( "NewLCTestL", CProfileStif::NewLCTestL ), + ENTRY( "SetActiveProfileRingingToneTestL", CProfileStif::SetActiveProfileRingingToneTestL ), + ENTRY( "SetProfileToneTestL", CProfileStif::SetProfileToneTestL ), + ENTRY( "SetToneForAllProfilesTestL", CProfileStif::SetToneForAllProfilesTestL ), + ENTRY( "SetProfileToneNotCheckLTestL", CProfileStif::SetProfileToneNotCheckLTestL ) + //ADD NEW ENTRY HERE + // [test cases entries] - Do not remove + + }; + + const TInt count = sizeof( KFunctions ) / + sizeof( TStifFunctionInfo ); + + return RunInternalL( KFunctions, count, aItem ); + + } + +// ----------------------------------------------------------------------------- +// CProfileStif::ExampleL +// Example test method function. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + + +TInt CProfileStif::NewLTestL( CStifItemParser& aItem ) + { + CProfileToneHandler* toneHandler = CProfileToneHandler::NewL(); + CleanupStack::PushL( toneHandler ); + CleanupStack::PopAndDestroy(); // toneHandler + return KErrNone; + } + +TInt CProfileStif::NewLCTestL( CStifItemParser& aItem ) + { + CProfileToneHandler* toneHandler = CProfileToneHandler::NewLC(); + CleanupStack::PopAndDestroy(); // toneHandler + return KErrNone; + } + +TInt CProfileStif::SetActiveProfileRingingToneTestL( CStifItemParser& aItem ) + { + TInt err = KErrNone; + CProfileToneHandler* toneHandler = CProfileToneHandler::NewL(); + CleanupStack::PushL( toneHandler ); + err = toneHandler->SetActiveProfileRingingToneL( KNullDesC ); + CleanupStack::PopAndDestroy(); // toneHandler + return err; + } + +TInt CProfileStif::SetProfileToneTestL( CStifItemParser& aItem ) + { + TInt err = KErrNone; + CProfileToneHandler* toneHandler = CProfileToneHandler::NewL(); + CleanupStack::PushL( toneHandler ); + err = toneHandler->SetProfileToneL( 0, EProfileRingingToneSetting, KNullDesC ); + CleanupStack::PopAndDestroy(); // toneHandler + return err; + } + +TInt CProfileStif::SetToneForAllProfilesTestL( CStifItemParser& aItem ) + { + TInt err = KErrNone; + CProfileToneHandler* toneHandler = CProfileToneHandler::NewL(); + CleanupStack::PushL( toneHandler ); + err = toneHandler->SetToneForAllProfilesL( EProfileRingingToneSetting, KNullDesC ); + CleanupStack::PopAndDestroy(); // toneHandler + return err; + } + +TInt CProfileStif::SetProfileToneNotCheckLTestL( CStifItemParser& aItem ) + { + TInt err = KErrNone; + CProfileToneHandler* toneHandler = CProfileToneHandler::NewL(); + CleanupStack::PushL( toneHandler ); + err = toneHandler->SetProfileToneNotCheckL(0, EProfileRingingToneSetting, KNullDesC ); + CleanupStack::PopAndDestroy(); // toneHandler + return err; + } + +// ----------------------------------------------------------------------------- +// CProfileStif::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +/* +TInt CProfileStif::?member_function( + CItemParser& aItem ) + { + + ?code + + } +*/ + +// ========================== OTHER EXPORTED FUNCTIONS ========================= +// None + +// [End of File] - Do not remove diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/bwins/T_ProfileSettingsViewu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/bwins/T_ProfileSettingsViewu.def Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,3 @@ +EXPORTS + ?CreateTestSuiteL@@YAPAVMEUnitTest@@XZ @ 1 NONAME ; class MEUnitTest * CreateTestSuiteL(void) + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/eabi/T_ProfileSettingsViewu.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/eabi/T_ProfileSettingsViewu.def Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,5 @@ +EXPORTS + _Z16CreateTestSuiteLv @ 1 NONAME + _ZTI21T_CProfileToneHandler @ 2 NONAME ; ## + _ZTV21T_CProfileToneHandler @ 3 NONAME ; ## + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/T_ProfileSettingsView.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/T_ProfileSettingsView.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,46 @@ +/* +* Copyright (c) 2002 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: Project definition file for Profile Settings View module tests +* +*/ + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include + +TARGET T_ProfileSettingsView.dll +TARGETTYPE dll +UID 0x1000af5a 0x0107FBC9 +TARGETPATH ../../../../wins/c/DigiaEUnit/Tests + +CAPABILITY ALL -TCB + +SOURCEPATH ../src +SOURCE DllMain.cpp +SOURCE T_CProfileToneHandler.cpp + +USERINCLUDE ../inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/Digia/EUnit + +LIBRARY euser.lib EUnit.lib +LIBRARY ProfileSettingsView.lib // The tested library +LIBRARY avkon.lib eikcore.lib cone.lib eikcoctl.lib +LIBRARY FeatMgr.lib // Feature Manager +LIBRARY commonengine.lib // RConeResourceLoader + +// Other possible keywords: +// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes) + +// End of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/T_ProfileSettingsView.pkg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/T_ProfileSettingsView.pkg Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,35 @@ +; +; 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: +; +; Languages +; none - English only by default +&EN + +; Installation header +; Only one component name as we only support English +; UID is the main app's UID + +#{"BrCtlApiTest"},(0x101FB3E7),1,0,0,TYPE=SA +(0x101F7961),0,0,0,{"Series60ProductID"} + +; Non-localised vendor name +:"Nokia Corporation" + +; Localised vendor names +%{"Nokia Corporation"} + +; Files to install and to where +"\epoc32\Release\armv5\urel\T_ProfileSettingsView.dll"-"!:\sys\bin\T_ProfileSettingsView.dll" + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,34 @@ +/* +* Copyright (c) 2007 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: ProfileSettingsView tests. +* +*/ + +//////////////////////////////////////////////////////////// +// bld.inf +// Part of EUnit library test + +PRJ_PLATFORMS + DEFAULT + +PRJ_TESTEXPORTS + +PRJ_TESTMMPFILES +// ModuleTests +T_ProfileSettingsView.mmp + + + + + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/inc/T_CProfileToneHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/inc/T_CProfileToneHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2002 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: Test class for ProfileToneHandler. +* +*/ + + +#ifndef T_CPROFILETONEHANDLER_H +#define T_CPROFILETONEHANDLER_H + +// INCLUDES +#include + +// FORWARD DECLARATIONS +class CProfileToneHandler; + +// CLASS DECLARATION + +/** +* Test class for CProfileToneHandler. +* +* @lib SettingsViewMdlTest.lib +* @since 2.5 +*/ +class T_CProfileToneHandler : public CEUnitTestSuiteClass + { + public: // Constructors and destructor + + static T_CProfileToneHandler* NewLC(); + ~T_CProfileToneHandler(); + + private: + + void SetupL(); + + void EmptySetupL(); + + void Teardown(); + + void NewLTestL(); + + void NewLCTestL(); + + void SetActiveProfileRingingToneTestL(); + + void SetProfileToneTestL(); + + void SetToneForAllProfilesTestL(); + + private: + + T_CProfileToneHandler(); + void ConstructL(); + + private: // Data + + // Own: The tested class, Profile tone Handler. + CProfileToneHandler* iToneHandler; + + EUNIT_DECLARE_TEST_TABLE; + + }; + +#endif // T_CPROFILETONEHANDLER_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/rom/ProfileApp_ats3.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/rom/ProfileApp_ats3.iby Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2007 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: +* ROM image definition for ProfileApp automated tests +* +* +*/ + +#ifndef __PROFILEAPP_ATS3_IBY__ +#define __PROFILEAPP_ATS3_IBY__ + +// INCLUDED IN PROFILESAPPLICATION_ATS3_IBY + +//file=ABI_DIR\BUILD_DIR\T_ProfileSettingsView.dll SHARED_LIB_DIR\T_ProfileSettingsView.dll + +#endif \ No newline at end of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/src/DllMain.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/src/DllMain.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2002 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: Profile Settings View module test suite and test class +* creation and DLL entry point function. +* +*/ + + + +// INCLUDE FILES +#include "T_CProfileToneHandler.h" +#include + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CreateTestSuiteL EUnit test suite factory function. +// Creates the test suite and the test classes. +// +// Returns: EUnit test suite interface +// ----------------------------------------------------------------------------- +// +EXPORT_C MEUnitTest* CreateTestSuiteL() + { + CEUnitTestSuite* mainSuite = CEUnitTestSuite::NewLC( + _L("ProfileSettingsView Module Tests") ); + + // NewLC leaves the pointer to cleanupstack until AddL finishes + mainSuite->AddL( T_CProfileToneHandler::NewLC() ); + CleanupStack::Pop(); + + CleanupStack::Pop( mainSuite ); + return mainSuite; + } + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfileApp/tsrc/public/basic/src/T_CProfileToneHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfileApp/tsrc/public/basic/src/T_CProfileToneHandler.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,205 @@ +/* +* Copyright (c) 2002 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: Test class for CProfileIndexHandler. +* +*/ + + + +// INCLUDE FILES +#include "T_CProfileToneHandler.h" +#include +#include + +namespace + { + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::T_CProfileToneHandler +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +T_CProfileToneHandler::T_CProfileToneHandler() + { + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::ConstructL() + { + CEUnitTestSuiteClass::ConstructL(); + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +T_CProfileToneHandler* T_CProfileToneHandler::NewLC() + { + T_CProfileToneHandler* self = new( ELeave ) T_CProfileToneHandler(); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// Destructor (virtual by CBase) +T_CProfileToneHandler::~T_CProfileToneHandler() + { + } + + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::SetupL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::SetupL() + { + iToneHandler = CProfileToneHandler::NewL(); + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::EmptySetupL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::EmptySetupL() + { + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::Teardown +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::Teardown() + { + delete iToneHandler; + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::NewLTestL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::NewLTestL() + { + CProfileToneHandler* toneHandler = CProfileToneHandler::NewL(); + CleanupStack::PushL( toneHandler ); + EUNIT_ASSERT( toneHandler ); + CleanupStack::PopAndDestroy(); // toneHandler + + toneHandler = CProfileToneHandler::NewL( ); + CleanupStack::PushL( toneHandler ); + EUNIT_ASSERT( toneHandler ); + + CProfileToneHandler* anotherToneHandler = CProfileToneHandler::NewL( ); + CleanupStack::PushL( anotherToneHandler ); + EUNIT_ASSERT( anotherToneHandler ); + CleanupStack::PopAndDestroy(); // anotherToneHandler + + CleanupStack::PopAndDestroy(); // toneHandler + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::NewLCTestL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::NewLCTestL() + { + CProfileToneHandler* toneHandler = CProfileToneHandler::NewLC(); + EUNIT_ASSERT( toneHandler ); + CleanupStack::PopAndDestroy(); // toneHandler + + toneHandler = CProfileToneHandler::NewLC( ); + EUNIT_ASSERT( toneHandler ); + + CProfileToneHandler* anotherToneHandler = CProfileToneHandler::NewLC( ); + EUNIT_ASSERT( anotherToneHandler ); + CleanupStack::PopAndDestroy(); // anotherToneHandler + + CleanupStack::PopAndDestroy(); // toneHandler + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::SetActiveProfileRingingToneTestL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::SetActiveProfileRingingToneTestL() + { + iToneHandler->SetActiveProfileRingingToneL( KNullDesC ); + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::SetProfileToneTestL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::SetProfileToneTestL() + { + iToneHandler->SetProfileToneL( 0, EProfileRingingToneSetting, KNullDesC ); + } + +// ----------------------------------------------------------------------------- +// T_CProfileToneHandler::SetToneForAllProfilesTestL +// ----------------------------------------------------------------------------- +// +void T_CProfileToneHandler::SetToneForAllProfilesTestL() + { + iToneHandler->SetToneForAllProfilesL( EProfileRingingToneSetting, KNullDesC ); + } + +// ========================== EUNIT TEST CASES ================================= + +EUNIT_BEGIN_TEST_TABLE( + T_CProfileToneHandler, // Name of the tester class + "T_CProfileToneHandler test suite.", // Textual description of the test suite. + "MODULE" ) + +EUNIT_TEST( + "NewLTestL", + "CProfileToneHandler", + "NewL", + "FUNCTIONALITY", + EmptySetupL, NewLTestL, Teardown ) +EUNIT_TEST( + "NewLCTestL", + "CProfileToneHandler", + "NewLC", + "FUNCTIONALITY", + EmptySetupL, NewLCTestL, Teardown ) +EUNIT_TEST( + "SetProfileToneTestL", + "CProfileToneHandler", + "SetProfileToneL", + "FUNCTIONALITY", + SetupL, SetProfileToneTestL, Teardown ) +EUNIT_TEST( + "SetActiveProfileRingingToneTestL", + "CProfileToneHandler", + "SetActiveProfileRingingToneL", + "FUNCTIONALITY", + SetupL, SetActiveProfileRingingToneTestL, Teardown ) +EUNIT_TEST( + "SetToneForAllProfilesTestL", + "CProfileToneHandler", + "SetToneForAllProfilesL", + "FUNCTIONALITY", + SetupL, SetToneForAllProfilesTestL, Teardown ) + +EUNIT_END_TEST_TABLE + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/data/1020729B.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/data/1020729B.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2005 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: ECOM resource file for plugin. +* +*/ + +#include +#include "ProfilesUID.h" + + +RESOURCE REGISTRY_INFO theInfo + { + dll_uid = IMPLEMENTATION_UID_PROFILES_GS_TONES_PLUGIN; + interfaces = + { + INTERFACE_INFO + { + interface_uid = 0x10207236; + implementations = + { + IMPLEMENTATION_INFO + { + implementation_uid = IMPLEMENTATION_UID_PROFILES_GS_TONES_PLUGIN; + version_no = 1; + display_name = "Tones View Plugin"; // Debug name + default_data = "0x10207252";// Parent UID (Personalisation) + opaque_data = "2";// Order number + } + }; + } + }; + } + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/data/ProfilesGSTonesPluginRsc.rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/data/ProfilesGSTonesPluginRsc.rss Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,354 @@ +/* +* Copyright (c) 2005 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: Resource file for plugin. +* +*/ + + +// RESOURCE IDENTIFIER +NAME TNVW // 4 letter ID + +// INCLUDES + +#include +#include +#include // Avkon localized strings +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ProfilesGsTonesPlugin.hrh" +#include +#include +// FileListModel path definitions +#include +// FileListModel structure +#include + +// CONSTANTS + +// RESOURCE DEFINITIONS + +//---------------------------------------------------- +// +// +// Needed or loading the resource fails! +// +//---------------------------------------------------- +// +RESOURCE RSS_SIGNATURE + { + } + +// Include the common part of the resources (of application and plugin): +#include "ProfileSettingsViewCommon.rss" + +//---------------------------------------------------- +// +// r_profiles_gs_tones_view +// Tones view. +// +//---------------------------------------------------- +// +RESOURCE AVKON_VIEW r_profiles_gs_tones_view + { + menubar = r_profiles_gs_options_menubar; + cba = r_profiles_gs_tones_view_softkeys_options_back_change; + } + +//---------------------------------------------------- +// +// r_profiles_gs_tones_view_softkeys_options_back_change +// Tones view cba. +// +//---------------------------------------------------- +// +RESOURCE CBA r_profiles_gs_tones_view_softkeys_options_back_change + { + flags = 0; + buttons = + { + CBA_BUTTON {id=EAknSoftkeyOptions; txt=text_softkey_option;}, + CBA_BUTTON {id=EAknSoftkeyBack; txt=text_softkey_back;}, + CBA_BUTTON {id=EAknSoftkeyChange; txt=qtn_msk_change;} + }; + } + +//---------------------------------------------------- +// +// r_profiles_gs_tones_view_title +// Tones view title. +// +//---------------------------------------------------- +// +RESOURCE TBUF r_profiles_gs_tones_view_title + { + buf = qtn_set_title_pers_tones; + } + +//---------------------------------------------------- +// +// r_profiles_gs_tones_view_caption +// Tones view caption for plugin +// +//---------------------------------------------------- +// +RESOURCE TBUF r_profiles_gs_tones_view_caption + { + buf = qtn_set_pers_tones; + } + +//---------------------------------------------------- +// +// r_profiles_gs_tones_view_updated_note +// Active profile changed. View updated -note +// +//---------------------------------------------------- +// +RESOURCE TBUF r_profiles_gs_tones_view_updated_note + { + buf = qtn_profiles_info_tones_view_updated; + } + +//---------------------------------------------------- +// +// r_profiles_gs_options_menubar +// Options menu with 'Change' and 'Exit' items. +// +//---------------------------------------------------- +// +RESOURCE MENU_BAR r_profiles_gs_options_menubar + { + titles = + { + MENU_TITLE + { + menu_pane = r_profiles_gs_options_menupane; + } + }; + } + +//---------------------------------------------------- +// +// r_profiles_gs_menu_item_change +// Options menu item 'Change'. +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_profiles_gs_menu_item_change + { + items = + { + MENU_ITEM + { + command = EProfilesGsTonesCmdChange; + txt = qtn_options_change; + } + }; + } + +//---------------------------------------------------- +// +// r_profiles_gs_options_menupane +// Options menu of GS tones view +// +//---------------------------------------------------- +// +RESOURCE MENU_PANE r_profiles_gs_options_menupane + { + items = + { + MENU_ITEM + { + command = EProfilesGsTonesCmdChange; + txt = qtn_options_change; + }, + MENU_ITEM + { + command = EAknCmdHelp; + txt = qtn_options_help; + }, + MENU_ITEM + { + command = EAknCmdExit; + txt = qtn_options_exit; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_gs_tones_view_setting_item_list +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_ITEM_LIST r_profile_gs_tones_view_setting_item_list + { + items = + { + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingToneId; + name = qtn_mode_ringing_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingToneLine1Id; + name = qtn_mode_line1_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingToneLine2Id; + name = qtn_mode_line2_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingVideoCallToneId; + name = qtn_mode_vt_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingTTSRingingToneId; + name = qtn_mode_tts_ringing_tone; + setting_page_resource = r_profile_tts_tones_setting_page; + associated_resource = r_profile_tts_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingTypeId; + name = qtn_mode_ringing_type_2; + setting_page_resource = r_profile_ringing_type_setting_page; + associated_resource = r_profile_ringing_type_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingRingingVolumeId; + name = qtn_mode_ringing_volume; + setting_page_resource = r_profile_ringing_volume_setting_page; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingMessageAlertToneId; + name = qtn_mode_message_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingEmailAlertToneId; + name = qtn_profiles_e_mail_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileGSTonesPluginSettingCalendarToneId; + name = qtn_profiles_calendar_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileGSTonesPluginSettingClockToneId; + name = qtn_profiles_clock_tone; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingVibratingAlertId; + name = qtn_mode_vibrating_alert; + setting_page_resource = r_profile_vibrating_alert_setting_page; + associated_resource = r_profile_vibrating_alert_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingKeypadVolumeId; + name = qtn_mode_keypad_volume; + setting_page_resource = r_profile_keypad_volume_setting_page; + associated_resource = r_profile_keypad_volume_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileSettingWarningAndGameTonesId; + name = qtn_mode_warning_game; + setting_page_resource = r_profile_warning_tones_setting_page; + associated_resource = r_profile_warning_alert_setting_texts; + }, + AVKON_SETTING_ITEM + { + identifier = EProfileGSTonesPluginSettingHacModeId; + name = qtn_set_audio_hac_mode; + setting_page_resource = r_profile_hac_mode_setting_page; + associated_resource = r_profile_hac_mode_setting_texts; + } + }; + } + +// ----------------------------------------------------------------------------- +// +// r_qtn_no_personal_tone +// Default tone text used in Calendar/Clock alarm tone selection list. +// +// ----------------------------------------------------------------------------- +// +RESOURCE TBUF r_qtn_no_personal_tone + { + buf = qtn_tc_no_personal_tone; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_hac_mode_setting_page +// Setting page resource for Hearing aid compatibility setting item. +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_SETTING_PAGE r_profile_hac_mode_setting_page + { + label = qtn_set_audio_hac_mode; + softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; + type = EAknCtPopupSettingList; + editor_resource_id = r_profile_empty_popup_setting_list_control; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_vibrating_alert_setting_texts +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE AVKON_POPUP_SETTING_TEXTS r_profile_hac_mode_setting_texts + { + setting_texts_resource = r_profile_hac_mode_texts_and_values; + } + +// ----------------------------------------------------------------------------- +// +// r_profile_vibrating_alert_texts_and_values +// ?description +// +// ----------------------------------------------------------------------------- +// +RESOURCE ARRAY r_profile_hac_mode_texts_and_values + { + items = + { + AVKON_ENUMERATED_TEXT { value = 1; text = qtn_set_audio_hac_mode_on; }, + AVKON_ENUMERATED_TEXT { value = 0; text = qtn_set_audio_hac_mode_off; } + }; + } + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/group/ProfilesGSTonesPlugin.mmp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/group/ProfilesGSTonesPlugin.mmp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2005 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: Resource file for plugin. +* +*/ + +// To get the APP_LAYER_SYSTEMINCLUDE-definition +#include +#include // For RESOURCE_FILES_DIR + +CAPABILITY CAP_ECOM_PLUGIN +TARGET ProfilesGSTonesPlugin.dll +TARGETTYPE PLUGIN +UID 0x10009D8D 0x1020729B +VENDORID VID_DEFAULT + +SOURCEPATH ../src +SOURCE CProfilesGSTonesViewFeatures.cpp +SOURCE CProfilesGSTonesViewSettings.cpp +SOURCE CProfilesGSTonesPluginFileListSettingItem.cpp +SOURCE CProfilesGSTonesPluginSettingsHandler.cpp +SOURCE CProfilesGSTonesPluginSettingsHandlerDrmFull.cpp +LIBRARY drmhelper.lib +SOURCE ProfilesGSTonesPlugin.cpp +SOURCE ProfilesGSTonesPluginImplementationTable.cpp + +SOURCEPATH ../../ProfileApp/UiSrc +SOURCE CProfileNaviPaneContainer.cpp + +USERINCLUDE ../../group +USERINCLUDE ../../ProfileApp/group +USERINCLUDE ../src +USERINCLUDE ../inc +USERINCLUDE ../data + +SYSTEMINCLUDE ../../ProfileApp/SettingsViewInc +SYSTEMINCLUDE ../../ProfileApp/SettingsViewSrc +SYSTEMINCLUDE ../../ProfileApp/UiSrc +SYSTEMINCLUDE ../../ProfileEngine/EngInc +SYSTEMINCLUDE ../../../inc + +APP_LAYER_SYSTEMINCLUDE +SYSTEMINCLUDE /epoc32/include/ecom + + +SOURCEPATH ../data + +START RESOURCE 1020729B.rss +TARGET ProfilesGSTonesPlugin.rsc +END + +// View resources +START RESOURCE ProfilesGSTonesPluginRsc.rss +HEADER +TARGETPATH RESOURCE_FILES_DIR +LANGUAGE_IDS +END + + +LIBRARY euser.lib +LIBRARY ecom.lib +LIBRARY efsrv.lib +LIBRARY avkon.lib +LIBRARY bafl.lib +LIBRARY cone.lib +LIBRARY eikcoctl.lib +LIBRARY eikcore.lib +LIBRARY commonengine.lib// For RConeResourceLoader +LIBRARY featmgr.lib // Feature Manager +LIBRARY GSEcomPlugin.lib +LIBRARY GSFramework.lib +LIBRARY centralrepository.lib +LIBRARY CenRepNotifHandler.lib +LIBRARY filelist.lib +LIBRARY profilesettingsview.lib +LIBRARY hlplch.lib +LIBRARY ProfileEng.lib +LIBRARY aknnotify.lib // CAknGlobalNote + + + +// End of File +SOURCEPATH ../src +SOURCE CProfilesGSTonesPluginSettingsHandlerDrmEmpty.cpp diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2002 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: This file provides the information required for building ProfilesGSTones. +* +*/ + +// To get the APP_LAYER_LOC_EXPORT_PATH-definition +#include + +PRJ_PLATFORMS + DEFAULT + +PRJ_EXPORTS +../loc/ProfilesGSTonesPlugin.loc APP_LAYER_LOC_EXPORT_PATH(profilesgstonesplugin.loc) + +PRJ_MMPFILES + +#ifdef RD_GS_RENOVATION +ProfilesGSTonesPlugin.mmp +#endif // RD_GS_RENOVATION + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/inc/ProfilesGSTonesPlugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/inc/ProfilesGSTonesPlugin.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,195 @@ +/* +* Copyright (c) 2005 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: Header file for plugin. +* +*/ + + +#ifndef PROFILESGSTONESPLUGIN_H +#define PROFILESGSTONESPLUGIN_H + +// Includes +#include +#include +#include +#include + + +// FORWARD DECLARATIONS +class CProfileSettingsContainer; +class CProfileGSTonesTopControl; +class CProfilesGSTonesPluginSettingsHandler; +class CProfileEngineHandler; +class MProfilesLocalFeatures; +class CProfileChangeNotifyHandler; +class CProfileNaviPaneContainer; + +// CLASS DECLARATION + + +/** +* This interceptor control sits on top of the component stack. Its only purpose +* is to route focus events to CProfileSettingsContainer. Key events are not +* handled at all, they just fall through this component. +*/ +NONSHARABLE_CLASS( CProfileGSTonesTopControl ) : public CCoeControl + { + public: + + static CProfileGSTonesTopControl* NewL( CCoeControl* aFocusControl ); + void FocusChanged( TDrawNow aDrawNow ); + + private: + CCoeControl* iFocusControl; + }; + + + + +/** +* CProfilesGSTonesPlugin view class. +* +* @since Series60_3.1 +*/ +class CProfilesGSTonesPlugin : public CGSPluginInterface, + public MProfileChangeObserver, + public MProfileViewHandler + { + public: // Constructors and destructor + + /** + * Symbian OS two-phased constructor + * @return + */ + static CProfilesGSTonesPlugin* NewL( TAny* aInitParams ); + + /** + * Destructor. + */ + ~CProfilesGSTonesPlugin(); + + public: // From CAknView + + /** + * See base class. + */ + TUid Id() const; + + /** + * See base class. + */ + void DoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + /** + * See base class. + */ + void DoDeactivate(); + + /** + * See base class. + */ + void HandleCommandL( TInt aCommand ); + + /** + * See base class. + */ + void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); + + public: // From CGSPluginInterface + + /** + * See base class. + */ + void GetCaptionL( TDes& aCaption ) const; + + /** + * See base class. + */ + TGSListboxItemTypes ItemType(); + + /** + * See base class. + */ + TInt PluginProviderCategory() const; + + /** + * From MProfileChangeObserver + */ + void HandleActiveProfileEventL( + TProfileEvent aProfileEvent, TInt aProfileId ); + + /** + * From MProfileViewHandler + */ + virtual void UpdateClientRect(); + + /** + * From MProfileViewHandler + */ + virtual CAknView& View(); + + protected: // New functions + + /** + * Shows the information note with the text found from the given + * resource. + * @param aResourceId The ID of the resource containing the text to be + * shown. + */ + void ShowInfoNoteL( TInt aResourceId ); + + protected: // Constructors + /** + * C++ default constructor. + */ + CProfilesGSTonesPlugin(); + + /** + * Symbian OS default constructor. + */ + void ConstructL(); + + private: // Data + + // Resource loader. + RConeResourceLoader iResourceLoader; + + /// Own: Container for the profile settings + CProfileSettingsContainer* iContainer; + + /// Own: control needed to get the focus on listbox + CProfileGSTonesTopControl* iTopControl; + + /// Own: handler for the settings external to Profiles + CProfilesGSTonesPluginSettingsHandler* iSettingsHandler; + + /// Own: handler for Profiles Engine + CProfileEngineHandler* iEngineHandler; + + // Own: Profile change notify handler. + CProfileChangeNotifyHandler* iNotifier; + + // Own: Navi pane container. + CProfileNaviPaneContainer* iNaviPaneContainer; + + // The ID of the previously active profile + TInt iPreviousProfile; + }; + + +#endif // PROFILESGSTONESPLUGIN_H + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/inc/ProfilesGSTonesPlugin.hrh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/inc/ProfilesGSTonesPlugin.hrh Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,43 @@ +/* +* Copyright (c) 2003, 2004 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: Resource header file for the plugin. +* +*/ + + +#ifndef PROFILESGSTONESPLUGIN_HRH +#define PROFILESGSTONESPLUGIN_HRH + +// CONSTANTS + +// DATA TYPES + +enum TProfilesGsTonesCommandIds + { + EProfilesGsTonesCmdChange = 1 // available from menu in settings list + }; + +enum TProfileGSTonesSettingItemIds + { + // Start from 100 to not to collapse with the setting item IDs in Profiles + // App: + EProfileGSTonesPluginSettingCalendarToneId = 100, + EProfileGSTonesPluginSettingClockToneId = 101, + EProfileGSTonesPluginSettingHacModeId = 102 + }; + +#endif // PROFILESGSTONESPLUGIN_HRH + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/loc/ProfilesGsTonesPlugin.loc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/loc/ProfilesGsTonesPlugin.loc Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2006-2006 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: Localization strings for Project ProfilesGsTonesPlugin. +* +*/ + + +/* + The syntax of a logical name entry in this file is the following: + + // d:context description (line 1) + // d:context description (line N) + // l:layout id + // w: + // r:release information + // + #define qtn__?freetext "?text" + + where + "qtn_" starts a logical name. Note: "text_" has been used in + old logical names, but is deprecated. + "?feature/application" is 2-5 lower-case characters and/or numbers + identifying the larger context of the display text. + "?freetext" is the free text portion of the logical name. + It may contain only lower-case letters ('a' to 'z'), numbers + ('0' to '9'), and the underscore ('_'). The total length of + the logical name does must not exceed 50 characters. + "d:" Starts a description line clarifying the entry's context with + information like: + - Is a word a verb in imperative or is it a noun? (For instance, + what does "Set" mean?) + - What will replace %U (unicode text parameter) or %N (number + parameter) included in texts? (For instance, is it a phone + number or an e-mail address?) + "l:" Starts a layout id information (one line). + "P" and "No" are symbols in LAF's information table + - "P" is parent pane or current pane + - "No" is reference number in table + "r:" Starts a release information: one line indicating in which + S60 release the text was used for the first time. + +*/ + + +// d:List pane text in General Settings Personalisation view. +// l:list_setting_pane_t1 +// r:3.1u +// +#define qtn_set_pers_tones "Tones" + +// d:Title pane text in General Settings Tones view. +// l:title_pane_t2/opt9 +// r:3.1u +// +#define qtn_set_title_pers_tones "Tones" + +// d:List pane text for calendar alert tone in General Settings Tones view. +// l:list_setting_pane_t1 +// r:3.1u +// +#define qtn_profiles_calendar_tone "Calendar alert tone" + +// d:List pane text for clock alert tone in General Settings Tones view. +// l:list_setting_pane_t1 +// r:3.1u +// +#define qtn_profiles_clock_tone "Clock alert tone" + +//d:Default tone selection choice in alarm tone list for Calendar and Clock +//l:list_set_graphic_pane_t1 +// +#define qtn_tc_no_personal_tone "Default tone" + +//d: Notification about updating of Tones View when the active profile is +//d: changed. +//l: popup_note_window +#define qtn_profiles_info_tones_view_updated "Active profile changed. View updated." + +// LOC STRINGS FOR HAC HEARING AID SETTING + +// d:List pane text for hearing aid setting in General Settings Tones view. +// l:list_setting_pane_t1 +// r:3.1 +// +#define qtn_set_audio_hac_mode "T-coil hearing aid mode" + +//d: Profile GS Tones View Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.1 +#define qtn_set_audio_hac_mode_on "On" + +//d: Profile GS Tones View Settings Item Edit - setting selection data +//l: list_set_graphic_pane_t1 +//r:3.1 +#define qtn_set_audio_hac_mode_off "Off" + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginFileListSettingItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginFileListSettingItem.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,370 @@ +/* +* Copyright (c) 2002 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: Setting item class for tone selection. +* +*/ + + + +// CLASS HEADER +#include "CProfilesGSTonesPluginFileListSettingItem.h" + +// INTERNAL INCLUDES +#include // From Profile Engine +#include +#include "ProfilesGSTonesPlugin.hrh" +#include +#include "MProfilesGSTonesPluginItemDataInterface.h" +#include "ProfilesDebug.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include + +namespace + { +// CONSTANTS + _LIT( KIgnoredExtension, ".RNG" ); + _LIT( KProfileSilentTone, "Z:No_Sound.wav" ); + // MIME types that should not be shown by FileList + _LIT( KProfileTypeMpegUrl, "audio/mpegurl" ); + _LIT( KProfileTypeRaPlugin, "audio/x-pn-realaudio-plugin" ); +#ifndef __WMA + _LIT( KProfileTypeWma, "audio/x-ms-wma" ); +#endif + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::CProfilesGSTonesPluginFileListSettingItem +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesPluginFileListSettingItem::CProfilesGSTonesPluginFileListSettingItem( + TInt aIdentifier, + const TDesC& aDefaultToneFileName, + CCoeEnv* aCoeEnv, + MProfilesGSTonesPluginItemDataInterface& aDataInterface ) + : CAknSettingItem( aIdentifier ), + iDefaultToneFileName( aDefaultToneFileName ), + iCoeEnv( aCoeEnv ), + iDataInterface( aDataInterface ) + { + } + +// Destructor +CProfilesGSTonesPluginFileListSettingItem::~CProfilesGSTonesPluginFileListSettingItem() + { + PRODEBUG( "~CProfilesGSTonesPluginFileListSettingItem" ); + if( iVibraNotifyHandler ) + { + iVibraNotifyHandler->StopListening(); + } + + if( iTypeNotifyHandler ) + { + iTypeNotifyHandler->StopListening(); + } + + if( iVolumeNotifyHandler ) + { + iVolumeNotifyHandler->StopListening(); + } + + delete iVibraNotifyHandler; + delete iTypeNotifyHandler; + delete iVolumeNotifyHandler; + + delete iSession; + delete iVibraSession; + + delete iTitle; + delete iNoSoundFileName; + delete iNoSoundText; + + delete iDefaultToneText; + delete iFileListContainer; + PRODEBUG( "~CProfilesGSTonesPluginFileListSettingItem end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::CompleteConstructionL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginFileListSettingItem::CompleteConstructionL() + { + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::CompleteConstr begin" ); + iNoSoundText = + StringLoader::LoadL( R_PROFILE_TEXT_NONE ); + + TFileName fileName; + TParse* fp = new(ELeave) TParse(); + fp->Set(KProfileSilentTone, &KDC_RESOURCE_FILES_DIR, NULL); + fileName.Copy( fp->FullName() ); + delete fp; + iNoSoundFileName = fileName.AllocL(); + iTitle = + StringLoader::LoadL( R_PROFILE_TEXT_SELECT_TONE ); + + iVibraSession = CRepository::NewL(KCRUidVibraCtrl); + iSession = CRepository::NewL(KCRUidProfileEngine); + ReadMaxToneFileSizeL( *iSession ); + + iVibraNotifyHandler = CCenRepNotifyHandler::NewL(*this, + *iVibraSession, + CCenRepNotifyHandler::EIntKey, + KVibraCtrlProfileVibraEnabled); + + User::LeaveIfError( iVibraSession->Get( KVibraCtrlProfileVibraEnabled, iVibratingAlert ) ); + + iVibraNotifyHandler->StartListeningL(); + + if( Identifier() == EProfileGSTonesPluginSettingCalendarToneId ) + { + iVolumeNotifyHandler = CCenRepNotifyHandler::NewL(*this, + *iSession, + CCenRepNotifyHandler::EIntKey, + KProEngActiveRingingVolume); + + iTypeNotifyHandler = CCenRepNotifyHandler::NewL(*this, + *iSession, + CCenRepNotifyHandler::EIntKey, + KProEngActiveRingingType); + + User::LeaveIfError( iSession->Get( KProEngActiveRingingVolume, + iRingingVolume ) ); + User::LeaveIfError( iSession->Get( KProEngActiveRingingType, + iRingingType ) ); + + iVolumeNotifyHandler->StartListeningL(); + iTypeNotifyHandler->StartListeningL(); + } + + iDefaultToneText = StringLoader::LoadL(R_QTN_NO_PERSONAL_TONE, iCoeEnv); + iInternalToneFileName.Copy( iDataInterface.ItemData() ); + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::CompleteConstr end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::StoreL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginFileListSettingItem::StoreL() + { + if( iInternalToneFileName.Length() == 0 ) + { + iInternalToneFileName = *iNoSoundFileName; // No_Sound.wav + } + iDataInterface.SetItemDataL( iInternalToneFileName ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::LoadL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginFileListSettingItem::LoadL() + { + iInternalToneFileName.Copy( iDataInterface.ItemData() ); + if( iInternalToneFileName.Length() == 0 ) + { + iInternalToneFileName = *iNoSoundFileName; + } + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::EditItemL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginFileListSettingItem::EditItemL( TBool /* aCalledFromMenu */ ) + { + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL begin" ); + TInt ringingType( iRingingType ); + TInt volume( iRingingVolume ); + TInt id( Identifier() ); + if( id == EProfileGSTonesPluginSettingCalendarToneId ) + { + if( ( ringingType != EProfileRingingTypeBeepOnce ) && + ( ringingType != EProfileRingingTypeSilent ) ) + { + ringingType = EProfileRingingTypeRinging; + } + } + else // Clock alert tone + { + ringingType = EProfileRingingTypeRinging; + volume = EProfileRingingVolumeLevel7; + } + + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL before FLD constr" ); + + iFileListContainer = CFLDFileListContainer::NewL(); + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL after FLD constr" ); + + + iFileListContainer->InsertNullItemL( *iDefaultToneText, iDefaultToneFileName ); + // Add "Off" as the last item in tone selection list. + iFileListContainer->InsertEndNullItemL( *iNoSoundText, *iNoSoundFileName ); + iFileListContainer->SetRingingType( ringingType ); + iFileListContainer->SetVolume( volume ); + iFileListContainer->SetVibra( iVibratingAlert ); + iFileListContainer->AddExclusiveMimeTypeL( KProfileTypeMpegUrl ); + iFileListContainer->AddExclusiveMimeTypeL( KProfileTypeRaPlugin ); +#ifndef __WMA + iFileListContainer->AddExclusiveMimeTypeL( KProfileTypeWma ); +#endif + iFileListContainer->AddExclusiveMediaTypeL( ECLFMediaTypeVideo ); + + if( id == EProfileGSTonesPluginSettingCalendarToneId ) + { + iFileListContainer->SetAutomatedType( + CDRMHelper::EAutomatedTypeCalendarAlarm ); + } + else + { + iFileListContainer->SetAutomatedType( + CDRMHelper::EAutomatedTypeClockAlarm ); + } + + // Size limit for voice call tone files + if ( ( id == EProfileSettingRingingToneId || + id == EProfileSettingRingingToneLine1Id || + id == EProfileSettingRingingToneLine2Id ) && iSizeLimit ) + { + iFileListContainer->SetMaxFileSize( iSizeLimit ); + } + + // Launch File List Dialog + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL before FLD launch" ); + TBool returnValue( iFileListContainer->LaunchL( iInternalToneFileName, *iTitle ) ); + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL after FLD launch" ); + if( returnValue ) + { + // Setting Oked. + iDataInterface.SetItemDataL( iInternalToneFileName ); + UpdateListBoxTextL(); + } + + delete iFileListContainer; + iFileListContainer = NULL; + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::EditItemL end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::SettingTextL +// ----------------------------------------------------------------------------- +// +const TDesC& CProfilesGSTonesPluginFileListSettingItem::SettingTextL() + { + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::SettingTextL begin" ); + if( iInternalToneFileName.Length() > 0 ) + { + // FLD has returned a filename + if( iInternalToneFileName.CompareF( *iNoSoundFileName ) == 0 ) + { + // Filename is "No_Sound", return localized text "None" + iSettingText.Set( *iNoSoundText ); + } + else if( iInternalToneFileName.CompareF( iDefaultToneFileName ) == 0 ) + { + // Filename is "No_Sound", return localized text "None" + iSettingText.Set( *iDefaultToneText ); + } + else + { + // Filename is something else + TParsePtrC parse( iInternalToneFileName ); + if( parse.Ext().CompareF( KIgnoredExtension ) == 0 ) + { + iSettingText.Set( parse.Name() ); + } + else + { + iSettingText.Set( parse.NameAndExt() ); + } + } + } + else + { + // Filename is an empty descriptor, return localised text "None" + iSettingText.Set( *iNoSoundText ); + } + PRODEBUG( "CProfilesGSTonesPluginFileListSettingItem::SettingTextL end" ); + return iSettingText; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginFileListSettingItem::HandleNotifyInt +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginFileListSettingItem::HandleNotifyInt( TUint32 aId, + TInt aNewValue ) + { + switch( aId ) + { + case KVibraCtrlProfileVibraEnabled: + { + iVibratingAlert = aNewValue; + if( iFileListContainer ) + { + iFileListContainer->SetVibra( iVibratingAlert ); + } + break; + } + case KProEngActiveRingingType: + { + iRingingType = aNewValue; + if( iFileListContainer ) + { + iFileListContainer->SetRingingType( iRingingType ); + } + break; + } + default: // KProEngActiveRingingVolume + { + iRingingVolume = aNewValue; + if( iFileListContainer ) + { + iFileListContainer->SetVolume( iRingingVolume ); + } + break; + } + } + + } + +// ----------------------------------------------------------------------------- +// CProfileFileListSettingItem::ReadMaxToneFileSizeL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginFileListSettingItem::ReadMaxToneFileSizeL( + CRepository& aRepository ) + { + // Set file size limit if configured ON. + User::LeaveIfError( aRepository.Get( KProEngRingingToneMaxSize, + iSizeLimit ) ); + if ( iSizeLimit < 0 ) + { + iSizeLimit = 0; + } + iSizeLimit *= KKilo; + } + +// End Of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginFileListSettingItem.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginFileListSettingItem.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,172 @@ +/* +* Copyright (c) 2002 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: Setting item class for tone selection. +* +*/ + + + +#ifndef CPROFILESGSTONESPLUGINFILELISTSETTINGITEM_H +#define CPROFILESGSTONESPLUGINFILELISTSETTINGITEM_H + +// INCLUDES +#include +#include + +// FORWARD DECLARATIONS +class CCoeEnv; +class CFLDFileListContainer; +class CRepository; +class MProfilesGSTonesPluginItemDataInterface; + +// CLASS DECLARATION +/** +* Setting item class for tone selection. +* CProfilesGSTonesPluginFileListSettingItem launches File List Dialog common component +* from which user can select a file for ringing tone. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfilesGSTonesPluginFileListSettingItem ) : public CAknSettingItem, + public MCenRepNotifyHandlerCallback + { + + public: // Constructors and destructor + + /** + * C++ constructor. + * @param aIdentifier Resource identifier. + * Tells which setting item is currently edited. + * @param aRingingType Describes how the tone is played. + * @param aRingingVolume The volume how loud the tone is played. + * @param aVibratingAlert Setting of the vibrating alert. + * @param aCoeEnv Pointer to Control Environment. + * @param aDataInterface reference to the interface to the data + * storage. + */ + CProfilesGSTonesPluginFileListSettingItem( + TInt aIdentifier, + const TDesC& aDefaultToneFileName, + CCoeEnv* aCoeEnv, + MProfilesGSTonesPluginItemDataInterface& aDataInterface ); + + /** + * Destructor. + */ + ~CProfilesGSTonesPluginFileListSettingItem(); + + private: // Functions from base classes + + /** + * From CAknSettingItem + */ + void CompleteConstructionL(); + + /** + * From CAknSettingItem + */ + void StoreL(); + + /** + * From CAknSettingItem + */ + void LoadL(); + + /** + * From CAknSettingItem + */ + void EditItemL( TBool aCalledFromMenu ); + + /** + * From CAknSettingItem + */ + const TDesC& SettingTextL(); + + /** + * From MCenRepNotifyHandlerCallback + */ + void HandleNotifyInt( TUint32 aId, TInt aNewValue ); + + private: // New functions + /** + * Read the size limitation key from Profiles Central Repository. + * + * @param aRepository reference to an open Profiles Cenrep session. + */ + void ReadMaxToneFileSizeL( CRepository& aRepository ); + + private: // Data + + // Internal buffer for filename of selected tone + TFileName iInternalToneFileName; + + // Ringing type for tone playback + TInt iRingingType; + + // Ringing volume for tone playback + TInt iRingingVolume; + + // Vibrating alert setting for tone playback + TBool iVibratingAlert; + + // Own: Localised text qtn_tc_none + HBufC* iNoSoundText; + + // Own: "No_Sound.wav" file name + HBufC* iNoSoundFileName; + + // Own: Localised text qtn_no_personal_tone + HBufC* iDefaultToneText; + + // Default tone file name + TFileName iDefaultToneFileName; + + // Own: Localised text for title for tone selection + HBufC* iTitle; /// Title for tone selection + + // Text that is returned by SettingTextL + TPtrC iSettingText; + + // Ref: Pointer to Control Environment + CCoeEnv* iCoeEnv; + + // Own: File list container + CFLDFileListContainer* iFileListContainer; + + // Own: Notification handler for active profile vibra setting + CCenRepNotifyHandler* iVibraNotifyHandler; + + // Own: Notification handler for active profile ringing type setting + CCenRepNotifyHandler* iTypeNotifyHandler; + + // Own: Notification handler for active profile ringing volume setting + CCenRepNotifyHandler* iVolumeNotifyHandler; + + // Own: Profiles Central Repository session + CRepository* iSession; + + // Own: Vibra control Central Repository session + CRepository* iVibraSession; + + // The interface to the external data storage + MProfilesGSTonesPluginItemDataInterface& iDataInterface; + + // Holds the size limitation value for ringing tone file size + TInt iSizeLimit; + }; + +#endif // CPROFILESGSTONESPLUGINFILELISTSETTINGITEM_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandler.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,382 @@ +/* +* Copyright (c) 2002 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: Settings handler for the settings outside of Profiles. +* +*/ + + + +// CLASS HEADER +#include "CProfilesGSTonesPluginSettingsHandler.h" + +// INTERNAL INCLUDES +#include "CProfilesGSTonesPluginFileListSettingItem.h" +#include "ProfilesGSTonesPlugin.hrh" +#include "ProfilesDebug.h" + +// INCLUDES FROM PROFILES SETTINGS VIEW +#include +#include +#include + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::CProfilesGSTonesPluginSettingsHandler +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesPluginSettingsHandler::CProfilesGSTonesPluginSettingsHandler( + CCoeEnv* aCoeEnv ) + : iCoeEnv( aCoeEnv ) + { + } + +// Destructor +CProfilesGSTonesPluginSettingsHandler::~CProfilesGSTonesPluginSettingsHandler() + { + DrmDelete(); + if( iClockNotifyHandler ) + { + iClockNotifyHandler->StopListening(); + } + if( iCalendarNotifyHandler ) + { + iCalendarNotifyHandler->StopListening(); + } + + delete iClockNotifyHandler; + delete iCalendarNotifyHandler; + + delete iClockSession; + delete iCalendarSession; + delete iCalendarInterface; + delete iClockInterface; + + delete iTonesViewSettings; + delete iFeatures; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::ConstructL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::ConstructL() + { + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::ConstructL begin" ); + iFeatures = CProfilesGSTonesViewFeatures::NewL(); + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::ConstructL after features" ); + iTonesViewSettings = CProfilesGSTonesViewSettings::NewL( *iFeatures ); + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::ConstructL after settings" ); + + iClockSession = CRepository::NewL( KCRUidClockApp ); + iCalendarSession = CRepository::NewL( KCRUidCalendar ); + + iClockNotifyHandler = CCenRepNotifyHandler::NewL( *this, + *iClockSession, + CCenRepNotifyHandler::EStringKey, + KClockAppSoundFile ); + + iClockNotifyHandler->StartListeningL(); + + iCalendarNotifyHandler = CCenRepNotifyHandler::NewL( *this, + *iCalendarSession, + CCenRepNotifyHandler::EStringKey, + KCalendarSoundFile ); + + iCalendarNotifyHandler->StartListeningL(); + + User::LeaveIfError( iClockSession->Get( KClockAppSoundFile, iClockTone ) ); + User::LeaveIfError( iCalendarSession->Get( KCalendarSoundFile, + iCalendarTone ) ); + DrmConstructL(); + + iCalendarInterface = + new ( ELeave ) CProfilesGSTonesPluginCalendarDataInterface( *this ); + iClockInterface = + new ( ELeave ) CProfilesGSTonesPluginClockDataInterface( *this ); + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::ConstructL end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::NewL +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesPluginSettingsHandler* + CProfilesGSTonesPluginSettingsHandler::NewL( CCoeEnv* aCoeEnv ) + { + CProfilesGSTonesPluginSettingsHandler* self = new ( ELeave ) + CProfilesGSTonesPluginSettingsHandler( aCoeEnv ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::CreateSettingItemL +// ----------------------------------------------------------------------------- +// +CAknSettingItem* CProfilesGSTonesPluginSettingsHandler::CreateSettingItemL( + TInt aIdentifier ) + { + PRODEBUG1( "CProfilesGSTonesPluginSettingHandler::CreateSettingItemL(%d) begin",aIdentifier ); + TFileName defaultToneFile; + CAknSettingItem* item = NULL; + + switch( aIdentifier ) + { + case EProfileGSTonesPluginSettingCalendarToneId: + { + User::LeaveIfError( iCalendarSession->Get( KCalendarDefaultSoundFile, + defaultToneFile ) ); + item = new ( ELeave ) CProfilesGSTonesPluginFileListSettingItem( + aIdentifier, defaultToneFile, iCoeEnv, *iCalendarInterface ); + break; + } + case EProfileGSTonesPluginSettingClockToneId: + { + User::LeaveIfError( iClockSession->Get( KClockAppDefaultSoundFile, + defaultToneFile ) ); + item = new ( ELeave ) CProfilesGSTonesPluginFileListSettingItem( + aIdentifier, defaultToneFile, iCoeEnv, *iClockInterface ); + + break; + } + case EProfileGSTonesPluginSettingHacModeId: + { + item = new( ELeave ) CAknBinaryPopupSettingItem( + aIdentifier, iTonesViewSettings->iHac ); + break; + } + default: + { + User::Panic( KProfilePanicText, EProfilePanicInvalidSettingItemId ); + break; + } + } + + PRODEBUG1( "CProfilesGSTonesPluginSettingHandler::CreateSettingItemL(%d) end",aIdentifier ); + return item; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::SetObserver +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::SetObserver( + MProfileExternalSettingsObserver& aObserver ) + { + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::SetObserver" ); + iObserver = &aObserver; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::AllowedToChange +// ----------------------------------------------------------------------------- +// +TBool CProfilesGSTonesPluginSettingsHandler::AllowedToChange( + TInt aSettingItemId ) const + { + switch( aSettingItemId ) + { + case EProfileGSTonesPluginSettingCalendarToneId: // Fall through + case EProfileGSTonesPluginSettingClockToneId: + { + return ETrue; + } + case EProfileGSTonesPluginSettingHacModeId: + { + return ( iFeatures->IsLocalFeatureSupported( + KTonesViewFeatureIdHac ) ); + } + default: + { + return EFalse; + } + } + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::GetHelpContext +// ----------------------------------------------------------------------------- +// +TBool CProfilesGSTonesPluginSettingsHandler::GetHelpContext( + TCoeHelpContext& aContext ) const + { + aContext.iContext = KSET_HLP_PERSONAL_TONES; + return ETrue; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::SetHiddenItems +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::SetHiddenItems( + CAknSettingItemArray& aSettingItemArray ) const + { + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::SetHiddenItems" ); + TInt count( aSettingItemArray.Count() ); + for( TInt index( 0 ); index < count; index++ ) + { + CAknSettingItem* item = aSettingItemArray.At( index ); + if( ( item->Identifier() == EProfileGSTonesPluginSettingHacModeId ) ) + { + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::SetHiddenItems hac" ); + item->SetHidden( + !iFeatures->IsLocalFeatureSupported( KTonesViewFeatureIdHac ) ); + } + } + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::SetHiddenItems end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::StoreIfChangedL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::StoreIfChangedL( TInt aSettingId ) + { + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::StoreIfChanged" ); + iTonesViewSettings->StoreIfChangedL( aSettingId ); + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::StoreIfChanged end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::HandleNotifyString +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::HandleNotifyString( TUint32 aId, + const TDesC16& /* aNewValue */ ) + { + PRODEBUG1( "CProfilesGSTonesPluginSettingHandler::HandleNotifyString(%d) begin",aId ); + if( aId == KCalendarSoundFile ) + { // cannot leave - ignore return value: + iCalendarSession->Get( KCalendarSoundFile, iCalendarTone ); + } + else // Clock sound file + { // cannot leave - ignore return value: + iClockSession->Get( KClockAppSoundFile, iClockTone ); + } + TRAP_IGNORE( iObserver->HandleExternalSettingsChangedL() ); + PRODEBUG1( "CProfilesGSTonesPluginSettingHandler::HandleNotifyString(%d) end",aId ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::StoreCalendarToneL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::StoreCalendarToneL( + const TDesC& aTone ) + { + PRODEBUG1( "CProfilesGSTonesPluginSettingHandler::StoreCalendarTone(%S)",&aTone ); + if( iCalendarTone.CompareF( aTone ) != 0 ) + { + User::LeaveIfError( + iCalendarSession->Set( KCalendarSoundFile, aTone ) ); + RemoveAutomatedContent( iCalendarTone ); + iCalendarTone.Copy( aTone ); + } + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::StoreClockToneL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::StoreClockToneL( + const TDesC& aTone ) + { + PRODEBUG1( "CProfilesGSTonesPluginSettingHandler::StoreClockTone(%S)",&aTone ); + if( iClockTone.CompareF( aTone ) != 0 ) + { + User::LeaveIfError( + iClockSession->Set( KClockAppSoundFile, aTone ) ); + RemoveAutomatedContent( iClockTone ); + iClockTone.Copy( aTone ); + } + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginCalendarDataInterface:: +// CProfilesGSTonesPluginCalendarDataInterface +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesPluginCalendarDataInterface:: +CProfilesGSTonesPluginCalendarDataInterface( + CProfilesGSTonesPluginSettingsHandler& aSettingsHandler ) + : iSettingsHandler( aSettingsHandler ) + {} + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginCalendarDataInterface::ItemData +// ----------------------------------------------------------------------------- +// +const TDesC& CProfilesGSTonesPluginCalendarDataInterface::ItemData() + { + return iSettingsHandler.iCalendarTone; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginCalendarDataInterface::SetItemDataL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginCalendarDataInterface::SetItemDataL( + const TDesC& aDataBuf ) + { + PRODEBUG( "CProfilesGSTonesPluginCalendarDataInterface::SetItemDataL" ); + iSettingsHandler.StoreCalendarToneL( aDataBuf ); + PRODEBUG( "CProfilesGSTonesPluginCalendarDataInterface::SetItemDataL end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginClockDataInterface:: +// CProfilesGSTonesPluginClockDataInterface +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesPluginClockDataInterface:: +CProfilesGSTonesPluginClockDataInterface( + CProfilesGSTonesPluginSettingsHandler& aSettingsHandler ) + : iSettingsHandler( aSettingsHandler ) + {} + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginClockDataInterface::ItemData +// ----------------------------------------------------------------------------- +// +const TDesC& CProfilesGSTonesPluginClockDataInterface::ItemData() + { + return iSettingsHandler.iClockTone; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginClockDataInterface::SetItemDataL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginClockDataInterface::SetItemDataL( + const TDesC& aDataBuf ) + { + PRODEBUG( "CProfilesGSTonesPluginClockDataInterface::SetItemDataL" ); + iSettingsHandler.StoreClockToneL( aDataBuf ); + PRODEBUG( "CProfilesGSTonesPluginClockDataInterface::SetItemDataL end" ); + } + +// End Of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandler.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,271 @@ +/* +* Copyright (c) 2002 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: Settings handler for the settings outside of Profiles. +* +*/ + + + +#ifndef CPROFILESGSTONESPLUGINSETTINGSHANDLER_H +#define CPROFILESGSTONESPLUGINSETTINGSHANDLER_H + +// INCLUDES +#include +#include +#include +#include "MProfilesGSTonesPluginItemDataInterface.h" +#include "CProfilesGSTonesViewFeatures.h" +#include "CProfilesGSTonesViewSettings.h" + +// FORWARD DECLARATIONS +class CCoeEnv; +class CRepository; +class MProfileExternalSettingsObserver; +class CDRMHelper; +class CProfilesGSTonesPluginCalendarDataInterface; +class CProfilesGSTonesPluginClockDataInterface; +class TCoeHelpContext; + +// CLASS DECLARATION +/** +* Setting item class for tone selection. +* CProfilesGSTonesPluginSettingsHandler launches File List Dialog common component +* from which user can select a file for ringing tone. +* +* @lib ProfileSettingsView.lib +* @since 1.2 +*/ +NONSHARABLE_CLASS( CProfilesGSTonesPluginSettingsHandler ) + : public CBase, + public MCenRepNotifyHandlerCallback, + public MProfileExternalSettingsHandler + { + + friend class CProfilesGSTonesPluginCalendarDataInterface; // CSI: 36 # This friend is defined in this very same file + friend class CProfilesGSTonesPluginClockDataInterface; // CSI: 36 # This friend is defined in this very same file + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CProfilesGSTonesPluginSettingsHandler* NewL( CCoeEnv* aCoeEnv ); + + /** + * Destructor. + */ + ~CProfilesGSTonesPluginSettingsHandler(); + + /** + * Variated destructor. + */ + void DrmDelete(); + + private: // Functions from base classes + + /** + * From MCenRepNotifyHandlerCallback + */ + void HandleNotifyString( TUint32 aId, const TDesC16& aNewValue ); + + /** + * From MProfilesExternalSettingsHandler + */ + CAknSettingItem* CreateSettingItemL( TInt aIdentifier ); + + /** + * From MProfilesExternalSettingsHandler + */ + void SetObserver( + MProfileExternalSettingsObserver& aObserver ); + + /** + * From MProfilesExternalSettingsHandler + */ + TBool AllowedToChange( TInt aSettingItemId ) const; + + /** + * From MProfilesExternalSettingsHandler + */ + TBool GetHelpContext( TCoeHelpContext& aContext ) const; + + /** + * From MProfilesExternalSettingsHandler + */ + void SetHiddenItems( CAknSettingItemArray& aSettingItemArray ) const; + + /** + * From MProfilesExternalSettingsHandler + */ + void StoreIfChangedL( TInt aSettingId ); + + protected: + + /** + * C++ constructor. + */ + CProfilesGSTonesPluginSettingsHandler( CCoeEnv* aCoeEnv ); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + /** + * Variated constructor. + */ + void DrmConstructL(); + + private: // New functions + + /** + * Stores the new Calendar alarm tone in the Central Repository. + * @param aTone the file to be used as the new Calendar alarm tone. + */ + void StoreCalendarToneL( const TDesC& aTone ); + + /** + * Stores the new Clock alarm tone in the Central Repository. + * @param aTone the file to be used as the new Clock alarm tone. + */ + void StoreClockToneL( const TDesC& aTone ); + + /** + * Removes the given tone from the list of automated content. + * @param aOldTone tone to be removed from the automated content list. + */ + void RemoveAutomatedContent( const TDesC& aOldTone ); + + private: // Data + + /// Ref: Observer for the settings controlled by this handler + MProfileExternalSettingsObserver* iObserver; + + /// Own: Pointer to Central Repository of Clock App + CRepository* iClockSession; + + /// Own: Pointer to Central Repository of Calendar App + CRepository* iCalendarSession; + + /// Own: Pointer to clock alert tone notify handler + CCenRepNotifyHandler* iClockNotifyHandler; + + /// Own: Pointer to calendar alert tone notify handler + CCenRepNotifyHandler* iCalendarNotifyHandler; + + /// Current Clock alert tone + TFileName iClockTone; + + /// Current Calendar alert tone + TFileName iCalendarTone; + + /// Ref: Pointer to the control environment + CCoeEnv* iCoeEnv; + + /// Own: Interface for File list setting item for calendar tone + CProfilesGSTonesPluginCalendarDataInterface* iCalendarInterface; + + /// Own: Interface for File list setting item for clock tone + CProfilesGSTonesPluginClockDataInterface* iClockInterface; + + /// Own: Drm helper for removing automated content when needed: + CDRMHelper* iDrmHelper; + + /// Own: The variable features of Tones View + CProfilesGSTonesViewFeatures* iFeatures; + + /// Own: The settings only in Tones View + CProfilesGSTonesViewSettings* iTonesViewSettings; + }; + +// This friend class of CProfilesGSTonesPluginSettingsHandler provides the +// interface for the setting item to actually load and store the Calendar +// alert tone name to the handler above. +NONSHARABLE_CLASS( CProfilesGSTonesPluginCalendarDataInterface ) + : public CBase, + public MProfilesGSTonesPluginItemDataInterface + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CProfilesGSTonesPluginCalendarDataInterface( + CProfilesGSTonesPluginSettingsHandler& aSettingsHandler ); + + /** + * Destructor. + */ + ~CProfilesGSTonesPluginCalendarDataInterface() {}; + + private: // Functions from base classes + + /** + * From MProfilesGSTonesPluginItemDataInterface + */ + virtual const TDesC& ItemData(); + + /** + * From MProfilesGSTonesPluginItemDataInterface + */ + virtual void SetItemDataL( const TDesC& aDataBuf ); + + private: // Data + + /// Settings handler containing the setting to be controlled + CProfilesGSTonesPluginSettingsHandler& iSettingsHandler; + }; + +// This friend class of CProfilesGSTonesPluginSettingsHandler provides the +// interface for the setting item to actually load and store the Clock +// alert tone name to the handler above. +NONSHARABLE_CLASS( CProfilesGSTonesPluginClockDataInterface ) + : public CBase, + public MProfilesGSTonesPluginItemDataInterface + { + public: // Constructors and destructor + + /** + * C++ constructor. + */ + CProfilesGSTonesPluginClockDataInterface( + CProfilesGSTonesPluginSettingsHandler& aSettingsHandler ); + + /** + * Destructor. + */ + ~CProfilesGSTonesPluginClockDataInterface() {}; + + private: // Functions from base classes + + /** + * From MProfilesGSTonesPluginItemDataInterface + */ + virtual const TDesC& ItemData(); + + /** + * From MProfilesGSTonesPluginItemDataInterface + */ + virtual void SetItemDataL( const TDesC& aDataBuf ); + + private: // Data + + /// Settings handler containing the setting to be controlled + CProfilesGSTonesPluginSettingsHandler& iSettingsHandler; + }; + +#endif // CPROFILESGSTONESPLUGINSETTINGSHANDLER_H + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandlerDrmEmpty.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandlerDrmEmpty.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,55 @@ +/* +* Copyright (c) 2002 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: Settings handler for the settings outside of Profiles. +* +*/ + + + +// CLASS HEADER +#include "CProfilesGSTonesPluginSettingsHandler.h" + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::RemoveAutomatedContent +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::RemoveAutomatedContent( + const TDesC& aOldTone ) + { + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::DrmConstructL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::DrmConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::DrmDelete +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::DrmDelete() + { + } + +// End Of File + + + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandlerDrmFull.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesPluginSettingsHandlerDrmFull.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2002 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: Settings handler for the settings outside of Profiles. +* +*/ + + + +// CLASS HEADER +#include "CProfilesGSTonesPluginSettingsHandler.h" + +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::RemoveAutomatedContent +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::RemoveAutomatedContent( + const TDesC& aOldTone ) + { + iDrmHelper->RemoveAutomatedPassive( aOldTone ); // ignore return value + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::DrmConstructL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::DrmConstructL() + { + iDrmHelper = CDRMHelper::NewL( *iCoeEnv ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPluginSettingsHandler::DrmDelete +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPluginSettingsHandler::DrmDelete() + { + delete iDrmHelper; + iDrmHelper = NULL; + } + +// End Of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewFeatures.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewFeatures.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,86 @@ +/* +* Copyright (c) 2006 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: Wraps the information about variable features of GS Tones +* View. +* +*/ + + + +// CLASS HEADER +#include "CProfilesGSTonesViewFeatures.h" + +// INTERNAL INCLUDES +#include "ProfilesDebug.h" + +// SYSTEM INCLUDES +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// Destructor +CProfilesGSTonesViewFeatures::~CProfilesGSTonesViewFeatures() + { + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesViewFeatures::ConstructL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesViewFeatures::ConstructL() + { + PRODEBUG( "CProfilesGSTonesViewFeatures::ConstructL begin" ); + CRepository* profilesLVSession = CRepository::NewLC( KCRUidProfilesLV ); + TInt error( profilesLVSession->Get( KProEngTonesViewLVFlags, + iLocalFeatures ) ); + // If the key isn't found, all the local features are disabled: + if( error && ( error != KErrNotFound ) ) + { + User::Leave( error ); + } + + CleanupStack::PopAndDestroy( profilesLVSession ); + PRODEBUG( "CProfilesGSTonesViewFeatures::ConstructL end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesViewFeatures::NewL +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesViewFeatures* + CProfilesGSTonesViewFeatures::NewL() + { + CProfilesGSTonesViewFeatures* self = new ( ELeave ) + CProfilesGSTonesViewFeatures(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesViewFeatures::IsLocalFeatureSupported +// ----------------------------------------------------------------------------- +// +TBool CProfilesGSTonesViewFeatures::IsLocalFeatureSupported( + TUint32 aFeatureId ) const + { + return ( iLocalFeatures & aFeatureId ); + } + +// End Of File + + + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewFeatures.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewFeatures.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,80 @@ +/* +* Copyright (c) 2006 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: Wraps the information about variable features of GS Tones +* View. +* +*/ + + + +#ifndef CPROFILESGSTONESVIEWFEATURES_H +#define CPROFILESGSTONESVIEWFEATURES_H + +// INCLUDES +#include + +// CONSTANTS + +// FORWARD DECLARATIONS + +// CLASS DECLARATION +/** +* Contains the information about variated features of GS Tones View. +* +* @lib ProfilesGSTonesPlugin.lib +* @since 3.1 +*/ +NONSHARABLE_CLASS( CProfilesGSTonesViewFeatures ) : public CBase + { + public: // Constructor and destructor + + static CProfilesGSTonesViewFeatures* NewL(); + + /** + * Destructor. + */ + ~CProfilesGSTonesViewFeatures(); + + public: // New functions + + /** + * Checks if the given locally variated feature is enabled. + * @param aFeatureId the feature id Tones view features as specified in + * ProfileEngineDomainCRKeys.h + * @return ETrue is the given feature is supported, false otherwise. + */ + TBool IsLocalFeatureSupported( TUint32 aFeatureId ) const; + + private: // constructors + /** + * C++ default constructor. + */ + CProfilesGSTonesViewFeatures() {}; + + /** + * Symbian constructor. + */ + void ConstructL(); + + private: // Data + + // Local features of Tones View + TInt iLocalFeatures; + + }; + +#endif // CPROFILESGSTONESVIEWFEATURES_H + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewSettings.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewSettings.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,96 @@ +/* +* Copyright (c) 2006 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: Data structure class for profile tones view settings. +* +*/ + + + +// CLASS HEADER +#include "CProfilesGSTonesViewSettings.h" + +// INTERNAL INCLUDES +#include "ProfilesGSTonesPlugin.hrh" +#include "ProfilesDebug.h" +#include "CProfilesGSTonesViewFeatures.h" + +// INCLUDES FROM PROFILES SETTINGS VIEW + +// SYSTEM INCLUDES +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// Destructor +CProfilesGSTonesViewSettings::~CProfilesGSTonesViewSettings() + { + delete iHwRmSession; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesViewSettings::ConstructL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesViewSettings::ConstructL() + { + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::ConstructL begin" ); + if( iFeatures.IsLocalFeatureSupported( KTonesViewFeatureIdHac ) ) + { + iHwRmSession = CRepository::NewL( KCRUidHWSettings ); + User::LeaveIfError( iHwRmSession->Get( KHWSettingsHearingAidMode, iHac ) ); + } + PRODEBUG( "CProfilesGSTonesPluginSettingHandler::ConstructL end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesViewSettings::NewL +// ----------------------------------------------------------------------------- +// +CProfilesGSTonesViewSettings* CProfilesGSTonesViewSettings::NewL( + CProfilesGSTonesViewFeatures& aFeatures ) + + { + CProfilesGSTonesViewSettings* self = new ( ELeave ) + CProfilesGSTonesViewSettings( aFeatures ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesViewSettings::StoreIfChangedL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesViewSettings::StoreIfChangedL( TInt aSettingId ) const + { + if( ( aSettingId == EProfileGSTonesPluginSettingHacModeId ) && + iFeatures.IsLocalFeatureSupported( KTonesViewFeatureIdHac ) ) + { + TInt currentValue( 0 ); + User::LeaveIfError( iHwRmSession->Get( KHWSettingsHearingAidMode, + currentValue ) ); + if( currentValue != iHac ) + { + User::LeaveIfError( iHwRmSession->Set( KHWSettingsHearingAidMode, + iHac ) ); + currentValue = iHac; + } + } + } + +// End Of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewSettings.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/CProfilesGSTonesViewSettings.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,93 @@ +/* +* Copyright (c) 2006 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: Data structure class for profile tones view settings. +* +*/ + + + +#ifndef CPROFILESGSTONESVIEWSETTINGS_H +#define CPROFILESGSTONESVIEWSETTINGS_H + +// INCLUDES +#include + +// CONSTANTS + +// FORWARD DECLARATIONS +class CProfilesGSTonesViewFeatures; +class CRepository; + +// CLASS DECLARATION +/** +* Data structure class for Profile GS Tones View settings. Contains only the +* settings not found in Profiles Personalization view. However, Calendar +* and Clock alert tones are not handled by this class. +* +* @lib ProfilesGSTonesPlugin.lib +* @since 3.1 +*/ +NONSHARABLE_CLASS( CProfilesGSTonesViewSettings ) : public CBase + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CProfilesGSTonesViewSettings* NewL( + CProfilesGSTonesViewFeatures& aFeatures ); + + /** + * Destructor. + */ + ~CProfilesGSTonesViewSettings(); + + public: // New functions + + /** + * Stores the value of the given setting to persistent memory if the + * value has been changed (from that found from persistent storage). + * @param aSettingId the ID of the setting (as defined in resources) to + * be checked. + */ + void StoreIfChangedL( TInt aSettingId ) const; + + private: + /** + * C++ constructor. + */ + CProfilesGSTonesViewSettings( CProfilesGSTonesViewFeatures& aFeatures ) + : iFeatures( aFeatures ) {}; + + /** + * Symbian constructor. + */ + void ConstructL(); + + public: // Data + + // HAC setting + TBool iHac; + + // HW Resource Manager central repository + // Note, this is NULL if HAC is not supported: + CRepository* iHwRmSession; + + // Reference to the variable features wrapper + CProfilesGSTonesViewFeatures& iFeatures; + }; + +#endif // CPROFILESGSTONESVIEWSETTINGS_H + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/MProfilesGSTonesPluginItemDataInterface.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/MProfilesGSTonesPluginItemDataInterface.h Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,57 @@ +/* +* Copyright (c) 2002 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: Interface to the actual storage used for saving the data. +* +*/ + + + +#ifndef MPROFILESGSTONESPLUGINITEMDATAINTERFACE_H +#define MPROFILESGSTONESPLUGINITEMDATAINTERFACE_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Interface to the actual storage used for saving the data. +* +* @lib ProfilesGSTonesPlugin.dll +* @since 3.1 +*/ +class MProfilesGSTonesPluginItemDataInterface + { + + public: // New functions + + /** + * Returns the data currently saved in the storage. + * @return the data currently saved in the storage. + */ + virtual const TDesC& ItemData() = 0; + + /** + * Sets the data in the storage. + * @param aDataBuf contains the data to be saved. + */ + virtual void SetItemDataL( const TDesC& aDataBuf ) = 0; + + }; + +#endif // MPROFILESGSTONESPLUGINITEMDATAINTERFACE_H + +// End of File + + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/ProfilesGSTonesPlugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/ProfilesGSTonesPlugin.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,393 @@ +/* +* Copyright (c) 2005 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: Cpp file for plugin. +* +*/ + + +// Includes +#include "ProfilesGSTonesPlugin.h" + +#include "ProfilesUID.h" +#include "CProfilesGSTonesPluginSettingsHandler.h" +#include "ProfilesDebug.h" +#include "ProfilesGSTonesPlugin.hrh" +#include +#include + +// Includes from Profiles Settings View: +#include +#include + +// Includes from Profiles Engine: +#include +#include +#include +#include "ProfilesVariant.hrh" + +// Includes from GS framework: +#include +#include + +// External includes +#include +#include +#include +#include +#include +#include +#include +#include + +class CProfileIndexHandler; +class CProfileTabHandler; + +namespace { +// Constants + const TUid KProfilesGSTonesPluginUid = + { IMPLEMENTATION_UID_PROFILES_GS_TONES_PLUGIN }; + + _LIT( KProfilesGSTonesPluginResourceFileName, + "z:ProfilesGSTonesPluginRsc.rsc" ); +} + +// CLASS DECLARATION + + +/****************************************************************************** + * class CProfileGSTonesTopControl + ******************************************************************************/ + + +CProfileGSTonesTopControl* CProfileGSTonesTopControl::NewL( CCoeControl* aFocusControl ) + { + CProfileGSTonesTopControl* self = new ( ELeave ) CProfileGSTonesTopControl(); + self->iFocusControl = aFocusControl; + return self; + } + +void CProfileGSTonesTopControl::FocusChanged( TDrawNow aDrawNow ) + { + // Not calling super::FocusChanged is intentional + if( iFocusControl ) + { + iFocusControl->SetFocus( IsFocused(), aDrawNow ); + } + } + + +/****************************************************************************** + * class CProfilesGSTonesPlugin + ******************************************************************************/ + + + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::CProfilesGSTonesPlugin() +// --------------------------------------------------------------------------- +// +CProfilesGSTonesPlugin::CProfilesGSTonesPlugin() + : iResourceLoader( *iCoeEnv ) + { + } + + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::~CProfilesGSTonesPlugin() +// --------------------------------------------------------------------------- +// +CProfilesGSTonesPlugin::~CProfilesGSTonesPlugin() + { + DoDeactivate(); + delete iEngineHandler; + iResourceLoader.Close(); + delete iNotifier; + } + + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::ConstructL() +// --------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::ConstructL() + { + PRODEBUG( "CProfilesGSTonesPlugin::ConstructL() begin" ); + // Find the resource file + TParse parse; + parse.Set( KProfilesGSTonesPluginResourceFileName, + &KDC_RESOURCE_FILES_DIR, NULL ); + TFileName fileName( parse.FullName() ); + + // Get language of resource file + BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName ); + + // Open resource file + iResourceLoader.OpenL( fileName ); + + PRODEBUG( "CProfilesGSTonesPlugin::ConstructL() before BaseConstructL call" ); + BaseConstructL( R_PROFILES_GS_TONES_VIEW ); // CSI: 9 # The resource file must be opened before this call + + iNotifier = CProfileChangeNotifyHandler::NewL( this ); + iEngineHandler = CProfileEngineHandler::NewL(); + iPreviousProfile = iEngineHandler->Engine()->ActiveProfileId(); + PRODEBUG( "CProfilesGSTonesPlugin::ConstructL() end" ); + } + + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::NewL() +// --------------------------------------------------------------------------- +// +CProfilesGSTonesPlugin* CProfilesGSTonesPlugin::NewL( TAny* /*aInitParams*/ ) + { + CProfilesGSTonesPlugin* self = new(ELeave) CProfilesGSTonesPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +// --------------------------------------------------------------------------- +// CGSParentPlugin::Id() +// --------------------------------------------------------------------------- +// +TUid CProfilesGSTonesPlugin::Id() const + { + PRODEBUG( "CProfilesGSTonesPlugin::Id" ); + return KProfilesGSTonesPluginUid; + } + + +// --------------------------------------------------------------------------- +// CGSParentPlugin::DoActivateL() +// --------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::DoActivateL + ( const TVwsViewId& /* aPrevViewId */, + TUid /* aCustomMessageId */, + const TDesC8& /* aCustomMessage */ ) + { + PRODEBUG( "CProfilesGSTonesPlugin::DoActivateL begin" ); + if ( !iContainer ) + { + iSettingsHandler = + CProfilesGSTonesPluginSettingsHandler::NewL( iCoeEnv ); + + iContainer = CProfileSettingsContainer::NewL( + *this, *iEngineHandler, *iSettingsHandler, (CProfileIndexHandler*) NULL, + (CProfileTabHandler*) NULL, (CAknTitlePane*) NULL, + R_PROFILE_GS_TONES_VIEW_SETTING_ITEM_LIST ); + + iTopControl = CProfileGSTonesTopControl::NewL( iContainer ); + + // Set the title pane text + CAknTitlePane* titlePane = static_cast< CAknTitlePane* >( + StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + HBufC* title = StringLoader::LoadLC( R_PROFILES_GS_TONES_VIEW_TITLE ); + titlePane->SetTextL( *title ); + CleanupStack::PopAndDestroy( title ); + + iNaviPaneContainer = + CProfileNaviPaneContainer::NewL( *StatusPane(), *iEngineHandler ); + // Set the name of the active profile to navi pane + iNaviPaneContainer->SetNaviPaneTextL(); + + AppUi()->AddToViewStackL( *this, iContainer ); + // Top control is always on top as it listens to focus changes (which + // will be routed to container to adapt highlight animation to focus) + AppUi()->AddToStackL( *this, iTopControl ); + + iContainer->MakeVisible( ETrue ); + } + PRODEBUG( "CProfilesGSTonesPlugin::DoActivateL end" ); + } + +// --------------------------------------------------------------------------- +// CGSParentPlugin::DoDeactivate() +// --------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::DoDeactivate() + { + PRODEBUG( "CProfilesGSTonesPlugin::DoDeactivateL begin" ); + delete iNaviPaneContainer; + iNaviPaneContainer = NULL; + + if ( iTopControl ) + { + AppUi()->RemoveFromStack( iTopControl ); + delete iTopControl; + iTopControl = NULL; + } + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + delete iSettingsHandler; + iSettingsHandler = NULL; + PRODEBUG( "CProfilesGSTonesPlugin::DoDeactivateL end" ); + } + +// ---------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::HandleCommandL +// +// Handles commands directed to this class. +// ---------------------------------------------------------------------------- +void CProfilesGSTonesPlugin::HandleCommandL( TInt aCommand ) + { + PRODEBUG1( "CProfilesGSTonesPlugin::HandleCommandL(%d) begin", aCommand ); + CAknViewAppUi* appUi = AppUi(); + switch ( aCommand ) + { + case EAknSoftkeyBack: + appUi->ActivateLocalViewL( KGSPrslnPluginUid ); + break; + case EProfilesGsTonesCmdChange: + case EAknSoftkeyChange: + PRODEBUG( "CProfilesGSTonesPlugin::HandleCommandL before EditItemL" ); + iContainer->EditItemL( + iContainer->SettingItemArray()->ItemIndexFromVisibleIndex( + iContainer->ListBox()->CurrentItemIndex() ), + ( aCommand == EProfilesGsTonesCmdChange ) ); + PRODEBUG( "CProfilesGSTonesPlugin::HandleCommandL after EditItemL" ); + break; + case EAknCmdHelp: + { + if( FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + HlpLauncher::LaunchHelpApplicationL( + iEikonEnv->WsSession(), appUi->AppHelpContextL() ); + } + break; + } + default: + appUi->HandleCommandL( aCommand ); + break; + } + PRODEBUG( "CProfilesGSTonesPlugin::HandleCommandL end" ); + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::DynInitMenuPaneL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::DynInitMenuPaneL( + TInt aResourceId, CEikMenuPane* aMenuPane ) + { + if( aResourceId == R_PROFILES_GS_OPTIONS_MENUPANE ) + { + if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) ) + { + // Help is not supported. Hide Help from Options menu + aMenuPane->SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + } + +// ========================= From CGSPluginInterface ================== + + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::GetCaptionL() +// --------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::GetCaptionL( TDes& aCaption ) const + { + PRODEBUG( "CProfilesGSTonesPlugin::GetCaptionL begin" ); + // The resource file is already opened by iResourceLoader. + HBufC* result = StringLoader::LoadL( R_PROFILES_GS_TONES_VIEW_CAPTION ); + aCaption.Copy( *result ); + delete result; + PRODEBUG( "CProfilesGSTonesPlugin::GetCaptionL end" ); + } + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::PluginProviderCategory() +// --------------------------------------------------------------------------- +// +TInt CProfilesGSTonesPlugin::PluginProviderCategory() const + { + PRODEBUG( "CProfilesGSTonesPlugin::PluginProviderCategory" ); + return KGSPluginProviderInternal; + } + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::ItemType() +// --------------------------------------------------------------------------- +// +TGSListboxItemTypes CProfilesGSTonesPlugin::ItemType() + { + PRODEBUG( "CProfilesGSTonesPlugin::ItemType" ); + return EGSItemTypeSetting; + } + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::UpdateClientRect() +// --------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::UpdateClientRect() + { + PRODEBUG( "CProfilesGSTonesPlugin::UpdateClientRect" ); + iContainer->SetRect( ClientRect() ); + } + +// --------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::View() +// --------------------------------------------------------------------------- +// +CAknView& CProfilesGSTonesPlugin::View() + { + PRODEBUG( "CProfilesGSTonesPlugin::View" ); + return *this; + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::HandleActiveProfileEventL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::HandleActiveProfileEventL( + TProfileEvent aProfileEvent, TInt aProfileId ) + { + PRODEBUG( "CProfilesGSTonesPlugin::HandleActiveProfileEventL" ); + if( ( aProfileEvent == EProfileNewActiveProfile ) && + ( aProfileId != iPreviousProfile ) && + iNaviPaneContainer ) + { + // Active profile has changed. Change active profile name in navi pane. + iNaviPaneContainer->SetNaviPaneTextL(); + ShowInfoNoteL( R_PROFILES_GS_TONES_VIEW_UPDATED_NOTE ); + iPreviousProfile = aProfileId; + } + } + +// ----------------------------------------------------------------------------- +// CProfilesGSTonesPlugin::ShowInfoNoteL +// ----------------------------------------------------------------------------- +// +void CProfilesGSTonesPlugin::ShowInfoNoteL( TInt aResourceId ) + { + if( IsForeground() ) + { + HBufC* infoText = StringLoader::LoadLC( aResourceId ); + CAknGlobalNote* note = CAknGlobalNote::NewLC(); + note->ShowNoteL( EAknGlobalInformationNote, *infoText ); + + CleanupStack::PopAndDestroy( 2, infoText ); + } + } + +// End of File + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/ProfilesGSTonesPlugin/src/ProfilesGSTonesPluginImplementationTable.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/ProfilesGSTonesPlugin/src/ProfilesGSTonesPluginImplementationTable.cpp Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2005 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: ECOM prxy table for plugin. +* +*/ + + +// System includes +#include +#include + +// Internal includes +#include "ProfilesGSTonesPlugin.h" +#include "ProfilesUID.h" + +// Constants +const TImplementationProxy KProfilesGSTonesPluginImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY( IMPLEMENTATION_UID_PROFILES_GS_TONES_PLUGIN, + CProfilesGSTonesPlugin::NewL ) + }; + + +// --------------------------------------------------------------------------- +// ImplementationGroupProxy +// Gate/factory function +// +// --------------------------------------------------------------------------- +// +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt& aTableCount ) + { + aTableCount = sizeof( KProfilesGSTonesPluginImplementationTable ) + / sizeof( TImplementationProxy ); + return KProfilesGSTonesPluginImplementationTable; + } + + +// End of File diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/rom/Profile.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/rom/Profile.iby Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,47 @@ +/* +* 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: Iby files for Profile. +* +*/ +#ifndef __PROFILE_IBY__ +#define __PROFILE_IBY__ + +S60_APP_EXE(ProfileApp) +S60_APP_AIF_ICONS(ProfileApp) +S60_APP_AIF_RSC(ProfileApp) + +file=ABI_DIR\BUILD_DIR\profilesettingsview.dll SHARED_LIB_DIR\profilesettingsview.dll + +#ifdef RD_GS_RENOVATION + +#ifndef RD_CONTROL_PANEL +// GS Tones View Plugin: +ECOM_PLUGIN(profilesgstonesplugin.dll,1020729B.rsc) +#endif // RD_CONTROL_PANEL + +#ifdef RD_CONTROL_PANEL +// GS Profiles Plugin: +ECOM_PLUGIN(GSProfilesPlugin.dll,10283386.rsc) +data=DATAZ_\BITMAP_DIR\gsprofilesplugin.mif BITMAP_DIR\gsprofilesplugin.mif +#endif // RD_CONTROL_PANEL + +#endif // RD_GS_RENOVATION + +ECOM_PLUGIN(profileaiwprovider.dll,10281F18.rsc) + +//Configration file of PSMProfilesPlugin +data=ZPRIVATE\2000B187\10283386.xml private\2000B187\10283386.xml + +#endif // PROFILE_IBY + diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/rom/ProfileResources.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/rom/ProfileResources.iby Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,45 @@ +/* +* 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: Iby files for Profile. +* +*/ +#ifndef __PROFILE_RESOURCES_IBY__ +#define __PROFILE_RESOURCES_IBY__ + + +S60_APP_CAPTION(profileapp) + +//Resource file(s) for ProfileApp + +data=DATAZ_\APP_RESOURCE_DIR\profileapp.rsc APP_RESOURCE_DIR\profileapp.rsc + +data=ZRESOURCE\profilesettingsview.rsc RESOURCE_FILES_DIR\profilesettingsview.rsc + +#ifdef RD_GS_RENOVATION + +#ifndef RD_CONTROL_PANEL +// Resource file for GS Tones View plugin +data=ZRESOURCE\profilesgstonespluginrsc.rsc RESOURCE_FILES_DIR\profilesgstonespluginrsc.rsc +#endif // RD_CONTROL_PANEL + +#ifdef RD_CONTROL_PANEL +// Resource file for GS Profiles plugin +data=ZRESOURCE\GSProfilesPluginRsc.rsc RESOURCE_FILES_DIR\GSProfilesPluginRsc.rsc +#endif // RD_CONTROL_PANEL + +#endif // RD_GS_RENOVATION + +data=ZRESOURCE\profileaiwproviderresource.rsc RESOURCE_FILES_DIR\profileaiwproviderresource.rsc + + +#endif diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/tsrc/public/basic/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/tsrc/public/basic/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,22 @@ +/* +* Copyright (c) 2007 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: This file provides the information required for building the +* Profiles tests +* +*/ + +//////////////////////////////////////////////////////////// +// bld.inf + +#include "../../../../ProfileApp/tsrc/public/basic/group/bld.inf" diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/Profiles/tsrc/public/basic/rom/Profiles_ats3.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/Profiles/tsrc/public/basic/rom/Profiles_ats3.iby Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,28 @@ +/* +* Copyright (c) 2007 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: +* ROM image definition for Profiles automated tests +* +* +*/ + +#ifndef __PROFILES_ATS3_IBY__ +#define __PROFILES_ATS3_IBY__ + +// THESE ARE INCLUDED IN PROFILESAPPLICATION_ATS3_IBY + +// Profiles rom files +//file=ABI_DIR\BUILD_DIR\T_ProfileSettingsView.dll SHARED_LIB_DIR\T_ProfileSettingsView.dll + +#endif \ No newline at end of file diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,19 @@ +/* +* Copyright (c) 2006 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: This file provides the information required for building ProfilesApplicaton. +* +*/ + + +#include "../Profiles/Group/bld.inf" diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/tsrc/public/basic/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/tsrc/public/basic/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,22 @@ +/* +* Copyright (c) 2007 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: This file provides the information required for building the +* ProfilesApplication tests +* +*/ + +//////////////////////////////////////////////////////////// +// bld.inf + +#include "../../../../Profiles/tsrc/public/basic/group/bld.inf" diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/tsrc/public/basic/rom/ProfilesApplication_ats3.iby --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/tsrc/public/basic/rom/ProfilesApplication_ats3.iby Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2007 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: +* Top level ROM image definition for ProfilesApplication automated tests +* +* +*/ + + +#ifndef __PROFILESAPPLICATION_ATS3_IBY__ +#define __PROFILESAPPLICATION_ATS3_IBY__ + +// Profiles rom files +file=ABI_DIR\BUILD_DIR\T_ProfileSettingsView.dll SHARED_LIB_DIR\T_ProfileSettingsView.dll + +#endif diff -r b7fa36b488f8 -r cd54903d48da profilesapplication/tsrc/public/basic/test.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/profilesapplication/tsrc/public/basic/test.xml Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,91 @@ + + + ProfilesApplication 5.0 Automated Tests + + + + + + + + + + + + + + + + + + makedir + + + + + + + execute + + + + + + + makedir + + + + + + + execute + + + + + + + + + + execute + + + + + + + + fetch-log + + + + + + + + + + + ATS3Drop/images/sydo_ProfilesApplication_ats3_image.fpsx + ATS3Drop/images/sydo_ProfilesApplication_ats3_image_udaerase.fpsx + + + + SendEmailAction + + + + + + + + + + FileStoreAction + + + + + diff -r b7fa36b488f8 -r cd54903d48da sysdef_1_4_0.dtd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysdef_1_4_0.dtd Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r b7fa36b488f8 -r cd54903d48da tsrc/group/bld.inf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tsrc/group/bld.inf Wed Sep 01 12:30:29 2010 +0100 @@ -0,0 +1,24 @@ +/* +* Copyright (c) 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: +* This file provides the information required for building +* Profile ADO API test cases. +* +*/ + +//////////////////////////////////////////////////////////// +// bld.inf +// Part of EUnit library test + +#include "../../profile_plat/profiles_settings_view_api/tsrc/group/bld.inf"