diff -r 000000000000 -r 5f000ab63145 phoneapp/phoneuiview/src/cphonenotecontroller.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/phoneuiview/src/cphonenotecontroller.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,608 @@ +/* +* 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: Implementation of CPhoneNoteController class. +* +*/ + + +// INCLUDE FILES +#include "cphonenotecontroller.h" + +#include +#include +#include +#include +#include // for CAknNoteDialog +#include // for CAknGlobalNote + +#include "phoneui.pan" +#include "tphonecommandparam.h" +#include "tphonecmdparamnote.h" +#include "tphonecmdparamboolean.h" +#include "tphonecmdparamprogressnote.h" +#include "tphonecmdparamglobalnote.h" +#include "tphonecmdparaminteger.h" +#include "phoneconstants.h" +#include "cphonemainresourceresolver.h" +#include "phonerssbase.h" +#include "phonelogger.h" +#include "cphonetimer.h" +#include "cphonenote.h" +#include "cphonedtmfsendingnote.h" +#include "cphoneuidisablednote.h" + +// CONSTANTS +const TInt KPhoneIntervalDivider = 100; +// ================= MEMBER FUNCTIONS ======================= +// C++ default constructor can NOT contain any code, that +// might leave. +// +CPhoneNoteController::CPhoneNoteController( CEikonEnv& aEikEnv ) : iGlobalNoteId( KErrNotFound ), + iEikEnv( aEikEnv ), + iNoteText( NULL ) + { + } + +// --------------------------------------------------------- +// CPhoneNoteController::NewL() +// Two-phased constructor +// (other items were commented in a header). +// --------------------------------------------------------- +CPhoneNoteController* CPhoneNoteController::NewL( CEikonEnv& aEikEnv ) + { + CPhoneNoteController* self = + new( ELeave ) CPhoneNoteController( aEikEnv ); + + return self; + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CPhoneNoteController::~CPhoneNoteController() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::~CPhoneNoteController"); + DestroyNote(); + DestroyProgressNote(); + } + +// --------------------------------------------------------- +// CPhoneNoteController::CreateNoteL +// --------------------------------------------------------- +// +void CPhoneNoteController::CreateNoteL( + TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::CreateNoteL"); + TInt resourceId = 0; + CAknNoteDialog::TTone tone = CAknNoteDialog::ENoTone; + CAknNoteDialog::TTimeout timeout = CAknNoteDialog::ENoTimeout; + + TPhoneCmdParamNote* noteParam = static_cast( + aCommandParam ); + + if( iNote && noteParam->Type() == EPhoneNoteDtmfSending ) + { + // Dtmf sending ongoing. + UpdateNoteTextL( aCommandParam ); + return; + } + + // Delete the existing note + DestroyNote(); + + // Setup parameters according to the type of note + switch ( noteParam->Type() ) + { + case EPhoneNoteError: + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInformationErrorNote ); + timeout = CAknNoteDialog::ELongTimeout; + tone = CAknNoteDialog::EErrorTone; + break; + + case EPhoneNoteWarning: + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInformationWarningNote ); + timeout = CAknNoteDialog::ELongTimeout; + tone = CAknNoteDialog::EWarningTone; + break; + + case EPhoneNoteConfirmation: + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInformationConfirmationNote ); + timeout = CAknNoteDialog::EShortTimeout; + tone = CAknNoteDialog::EConfirmationTone; + break; + + case EPhoneNoteInformation: + resourceId = CPhoneMainResourceResolver::Instance()-> + ResolveResourceID( EPhoneInformationNote ); + timeout = CAknNoteDialog::ELongTimeout; + tone = CAknNoteDialog::ENoTone; + break; + + case EPhoneNoteSecurity: + case EPhoneNoteCustom: // Fall through + case EPhoneNotePermanent: + case EPhoneNoteDtmfSending: + // Use the specified values + resourceId = noteParam->ResourceId(); + timeout = noteParam->Timeout(); + tone = noteParam->Tone(); + break; + + case EPhoneNoteUIDisabled: + // Use the specified values + resourceId = noteParam->ResourceId(); + timeout = CAknNoteDialog::ENoTimeout; + tone = CAknNoteDialog::ENoTone; + break; + + default: + Panic( EPhoneViewCaseNotHandled ); + break; + } + + // Create correct note + if( noteParam->Type() == EPhoneNoteDtmfSending ) + { + iNote = new ( ELeave ) CPhoneDtmfSendingNote( reinterpret_cast( &iNote ), *iEikEnv.EikAppUi() ); + } + else if( noteParam->Type() == EPhoneNoteUIDisabled ) + { + iNote = new ( ELeave ) CPhoneUIDisabledNote( reinterpret_cast( &iNote ), *iEikEnv.EikAppUi() ); + } + else + { + iNote = new ( ELeave ) CPhoneNote( reinterpret_cast( &iNote ), *iEikEnv.EikAppUi() ); + } + + // Override text if specified + if ( noteParam->Text().Length() ) + { + if( !iNoteText ) + { + iNoteText = noteParam->Text().AllocL(); + } + iNote->SetTextL( *iNoteText ); + } + else if ( noteParam->TextResourceId() ) + { + // Get the text associated with the resource Id + TBuf noteText; + StringLoader::Load( + noteText, + noteParam->TextResourceId(), + &iEikEnv ); + + iNote->SetTextL( noteText ); + } + + // Override tone if specified + if ( tone != CAknNoteDialog::ENoTone ) + { + iNote->SetTone( tone ); + } + + // Override timeout if specified + if ( timeout != CAknNoteDialog::ENoTimeout ) + { + iNote->SetTimeout( timeout ); + } + + iNote->SetNoteType( noteParam->Type() ); + + // Display the note + iNote->ExecuteLD( resourceId ); + } + +// --------------------------------------------------------- +// CPhoneNoteController::DestroyNote +// --------------------------------------------------------- +// +void CPhoneNoteController::DestroyNote() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::DestroyNote"); + + // Delete note text if exists + if( iNoteText ) + { + delete iNoteText; + iNoteText = NULL; + } + + // Delete the note if it exists + if ( iNote ) + { + delete iNote; + iNote = NULL; + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::DestroyDTMFNote +// --------------------------------------------------------- +// +void CPhoneNoteController::DestroyDTMFNote() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::DestroyDTMFNote"); + + // Delete DTFM note if exists + if ( iNote && ( iNote->NoteType() == EPhoneNoteDtmfSending ) ) + { + // Delete note text if exists + if( iNoteText ) + { + delete iNoteText; + iNoteText = NULL; + } + delete iNote; + iNote = NULL; + } + } + + +// --------------------------------------------------------- +// CPhoneNoteController::DestroyGlobalNoteL +// --------------------------------------------------------- +// +void CPhoneNoteController::DestroyGlobalNoteL() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::DestroyGlobalNoteL"); + if( iGlobalNoteId != KErrNotFound ) + { + CAknGlobalNote* glbNote = CAknGlobalNote::NewLC(); + glbNote->CancelNoteL( iGlobalNoteId ); + CleanupStack::PopAndDestroy( glbNote ); + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::CreateGlobalNoteL +// --------------------------------------------------------- +// +void CPhoneNoteController::CreateGlobalNoteL( + TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::CreateGlobalNoteL"); + TPhoneCmdParamGlobalNote* globalNoteParam = + static_cast( aCommandParam ); + TBuf noteText; + + // Check if the resource Id is specified + if ( globalNoteParam->TextResourceId() ) + { + if ( globalNoteParam->Text().Length() ) + { + HBufC* loadedText = StringLoader::LoadL( + globalNoteParam->TextResourceId(), + globalNoteParam->Text(), + CCoeEnv::Static() ); + noteText.Copy( *loadedText ); + delete loadedText; + } + else + { + StringLoader::Load( + noteText, + globalNoteParam->TextResourceId(), + &iEikEnv ); + } + } + else if ( globalNoteParam->Text() != KNullDesC ) + { + noteText.Copy( globalNoteParam->Text() ); + } + + if ( noteText.Length() > 0 ) + { + CAknGlobalNote* glbNote = CAknGlobalNote::NewLC(); + + // Set the tone + glbNote->SetTone( globalNoteParam->Tone() ); + if ( globalNoteParam->Softkeys()) + { + glbNote->SetSoftkeys( globalNoteParam->Softkeys() ); + } + + // Show the global note + + if ( globalNoteParam->WaitForReady() ) + { + TRequestStatus NoteReady; + iGlobalNoteId = glbNote->ShowNoteL( NoteReady, globalNoteParam->Type(), noteText ); + User::WaitForRequest( NoteReady ); + } + else + { + iGlobalNoteId = glbNote->ShowNoteL( globalNoteParam->Type(), noteText ); + } + CleanupStack::PopAndDestroy( glbNote ); + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::CreateProgressNoteL +// --------------------------------------------------------- +// +void CPhoneNoteController::CreateProgressNoteL( + TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::CreateProgressNoteL"); + TPhoneCmdParamProgressNote* noteParam = static_cast< + TPhoneCmdParamProgressNote*>(aCommandParam ); + + TInt resourceId = noteParam->ResourceId(); + iStartTime.UniversalTime(); + + TTimeIntervalMicroSeconds32 waitTime = + noteParam->WaitTime(); + + if( !iProgressUpdateTimer ) + { + iProgressUpdateTimer = CPhoneTimer::NewL(); + } + + iWaitTime = waitTime.Int(); + + TInt final = waitTime.Int(); + iInterval = final / KPhoneIntervalDivider; + iProgressBarCount = 0; + + iProgressUpdateTimer->After( iInterval, this ); + + CPhoneProgressNote* dlg = + new ( ELeave ) CPhoneProgressNote( + ( reinterpret_cast< CEikDialog** >( &iProgressNote )), + static_cast( iEikEnv.EikAppUi() ) ); + + iProgressNote = dlg; + dlg->PrepareLC( resourceId ); + + CEikProgressInfo* info = dlg->GetProgressInfoL(); + + if ( info ) + { + info->SetFinalValue( KPhoneIntervalDivider ); + } + + dlg->RunLD(); + } + +// --------------------------------------------------------- +// CPhoneNoteController::DestroyProgressBar +// --------------------------------------------------------- +// +void CPhoneNoteController::DestroyProgressNote() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::DestroyProgressNote"); + + // Delete the progress note if it exists + if ( iProgressNote ) + { + delete iProgressNote; + iProgressNote = NULL; + } + if ( iProgressUpdateTimer ) + { + if( iProgressUpdateTimer->IsActive() ) + { + iProgressUpdateTimer->CancelTimer(); + } + + delete iProgressUpdateTimer; + iProgressUpdateTimer = NULL; + } + iProgressBarCount = 0; + } + +// --------------------------------------------------------- +// CPhoneNoteController::HandleTimeOutL +// --------------------------------------------------------- +// +void CPhoneNoteController::HandleTimeOutL() + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::HandleTimeOutL"); + + if ( iProgressNote ) + { + TTime current; + current.UniversalTime(); + + CEikProgressInfo* info = iProgressNote->GetProgressInfoL(); + + if ( info ) + { + TTime current; + current.UniversalTime(); + TInt64 timeDelta = + current.MicroSecondsFrom( iStartTime ).Int64(); + + iProgressBarCount = ( timeDelta / iInterval )+1 ; + if ( iProgressBarCount > KPhoneIntervalDivider ) + { + iProgressBarCount = KPhoneIntervalDivider; + } + info->SetAndDraw( iProgressBarCount ); + } + + if ( !iProgressUpdateTimer->IsActive() ) + { + iProgressUpdateTimer->After( iInterval, this ); + } + } + else + { + if( iProgressUpdateTimer->IsActive() ) + { + iProgressUpdateTimer->CancelTimer(); + } + + delete iProgressUpdateTimer; + iProgressUpdateTimer = NULL; + iProgressBarCount = 0; + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::IsNoteVisible +// --------------------------------------------------------- +// +void CPhoneNoteController::IsNoteVisible( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneNoteController::IsNoteVisible"); + + TPhoneCmdParamBoolean* booleanParam = + static_cast( aCommandParam ); + + if( iNote ) + { + if( iNote->IsVisible() ) + { + booleanParam->SetBoolean( ETrue ); + } + } + else + { + booleanParam->SetBoolean( EFalse ); + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::IsProgressNoteVisible +// --------------------------------------------------------- +// +void CPhoneNoteController::IsProgressNoteVisible( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneNoteController::IsProgressNoteVisible"); + + TPhoneCmdParamBoolean* booleanParam = + static_cast( aCommandParam ); + + if( iProgressNote ) + { + if( iProgressNote->IsVisible() ) + { + booleanParam->SetBoolean( ETrue ); + } + } + else + { + booleanParam->SetBoolean( EFalse ); + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::IsNoteActive +// --------------------------------------------------------- +// +void CPhoneNoteController::IsNoteActive( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneNoteController::IsNote"); + + TPhoneCmdParamBoolean* booleanParam = + static_cast( aCommandParam ); + + if( iProgressNote || iNote ) + { + booleanParam->SetBoolean( ETrue ); + } + else + { + booleanParam->SetBoolean( EFalse ); + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::IsActiveNoteDissmissableByKeyEvent +// --------------------------------------------------------- +// +void CPhoneNoteController::IsActiveNoteDissmissableByKeyEvent( TPhoneCommandParam* aCommandParam ) + { + __LOGMETHODSTARTEND( EPhoneUIView, "CPhoneNoteController::IsActiveNoteDissmissableByKeyEvent"); + + TPhoneCmdParamBoolean* booleanParam = + static_cast( aCommandParam ); + // check first that iNote is created. + if( ( iNote ) && + ( iNote->NoteType() == EPhoneNoteSecurity ) ) + { + booleanParam->SetBoolean( ETrue ); + } + else + { + booleanParam->SetBoolean( EFalse ); + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::UpdateNoteTextL +// --------------------------------------------------------- +// +void CPhoneNoteController::UpdateNoteTextL( TPhoneCommandParam* aCommandParam ) + { + TPhoneCmdParamNote* noteParam = static_cast( + aCommandParam ); + + // Delete note text if exists + if( iNoteText ) + { + delete iNoteText; + iNoteText = NULL; + } + + if ( iNote ) + { + // Override text if specified + if ( noteParam->Text().Length() ) + { + if( !iNoteText ) + { + iNoteText = noteParam->Text().Alloc(); + } + iNote->SetTextL( *iNoteText ); + } + else if ( noteParam->TextResourceId() ) + { + // Get the text associated with the resource Id + TBuf noteText; + StringLoader::Load( + noteText, + noteParam->TextResourceId(), + &iEikEnv ); + + iNote->SetTextL( noteText ); + } + } + } + +// --------------------------------------------------------- +// CPhoneNoteController::UpdateNoteSoftkeysL +// --------------------------------------------------------- +// +void CPhoneNoteController::UpdateNoteSoftkeysL( TPhoneCommandParam* aCommandParam ) + { + + TPhoneCmdParamInteger* integerParam = + static_cast( aCommandParam ); + + if ( iNote ) + { + iNote->UpdateSoftkeysL( integerParam->Integer() ); + } + } + +// End of File