diff -r 000000000000 -r 5e5d6b214f4f instantmessagesalert/inc/cimalertmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/instantmessagesalert/inc/cimalertmanager.h Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,312 @@ +/* +* 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 class gives interface for playing IM message alert +* +*/ + +#ifndef CIMALERTMANAGER_H +#define CIMALERTMANAGER_H + +// INCLUDES +#include "mimalertnotifierkeyobserver.h" +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "mimalertinterface.h" + +// FORWARD DECLARATIONS +class CFLDRingingTonePlayer; +class MProfileEngine; +class MIMAlertManagerObserver; +class MIMAlertNotifierInterface; +class MProfile; +class CHWRMVibra; +class MVIMPSTSettingsStore; +class Ctestinstantmsgalert; //For Test code + +#include "mimalertinterface.h" + +const TInt KIMVibraDuration = 1000; // in milliseconds + +/** + * This class gives interface to play + * simple sounds + * + * @lib chat.app + * @since 1.2 + */ +class CIMAlertManager + : public CBase, + public MMdaAudioPlayerCallback, + public MIMAlertNotifierKeyObserver, + public MMdaAudioToneObserver, + public MCenRepNotifyHandlerCallback, + public MIMAlertInterface + { + protected: // Enumerations + + enum TAudioPlayerStatus + { + EAudioPlayerNotCreated, + EAudioPlayerInitializing, + EAudioPlayerReady, + EAudioPlayerPlaying, + EAudioPlayerInitialized + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * param aServiceId, service id to get the tone to be played. + */ + IMPORT_C static CIMAlertManager* NewL(); + + /** + * Destructor. + */ + virtual ~CIMAlertManager(); + + public: // New functions + + /** + * Starts playing the tone that has been set + * @since 1.2 + */ + IMPORT_C void PlayL(TUint32 aServiceId); + + /** + * Stops playing + * @since 1.2 + */ + IMPORT_C void Stop(); + + /** + * Set the volume level on which the sound is played + * If this method is not called, player uses the setting + * in active profile. + * @param aVolume The volume level + */ + IMPORT_C void SetVolume( TInt aVolume ); + + /** + * Sets the ringing type + * If this method is not called, player uses the setting + * in active profile. + * @param aRingingType The ringing type (see enum TProfileRingingType) + */ + IMPORT_C void SetRingingType( TProfileRingingType aRingingType ); + + /** + * Sets vibrating alert on or off. + * If this method is not called, player uses the + * setting in active profile. + * @param aVibra True: Vibra is on. False: Vibra is off. + */ + IMPORT_C void SetVibra( TBool aVibra ); + + /** + * Adds observer, which is informed when playing is completed + * @param aObserver observing object + */ + IMPORT_C void AddObserverL( const MIMAlertManagerObserver* aObserver ); + + /** + * Removes observer + * @param aObserver observing object + */ + IMPORT_C void RemoveObserver( const MIMAlertManagerObserver* aObserver ); + + private: // constructors + + /** + * C++ default constructor. + * @see CIMAlertManager::NewL + */ + CIMAlertManager(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: + /** + * Does the actual sound playing + * @since 2.1 + */ + void DoPlayL(TUint32 aServiceId); + + /** + * Starts playing the sound file + * @param aFileName The file to be processed + */ + void ProcessFileL( const TDesC& aFileName ); + + /** When audioplayer is ready, set its ringing type + * @param aRingingType The ringing type (see enum TRingingTypes) + */ + void DoSetRingingType( TInt aRingingType ); + + /** + * Converts volume from 1 to 10 to audio driver understandable value. + * @param aVolume Volume level to be converted. + * @return Returns converted volume level + */ + TInt ConvertVolume( TInt aVolume ); + + /** + * Passess error to current activescheluder if + * error = KErrNoMemory or KErrDiskFull + */ + void HandleError( TInt aError ); + + /** + * Gets tone file name from SAP settings + * @param aToneFileName After the call this will + * contain the tone file name + */ + void GetToneFileNameL( TDes& aToneFileName ,TUint32 aServiceId); + + private: // Methods derived from MMdaAudioPlayerCallback + + /** + * Derived from MMdaAudioPlayerCallback + * This method is called when the audio player initialisation is ready + * @see MMdaAudioPlayerCallback + */ + void MapcInitComplete( TInt aError, + const TTimeIntervalMicroSeconds& aDuration ); + + /** + * Derived from MMdaAudioPlayerCallback + * This method is called when the audio player has finished playing + * @see MMdaAudioPlayerCallback + */ + void MapcPlayComplete( TInt aError ); + + private: // Methods derived from MMdaAudioToneObserver + + /** + * Derived from MMdaAudioToneObserver + * This method is called when the tone player initialisation is ready + * @see MMdaAudioToneObserver + */ + virtual void MatoPrepareComplete( TInt aError ); + + /** + * Derived from MMdaAudioToneObserver + * This method is called when the tone player has finished playing + * @see MMdaAudioToneObserver + */ + virtual void MatoPlayComplete( TInt aError ); + + private: // Methods derived from MIMAlertNotifierKeyObserver + + /** + * Derived from MIMAlertNotifierKeyObserver + * Receive a notification from publish and subscribe keys + */ + void HandleKeyChange( TUpdatedKey& aUpdatedValues ); + + private: // Methods derived from MCenRepNotifyHandlerCallback + /** + * Derived from MCenRepNotifyHandlerCallback + * Receive a notification from central repository server + */ + void HandleNotifyInt(TUint32 aId, TInt aNewValue); + + private: // Data + + + // Doesn't own. Profile API if silent then there is no sounds + MProfileEngine* iProfileApi; + + // Used to play other audio files than ringing tones. Owned. + CMdaAudioPlayerUtility* iAudioPlayer; + TAudioPlayerStatus iAudioPlayerStatus; + + // Used to play ringing tones. Owned + CMdaAudioToneUtility* iTonePlayer; + TAudioPlayerStatus iTonePlayerStatus; + + // Used for follow if user stops audio playing, + // also for profile changes in volume level and vibrating alert + CCenRepNotifyHandler* iRingingVolumeNotifyHandler; + CCenRepNotifyHandler* iRingingTypeNotifyHandler; + CCenRepNotifyHandler* iVibraNotifyHandler; + + CRepository* iProfilesRepository; + CRepository* iVibraRepository; + + // Used to follow tone quit key + MIMAlertNotifierInterface* iNotifierAPI; + + // ringing settings + TInt iRingingVolume; + TInt iRingingType; + TBool iVibra; + + // Used when checking audio file type + RApaLsSession iApaSession; + + // Audiomanager observers + RPointerArray iObservers; + + // Used to keep track if current sound is default sound. + TBool iIsPlayingDefaultIMSound; + + // Tone file name + HBufC* iToneFileName; + + // File session for file operations + RFs iFs; + + // currently active profile (ownership transferred) + MProfile* iActiveProfile; + + // owned, vibra API + CHWRMVibra* iVibrator; + + // ETrue if Always Online is active, invoked from IM Launcher + TBool iIMLauncherInvoked; + + // Beep once ringing tone + HBufC* iBeepRingingTone; + + // owns. Access to central repository + CRepository* iCenRep; + + // ETrue if IMPSCUI Session Id should be preserved upon exit + TBool iPreserveSessionIdInExit; + + //service id + TUint32 iServiceId; + + MVIMPSTSettingsStore* iSettingsStore; + //for test cases + friend class Ctestinstantmsgalert; + }; + +#endif // CIMALERTMANAGER_H + +// End of File