--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/EikStd/srvuiinc/eikkeysoundserver.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2002-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: EikSrv keysound server.
+*
+*/
+
+#ifndef __EIKKEYSOUNDSERVER_H__
+#define __EIKKEYSOUNDSERVER_H__
+
+#include <e32base.h>
+#include <mdaaudiosampleplayer.h>
+#include <mdaaudiotoneplayer.h>
+#include <mdaaudiosampleeditor.h>
+#include "eikkeysoundmap.h"
+#include "eikkeysound.h"
+#include <coecntrl.h>
+#include <cenrepnotifyhandler.h>
+#include "EikSrvUiConfig.hrh"
+
+#include <ataudioeventapi.h>
+#include <mateventcompleteobserver.h>
+
+class CATAudioEventAPI;
+class CEikSoundInfo;
+class CAknToneSoundInfo;
+class CAknFileSoundInfo;
+class CAknSequenceSoundInfo;
+class TAknSoundID;
+class CAknEikAudioToneObserver;
+
+// For debugging purposes. Traces for EikKeySoundServer are enabled or disabled.
+#if defined(_DEBUG) && defined(EIKKSS_ENABLE_TRACES)
+ #define LOGTEXT(AAA) RDebug::Print(AAA)
+ #define LOGTEXT1(AAA,BBB) RDebug::Print(AAA,BBB)
+ #define LOGTEXT2(AAA,BBB,CCC) RDebug::Print(AAA,BBB,CCC)
+ #define LOGTEXT3(AAA,BBB,CCC,DDD) RDebug::Print(AAA,BBB,CCC,DDD)
+#else
+ #define LOGTEXT(AAA)
+ #define LOGTEXT1(AAA,BBB)
+ #define LOGTEXT2(AAA,BBB,CCC)
+ #define LOGTEXT3(AAA,BBB,CCC,DDD)
+#endif
+
+// Anim Dll capture control.
+class CAknAnimKeySoundControl : public CCoeControl
+ {
+public:
+ CAknAnimKeySoundControl();
+ void ConstructL(RWindowGroup* aParent);
+ };
+
+
+// Anim Dll Interface.
+NONSHARABLE_CLASS(RAknAnimKeySound) : public RAnim
+ {
+public:
+ RAknAnimKeySound(RAnimDll &aAnimDll);
+ void ConstructL(RWindowGroup* aParent);
+ void Close();
+private:
+ CAknAnimKeySoundControl* iKeySoundControl;
+ };
+
+
+// Storage for a single sound. Base class.
+NONSHARABLE_CLASS(CEikSoundInfo) : public CBase
+ {
+public:
+ enum TVolumeSetting
+ {
+ EKeypadVolumeOff = 0,
+ EKeypadVolumeQuiet,
+ EKeypadVolumeMedium,
+ EKeypadVolumeLoud,
+ ESoundVolume0 = EKeypadVolumeOff,
+ ESoundVolume1 = EKeypadVolumeOff + 1,
+ ESoundVolume2 = EKeypadVolumeOff + 2,
+ ESoundVolume3 = EKeypadVolumeOff + 3,
+ ESoundVolume4 = EKeypadVolumeOff + 4,
+ ESoundVolume5 = EKeypadVolumeOff + 5,
+ ESoundVolume6 = EKeypadVolumeOff + 6,
+ ESoundVolume7 = EKeypadVolumeOff + 7,
+ ESoundVolume8 = EKeypadVolumeOff + 8,
+ ESoundVolume9 = EKeypadVolumeOff + 9
+ };
+public:
+ CEikSoundInfo(TInt aPriority, TInt aPreference);
+ virtual ~CEikSoundInfo();
+ virtual void PlayL() = 0;
+ virtual void Stop() = 0;
+ virtual void SetVolume(TVolumeSetting aVolume) = 0;
+ TInt Preference();
+ TVolumeSetting Volume();
+ virtual void DoPlay() = 0;
+protected:
+ TInt iPriority;
+ TInt iPreference;
+ TVolumeSetting iVolume;
+ };
+
+
+// Key sound server
+NONSHARABLE_CLASS(CEikKeySoundServer) :
+ public CServer2,
+ public MCenRepNotifyHandlerCallback,
+ public MATEventCompleteObserver
+ {
+public:
+ static TInt LaunchServer(TThreadId& aThreadId);
+ static CEikKeySoundServer* NewLC();
+ ~CEikKeySoundServer();
+
+ // Methods called from session
+ void InitL(const RMessage2& aMessage);
+ void PlaySid(TInt aSid, TBool aPlaySelf);
+ void StopSid(TInt aSid);
+ void SetVolumeForPreferenceType(TInt aPreference, CEikSoundInfo::TVolumeSetting aVolume);
+
+ void SetDisabledScanCode( TInt aScanCode );
+ TInt DisabledScanCode();
+
+ // From MCenRepNotifyHandlerCallback
+ void HandleNotifyInt(TUint32 aId, TInt aNewValue);
+
+ inline TBool ContextLocked()
+ {
+ return iContextLocked;
+ }
+ inline void SetContextLocked(TBool aLock)
+ {
+ iContextLocked = aLock;
+ }
+
+ //Method for AT Audio Server callback
+ void Complete( TInt aError, TAudioThemeEvent aEvent);
+private:
+ CEikKeySoundServer();
+ void ConstructL();
+ // from CServer2
+ virtual CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+
+public:
+ TBool iInit;
+ CArrayPtrFlat<CEikSoundInfo>* iSoundList;
+ CArrayFixFlat<TAknSoundID>* iSidList;
+ CEikKeySoundMap* iDefaultSoundMap;
+ CEikKeySoundStack* iCurrentSoundStack;
+ CEikSoundInfo::TVolumeSetting iKeypadVolume;
+ CCenRepNotifyHandler* iProfilesNotifyHandler;
+ CRepository* iProfilesRepository;
+ TBool iContextLocked;
+
+ TInt iDisabledScanCode;
+
+ CCenRepNotifyHandler *iWarningToneEnableHandler;
+ TInt iWarningToneEnabled;
+
+ CATAudioEventAPI* iATSoundServerAPI;
+ };
+
+
+// Key sound session
+NONSHARABLE_CLASS(CEikKeySoundSession) : public CSession2
+ {
+public:
+ static CEikKeySoundSession* NewL(CEikKeySoundServer* aServer);
+ ~CEikKeySoundSession();
+ void DispatchMessageL(const RMessage2& aMessage);
+ // from CShareableSession
+ virtual void ServiceL(const RMessage2& aMessage);
+private:
+ CEikKeySoundSession(CEikKeySoundServer* aServer);
+ void ConstructL();
+ void AddSoundIdBufferL(const RMessage2& aMessage);
+ void RemoveSids(TInt aUid);
+ void AddToneSidL(const TAknSoundID& aSoundID, CAknToneSoundInfo* aSoundInfo);
+ void AddFileSidL(const TAknSoundID& aSoundID, CAknFileSoundInfo* aSoundInfo,
+ const TDesC& aFileName);
+ void AddSequenceSidL(const TAknSoundID& aSoundID, CAknSequenceSoundInfo* aSoundInfo);
+ void PushContextL(const RMessage2& aMessage);
+ void PopContext();
+private:
+ CEikKeySoundServer* iServer;
+ CEikKeySoundStack* iSoundStack;
+ TInt iClientUid;
+ TBool iOwnsDefaultSounds;
+ TBool iHasLockedContext;
+ };
+
+
+// Specialized base class for synthetized sounds (tones and sequences).
+NONSHARABLE_CLASS(CAknSynthSoundInfo) : public CEikSoundInfo
+ {
+public:
+ CAknSynthSoundInfo(TInt aPriority, TInt aPreference);
+ virtual ~CAknSynthSoundInfo();
+ void InitL();
+ virtual void PlayL();
+ virtual void Stop();
+ virtual void SetVolume(TVolumeSetting aVolume);
+ virtual void DoPlay();
+private:
+ virtual void Prepare();
+ void DoSetVolume(CMdaAudioToneUtility* aTonePlayer);
+protected:
+ CAknEikAudioToneObserver* iToneObserver;
+ CMdaAudioToneUtility* iTonePlayer;
+ TBool iPlayedStatically;
+ };
+
+
+// Tone sound info.
+NONSHARABLE_CLASS(CAknToneSoundInfo) : public CAknSynthSoundInfo
+ {
+public:
+ CAknToneSoundInfo(TInt aPriority, TInt aPreference);
+ virtual ~CAknToneSoundInfo();
+private:
+ virtual void Prepare();
+public:
+ TInt iFrequency;
+ TTimeIntervalMicroSeconds iMs;
+ };
+
+
+// Sequence sound info.
+NONSHARABLE_CLASS(CAknSequenceSoundInfo) : public CAknSynthSoundInfo
+ {
+public:
+ CAknSequenceSoundInfo(TInt aPriority, TInt aPreference);
+ virtual ~CAknSequenceSoundInfo();
+ void ReadSequenceL(RReadStream& aStream);
+private:
+ virtual void Prepare();
+public:
+ HBufC8* iSequence;
+ };
+
+
+// File sound info.
+NONSHARABLE_CLASS(CAknFileSoundInfo) :
+ public CEikSoundInfo,
+ public MMdaAudioPlayerCallback,
+ public MMdaObjectStateChangeObserver
+ {
+public:
+ CAknFileSoundInfo(TInt aPriority, TInt aPreference);
+ virtual ~CAknFileSoundInfo();
+ void InitL(const TDesC& aFileName, CMdaServer* aMdaServer);
+ virtual void PlayL();
+ virtual void Stop();
+ virtual void SetVolume(TVolumeSetting aVolume);
+ // From MMdaAudioPlayerCallback
+ virtual void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
+ virtual void MapcPlayComplete(TInt aError);
+ virtual void DoPlay();
+private:
+ void LoadAudioDataL(RFs& aFs, const TDesC& aFileName, TDes8& aDes);
+ void DoSetVolume(CMdaAudioPlayerUtility* aAudioPlayer);
+
+ // From MMdaObjectStateChangeObserver
+ virtual void MoscoStateChangeEvent(CBase* aObject, TInt aPreviousState, TInt aCurrentState,
+ TInt aErrorCode);
+public:
+ CMdaAudioPlayerUtility* iAudioPlayer;
+ HBufC8* iAudioData;
+private:
+ TBool iPlaying;
+ TBool iPrepared;
+ CMdaServer* iMdaServer;
+ };
+
+
+class TAknSoundID
+ {
+public:
+ TInt iAppUid;
+ TUint iSid;
+ CEikSoundInfo* iSoundInfo; // reference only
+ };
+
+
+class TAknSoundMessageInfo
+ {
+public:
+ TInt iSid;
+ TUint8 iFile;
+ TInt iFrequency;
+ TInt iMs;
+ };
+
+#endif