diff -r c84cf270c54f -r 92ab7f8d0eab phoneapp/phoneringingtoneplayer/src/cphoneringingtonecontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneringingtoneplayer/src/cphoneringingtonecontroller.cpp Fri Mar 19 09:28:42 2010 +0200 @@ -0,0 +1,588 @@ +/* +* 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: +* +*/ + +// INCLUDE FILES +#include +#include "cphoneringingtonecontroller.h" +#include "phonelogger.h" +#include "cphoneringingtone.h" +#include "tphonecmdparamringtone.h" +#include "cphonecenrepproxy.h" +#include "cphoneringingtoneplayer.h" +#include "cphonettsplayer.h" + +// CONSTANTS + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::NewL +// ----------------------------------------------------------------------------- +// +EXPORT_C CPhoneRingingToneController* CPhoneRingingToneController::NewL() + { + CPhoneRingingToneController* self = + new ( ELeave ) CPhoneRingingToneController(); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::CPhoneRingingToneController +// ----------------------------------------------------------------------------- +// +CPhoneRingingToneController::CPhoneRingingToneController() + { + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::ConstructL +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::ConstructL() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::ConstructL()" ); + //iMediatorSender = CPhoneMediatorSender::NewL(); + //iMediatorSender->AttachCoverUiObserverL( this ); + + iRingingtonePlayer = CPhoneRingingtonePlayer::NewL(); + + // Check video player configuration. + iArbitraryVideoScaling = + CPhoneCenRepProxy::Instance()->IsTelephonyFeatureSupported( + KTelephonyLVFlagArbitraryVideoScaling ); + + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::~CPhoneRingingToneController +// ----------------------------------------------------------------------------- +// +CPhoneRingingToneController::~CPhoneRingingToneController() + { + /*if ( iMediatorSender ) + { + iMediatorSender->DetachCoverUiObserver( this ); + }*/ + + //delete iMediatorSender; + //iMediatorSender = NULL + + + delete iAudioVideoRingingTone; + iAudioVideoRingingTone = NULL; + delete iTTSPlayer; + iTTSPlayer = NULL; + delete iRingingtonePlayer; + iRingingtonePlayer = NULL; + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::PlayRingToneL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneRingingToneController::PlayRingToneL( + TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::PlayRingToneL()" ); + + if ( aCommandParam->ParamId() == TPhoneCommandParam::EPhoneParamIdRingTone ) + { + TPhoneCmdParamRingTone* ringToneParam = + static_cast( aCommandParam ); + + const TInt volume = ringToneParam->Volume(); + TProfileRingingType ringingType = + static_cast( ringToneParam->RingingType() ); + + if ( !iAudioVideoRingingTone ) + { + iAudioVideoRingingTone = CPhoneRingingTone::NewL( + ringToneParam->RingTone() ); + } + + // Store pofile based parameters. + iAudioVideoRingingTone->SetFileName( ringToneParam->RingTone() ); + iAudioVideoRingingTone->SetVolume( volume ); + iAudioVideoRingingTone->SetRingingType ( ringingType ); + iAudioVideoRingingTone->SetTtsToneToBePlayed( + ringToneParam->TextToSay().Length()? ETrue : EFalse); + + + // Caller contact text and image and image has + // higher priority than video ringing tone set for caller. + if ( iAudioVideoRingingTone->IsVideoRingingTone() ) + { + if ( ringToneParam->IsCallerImage() ) + { + // Play only audio from video ringingtone + PlayAudioRingTone( + volume, + ringingType ); + } + else + { + // Play video ring tone + const TBool ringToneIsPersonal = ringToneParam->Type() == + EPhoneRingTonePersonal; + PlayVideoRingingTone( + *iAudioVideoRingingTone, + volume, + ringingType, + ringToneIsPersonal ); + } + } + else + { + // Play text to speech, if available + if ( ringToneParam->TextToSay().Length() ) + { + if (iTTSPlayer) + { + delete iTTSPlayer; + iTTSPlayer = NULL; + } + iTTSPlayer = CPhoneTTSPlayer::NewL(iRingingtonePlayer); + iTTSPlayer->AddTtsPlaybackIfNeeded(); + iTTSPlayer->PlayTtsTone( + ringToneParam->TextToSay(), + iAudioVideoRingingTone ); + } + // Play audio ring tone + PlayAudioRingTone( + volume, + ringingType ); + } + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::PlayAudioRingTone +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::PlayAudioRingTone( + TInt aVolume, + TProfileRingingType aRingingType ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::PlayAudioRingTone()" ); + __PHONELOG2( + EBasic, + EPhoneControl, + "CPhoneRingingToneController::PlayAudioRingTone - aVolume(%d), aRingingType(%d)", + aVolume, + aRingingType ); + + if ( !iAudioVideoRingingTone || + !iAudioVideoRingingTone->CheckAndHandleToneSizeLimit() ) + { + iRingingtonePlayer->PlayDefaultTone( aVolume, aRingingType ); + } + else if ( aRingingType == EProfileRingingTypeSilent ) + { + iRingingtonePlayer->PlaySilentTone(); + } + else if ( aRingingType == EProfileRingingTypeBeepOnce ) + { + iRingingtonePlayer->PlayBeepOnce( aVolume ); + } + else + { + iRingingtonePlayer->PlayProfileBasedTone(iAudioVideoRingingTone); + } + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::MuteRingingToneOnAnswer +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneRingingToneController::MuteRingingToneOnAnswer() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::MuteRingingToneOnAnswer()" ); + + /* if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying || + iTonePlayingStatus == EPersonalVideoTonePlaying ) + { + // Mute the video audio + iVideoPlayer->MuteVideoRingTone(); + iTonePlayingStatus = ESilentVideoTonePlaying; + iVolume = 0; + } + else + {*/ + DoMuteRingingTone(); + //} + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::MuteRingingTone +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneRingingToneController::MuteRingingTone() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::MuteRingingTone()" ); + + /* if ( iVideoPlayer && iTonePlayingStatus == EVideoTonePlaying || + iTonePlayingStatus == EPersonalVideoTonePlaying ) + { + // Mute the video audio + iVideoPlayer->MuteVideoRingTone(); + iTonePlayingStatus = ESilentVideoTonePlaying; + iVolume = 0; + } + else + {*/ + StopPlaying(); + //} + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::StopPlaying +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPhoneRingingToneController::StopPlaying() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::StopPlaying()" ); + if ( iTTSPlayer ) + { + iTTSPlayer->StopPlaying(); + delete iTTSPlayer; + iTTSPlayer = NULL; + } + iRingingtonePlayer->StopPlaying(); + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::DoMuteRingingTone +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::DoMuteRingingTone() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::DoMuteRingingTone()" ); + + /* switch( iTonePlayingStatus ) + { + case EVideoTonePlaying: // video ringing tone, fall through + case EPersonalVideoTonePlaying: // fall through + case ESilentVideoTonePlaying: + if ( iVideoPlayer ) + { + iVideoPlayer->MuteVideoRingTone(); + return; + } + break; + + default: + break; + }*/ + + iRingingtonePlayer->MuteActiveAudioPlayer(); + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::ConvertVideoRingingType +// ----------------------------------------------------------------------------- +// +MPhoneVideoPlayer::TPlayMode CPhoneRingingToneController::ConvertVideoRingingType( + TProfileRingingType aRingingType ) + { + MPhoneVideoPlayer::TPlayMode playMode; + + switch ( aRingingType ) + { + case EProfileRingingTypeAscending: + playMode = MPhoneVideoPlayer::EPlayAscending; + break; + case EProfileRingingTypeRingingOnce: + playMode = MPhoneVideoPlayer::EPlayOnce; + break; + case EProfileRingingTypeRinging: + default: + playMode = MPhoneVideoPlayer::EPlayInLoop; + break; + } + + return playMode; + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::SetVideoPlayer +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::SetVideoPlayer( + MPhoneVideoPlayer* aVideoPlayer ) + { + iVideoPlayer = aVideoPlayer; + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::PlayVideoRingingTone +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::PlayVideoRingingTone( + const CPhoneRingingTone& /*aRingingTone*/, + TInt /*aVolume*/, + TProfileRingingType /*aRingingType*/, + TBool /*aPersonalTone*/ ) + { + /* + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::PlayVideoRingingTone()" ); + + __ASSERT_DEBUG( iVideoPlayer, Panic( EPhoneViewGeneralError ) ); + + iVolume = aVolume; + iRingingType = aRingingType; + TBool startTimer( ETrue ); + + // Extended security check + if ( ExtendedSecurity() ) + { + if ( !aRingingTone.IsFileInRom() && + !aRingingTone.IsFileDrmProtected() ) + { + __PHONELOG( EBasic, + EPhoneControl, + "CPhoneRingingToneController::HandleVideoPlayerError - PermissionDenied" ); + iRingingtonePlayer->PlayDefaultTone( iVolume, iRingingType ); + return; + } + __PHONELOG( EBasic, + EPhoneControl, + "CPhoneRingingToneController::HandleVideoPlayerError - ExtSecChk ok" ); + } + + // If flip is closed then show video on Cover UI + TBool videoPlaySentToCoverUi( EFalse ); + TInt leaveCode( KErrNone ); + if ( FeatureManager::FeatureSupported( KFeatureIdCoverDisplay ) ) + { + const TInt flipOpen = CPhonePubSubProxy::Instance()->Value( + KPSUidUikon, KUikFlipStatus ); + if( !flipOpen ) + { + TRAP( leaveCode, videoPlaySentToCoverUi = CoverUIPlayVideoRingingToneL( + aRingingTone ) ); + } + } + // Play ringing tone here if video play sending did leave or + // video playing wasn't delegated to Cover UI + if( !leaveCode && videoPlaySentToCoverUi ) + { + iTimer->After( KPhoneMaxRingingWaiting, this ); + return; + } + + __PHONELOG( EBasic, EPhoneControl, "CPhoneRingingToneController::PlayVideoRingingTone - play" ); + switch( aRingingType ) + { + case EProfileRingingTypeSilent: + iVideoPlayer->PlayVideoRingTone( + aRingingTone.FileName(), + ConvertVideoRingingType( aRingingType ), + 0, + iArbitraryVideoScaling, + this ); + iRingingtonePlayer->PlaySilentTone(); + iVolume = 0; // for repeat + startTimer = EFalse; // no need for fallback + break; + + case EProfileRingingTypeBeepOnce: + iVideoPlayer->PlayVideoRingTone( + aRingingTone.FileName(), + ConvertVideoRingingType( aRingingType ), + 0, + iArbitraryVideoScaling, + this ); + iRingingtonePlayer->BeepOnce( aVolume ); + iVolume = 0; // for repeat + startTimer = EFalse; // no need for fallback + break; + default: + iVideoPlayer->PlayVideoRingTone( + aRingingTone.FileName(), + ConvertVideoRingingType( aRingingType ), + iVolume, + iArbitraryVideoScaling, + this ); + break; + } + + if ( aPersonalTone ) + { + iTonePlayingStatus = EPersonalVideoTonePlaying; + } + else + { + iTonePlayingStatus = EVideoTonePlaying; + } + + if ( startTimer && !iTimer->IsActive() ) + { + // Start timer to guard video opening + iTimer->After( KPhoneMaxRingingWaiting, this ); + } + */ + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::HandleVideoPlayerError +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::HandleVideoPlayerError( + TPhoneVideoPlayerErrorEvent /*aEvent*/, + TInt /*aError*/ ) + { + /* __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::HandleVideoPlayerError()" ); + + if ( aError ) + { + __PHONELOG1( EBasic, + EPhoneControl, + "CPhoneRingingToneController::HandleVideoPlayerError - error (%d)", + aError ); + } + + // cancel guarding timer + iTimer->Cancel(); + + // to remove video window + iVideoPlayer->CancelVideoRingTone(); + + if ( iTonePlayingStatus == EPersonalVideoTonePlaying ) + { + // Play default tone (active profile tone). + if ( iAudioVideoRingingTone && + !iAudioVideoRingingTone->IsVideoRingingTone() ) + { + PlayAudioRingTone( iVolume, iRingingType ); + } + else // audio/video tone is video + { + PlayDefaultVideoAsync(); + } + } + else + { + // Play backup tone + iRingingtonePlayer->PlayDefaultTone( iVolume, iRingingType ); + } +*/ + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::HandleVideoPlayerInitComplete +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::HandleVideoPlayerInitComplete() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::HandleVideoPlayerInitComplete()" ); + + // cancel guarding timer + //iTimer->Cancel(); + + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::HandleVideoPlayerPlayingComplete +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::HandleVideoPlayerPlayingComplete() + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::HandleVideoPlayerPlayingComplete()" ); + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::PlayDefaultVideoAsync +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::PlayDefaultVideoAsync() + { + /* __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::PlayDefaultVideoAsync()" ); + + Cancel(); + + iState = EPlayingDefaultVideo; + + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + SetActive();*/ + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::ExtendedSecurity +// ----------------------------------------------------------------------------- +// +TBool CPhoneRingingToneController::ExtendedSecurity() const + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::ExtendedSecurity()" ); + return EFalse; + //return iExtSecNeeded; + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::CoverUIPlayVideoRingingToneL +// ----------------------------------------------------------------------------- +// +TBool CPhoneRingingToneController::CoverUIPlayVideoRingingToneL( + const CPhoneRingingTone& aRingingTone ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::CoverUIPlayVideoRingingToneL()" ); + + TBool showVideo( EFalse ); + + RBuf8 data; + CleanupClosePushL( data ); + data.CreateL( aRingingTone.FileName().Length() ); + data.Copy( aRingingTone.FileName() ); + /*TInt err = iMediatorSender->IssueCommand( + EPhoneCmdCoverUiShowMultimediaRingingTone, + data ); + if ( err == KErrNone ) + { + showVideo = ETrue; + iActiveCoverUICommand = ETrue; + }*/ + CleanupStack::PopAndDestroy(); //data + + return showVideo; + } + +// ----------------------------------------------------------------------------- +// CPhoneRingingToneController::ShowMultimediaRingingToneResponseL +// ----------------------------------------------------------------------------- +// +void CPhoneRingingToneController::ShowMultimediaRingingToneResponseL( + TInt aStatus ) + { + __LOGMETHODSTARTEND( EPhoneControl, "CPhoneRingingToneController::ShowMultimediaRingingToneResponseL()" ); + + //iTimer->Cancel(); + if( aStatus != KErrNone && iActiveCoverUICommand ) + { + iRingingtonePlayer->PlayDefaultTone( iVolume, iRingingType ); + } + iActiveCoverUICommand = EFalse; + } + + + +// End of File