--- /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 <eikenv.h>
+#include <eikappui.h>
+#include <eikprogi.h>
+#include <StringLoader.h>
+#include <aknnotedialog.h> // for CAknNoteDialog
+#include <AknGlobalNote.h> // 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<TPhoneCmdParamNote*>(
+ 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<CEikDialog**>( &iNote ), *iEikEnv.EikAppUi() );
+ }
+ else if( noteParam->Type() == EPhoneNoteUIDisabled )
+ {
+ iNote = new ( ELeave ) CPhoneUIDisabledNote( reinterpret_cast<CEikDialog**>( &iNote ), *iEikEnv.EikAppUi() );
+ }
+ else
+ {
+ iNote = new ( ELeave ) CPhoneNote( reinterpret_cast<CEikDialog**>( &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<KPhoneMaxCharsInNote> 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<TPhoneCmdParamGlobalNote*>( aCommandParam );
+ TBuf<KPhoneMaxCharsInNote> 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<MEikCommandObserver*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamBoolean*>( 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<TPhoneCmdParamNote*>(
+ 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<KPhoneMaxCharsInNote> noteText;
+ StringLoader::Load(
+ noteText,
+ noteParam->TextResourceId(),
+ &iEikEnv );
+
+ iNote->SetTextL( noteText );
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPhoneNoteController::UpdateNoteSoftkeysL
+// ---------------------------------------------------------
+//
+void CPhoneNoteController::UpdateNoteSoftkeysL( TPhoneCommandParam* aCommandParam )
+ {
+
+ TPhoneCmdParamInteger* integerParam =
+ static_cast<TPhoneCmdParamInteger*>( aCommandParam );
+
+ if ( iNote )
+ {
+ iNote->UpdateSoftkeysL( integerParam->Integer() );
+ }
+ }
+
+// End of File