diff -r e5618cc85d74 -r 6c158198356e javauis/nokiasound/src/cmidsound.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/nokiasound/src/cmidsound.cpp Thu Aug 19 09:48:13 2010 +0300 @@ -0,0 +1,313 @@ +/* +* Copyright (c) 2006-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: Wrapper for CMIDClip and CMIDTone class initialisations. +* +*/ + + +#include +#include +#include + +#include "CMIDSound.h" +#include "CMIDTone.h" +#include "CMIDClip.h" +#include "logger.h" +#include "fs_methodcall.h" +#include "com_nokia_mid_sound_Sound.h" + + +CMIDSound* CMIDSound::NewL(JNIEnv& aJni, jobject aPeer) +{ + JELOG2(EJavaUI); + + CMIDSound* self = new CMIDSound(); + if (self != NULL) + { + self->attachToVm(aJni, aPeer); + } + return self; +} + +CMIDSound::~CMIDSound() +{ + delete iMIDSound; + + // CENREP + if (iProfileListener) + { + iProfileListener->StopListening(); + delete iProfileListener; + } + delete iRepository; +} + +void CMIDSound::HandleNotifyInt(TUint32 aId, TInt aNewValue) +{ + JELOG2(EJavaUI); + if (aId == KProEngActiveWarningTones) + { + if (iMIDSound) + { + iMIDSound->SetVolume(aNewValue == 0 ? 0 : iRealVolume); + } + } +} + +void CMIDSound::SendEvent(TInt aEventType) +{ + /** + *Callback to Java + */ + JELOG2(EJavaUI); + + jclass javaPeerClass = mJniEnv->FindClass("com/nokia/mid/sound/Sound"); + + jmethodID soundStateChangeCallback = mJniEnv->GetMethodID( + javaPeerClass /*mJavaPeerClass */, "soundStateChanged", "(I)V"); + + + mJniEnv->CallVoidMethod(mJavaPeerObject, soundStateChangeCallback, + aEventType); +} + +CMIDSound::CMIDSound() + : java::util::FunctionServer("CMIDSoundFunctionServer"), + iMIDSound(0) +{ + JELOG2(EJavaUI); + createServerToNewThread(); +} + +int CMIDSound::InitProfileListener() +{ + TRAPD(err, CallMethodL(this, &CMIDSound::InitProfileListenerL, this)); + return err; +} + +void CMIDSound::InitProfileListenerL() +{ + JELOG2(EJavaUI); + // repository for profile + iRepository = CRepository::NewL(KCRUidProfileEngine); + + // get notifies about changes in KProEngActiveWarningTones + iProfileListener = CCenRepNotifyHandler::NewL(*this, + *iRepository, + CCenRepNotifyHandler::EIntKey, + KProEngActiveWarningTones); + + // Changes will be informed to HandleNotifyInt + iProfileListener->StartListeningL(); +} + +TBool CMIDSound::IsAudioEnabled(/*CMIDSound* aSelf*/) +{ + JELOG2(EJavaUI); + TInt isProfileOn = 0; + TInt error = iRepository->Get(KProEngActiveWarningTones, isProfileOn); + TBool retVal = EFalse; + + // If getting profile status fails do not play any tones. + if ((isProfileOn == 1) && + (error == KErrNone)) + { + retVal = ETrue; + } + return retVal; +} + +void CMIDSound::SetBeep(TInt aFreq, TInt64 aDuration) +{ + JELOG2(EJavaUI); + iFreq = aFreq; + iDur = aDuration; +} + +TInt CMIDSound::Init(TInt aType, const TDesC8* aData) +{ + JELOG2(EJavaUI); + TRAPD(err, CallMethodL(this, &CMIDSound::InitL, aType, aData, this)); + return err; +} + +void CMIDSound::InitL(TInt aType, const TDesC8* aData) +{ + JELOG2(EJavaUI); + + if (iMIDSound) + { + if (iMIDSound->State() == CMIDSoundImpl::EInitialising) + { + return; + } + if (iMIDSound->State() == CMIDSoundImpl::EReadyToPlay || + iMIDSound->State() == CMIDSoundImpl::EPlaying) + { + iMIDSound->Release(); + } + } + + CMIDSoundImpl* soundImpl = NULL; + switch (aType) + { + case com_nokia_mid_sound_Sound_FORMAT_TONE: //Tone + { + soundImpl = CMIDTone::NewL(*aData, this); + break; + } + case com_nokia_mid_sound_Sound_FORMAT_BEEP: //Beep + { + soundImpl = CMIDTone::NewL(iFreq, iDur, this); + break; + } + case com_nokia_mid_sound_Sound_FORMAT_WAV: //Wav + { + soundImpl = CMIDClip::NewL(aData, this); + break; + } + default: + { + break; + } + } + + if (soundImpl) + { + if (soundImpl->State() != CMIDSoundImpl::EReadyToPlay) + { + TInt state = soundImpl->State(); + delete soundImpl; + User::Leave(KErrNotReady); + } + iRealVolume = soundImpl->Volume(); + } + + delete iMIDSound; + iMIDSound = soundImpl; +} + +TInt CMIDSound::Play(TInt aLoop) +{ + JELOG2(EJavaUI); + TInt err = 0; + CallMethod(err, this, &CMIDSound::DoPlay, aLoop, this); + return err; +} + +TInt CMIDSound::DoPlay(TInt aLoop) +{ + JELOG2(EJavaUI); + + if (iMIDSound) + { + TInt state = iMIDSound->State(); + if (state != CMIDSoundImpl::EReadyToPlay) + { + return state; + } + } + else + { + return CMIDSoundImpl::ENotSupported; + } + if (!IsAudioEnabled()) + { + iMIDSound->SetVolume(0); + } + return iMIDSound->Play(aLoop); +} + +void CMIDSound::Resume() +{ + JELOG2(EJavaUI); + CallMethod(this, &CMIDSound::DoResume, this); +} + +void CMIDSound::DoResume() +{ + JELOG2(EJavaUI); + iMIDSound->Resume(); +} + +void CMIDSound::Stop() +{ + JELOG2(EJavaUI); + CallMethod(this, &CMIDSound::DoStop, this); +} + +void CMIDSound::DoStop() +{ + JELOG2(EJavaUI); + iMIDSound->Stop(); +} + +TInt CMIDSound::SoundVolume() +{ + JELOG2(EJavaUI); + TInt result = 0; + CallMethod(result, this, &CMIDSound::Volume, this); + return result; +} + +TInt CMIDSound::Volume() +{ + JELOG2(EJavaUI); + return iMIDSound->Volume(); +} + +void CMIDSound::SetVolume(TInt aVolume) +{ + JELOG2(EJavaUI); + CallMethod(this, &CMIDSound::DoSetVolume, aVolume, this); +} + +void CMIDSound::DoSetVolume(TInt aVolume) +{ + JELOG2(EJavaUI); + iRealVolume = aVolume; + TInt currentState = iMIDSound->State(); + if ((currentState == CMIDSoundImpl::EReadyToPlay) || + (currentState == CMIDSoundImpl::EPlaying)) + { + iMIDSound->SetVolume(IsAudioEnabled() ? aVolume : 0); + } +} + + +TInt CMIDSound::PlayerState() +{ + JELOG2(EJavaUI); + TInt result = 0; + CallMethod(result, this, &CMIDSound::State, this); + return result; +} + +TInt CMIDSound::State() +{ + JELOG2(EJavaUI); + return iMIDSound->State(); +} + +void CMIDSound::Release() +{ + JELOG2(EJavaUI); + CallMethod(this, &CMIDSound::DoRelease, this); +} + +void CMIDSound::DoRelease() +{ + JELOG2(EJavaUI); + iMIDSound->Release(); +}