diff -r 41a7f70b3818 -r 5266b1f337bd phoneuis/dialer/src/cdialingextensionobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneuis/dialer/src/cdialingextensionobserver.cpp Wed Sep 01 12:30:10 2010 +0100 @@ -0,0 +1,182 @@ +/* +* Copyright (c) 2007 - 2010 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: Observer for dialingextension plug-in. +* +*/ + +// INCLUDE FILES +#include +#include +#include + +// USER INCLUDE FILES +#include "cdialingextensionobserver.h" +#include "cdialernumberentry.h" +#include "cdialer.h" + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +CDialingExtensionObserver* CDialingExtensionObserver::NewL( + CDialingExtensionInterface* aDialingExtension, + CDialerNumberEntry* aNumberEntry, + CDialer* aDialer ) + { + CDialingExtensionObserver* self = new (ELeave) CDialingExtensionObserver( + aDialingExtension, aNumberEntry, aDialer ); + return self; + } + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::~CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +CDialingExtensionObserver::~CDialingExtensionObserver() + { + // no owned data => no implementation needed + } + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::HandleDialingExtensionEvent +// +// +// --------------------------------------------------------------------------- +// +void CDialingExtensionObserver::HandleDialingExtensionEvent( MDialingExtensionObserver::TEvent aEvent ) + { + switch ( aEvent ) + { + case MDialingExtensionObserver::EFocusChanged: + { + // The basic idea of EFocusChanged event handling: + // - If dialing extension gets in focus, focus is taken from number entry editor. + // - If dialing extension gives up focus, focus is given to number entry editor. + + if ( iDialingExtension->IsFocused() && iNumberEntry->IsFocused() ) + { + iNumberEntry->SetFocus(EFalse); + UpdateCba(); + iDialer->UpdateToolbar(); + } + else if ( !iDialingExtension->IsFocused() && !iNumberEntry->IsFocused() && iDialer->IsFocused() ) + { + // Number entry editor is set focused only if the parent control is in focus. + // If number entry editor was focused but parent was not, this may show as a + // a blinking cursor in an inappropriate place. + iNumberEntry->SetFocus(ETrue); + UpdateCba(); + iDialer->UpdateToolbar(); + } + + iNumberEntry->DrawDeferred(); + } + break; + + case MDialingExtensionObserver::ECCALauncherExit: + case MDialingExtensionObserver::ECommunicationCancelled: + case MDialingExtensionObserver::ECommunicationStarted: + { + // No actions. We should stay in dialer, and not go to idle. + } + break; + + case MDialingExtensionObserver::EEasyDialingEnabled: + { + // order dialer to refresh its layout + iDialer->UpdateNumberEntryConfiguration(); + iDialer->SetSize( iDialer->Size() ); + if (iDialingExtension && iNumberEntry) + { + // get matches for the current input + TRAP_IGNORE( SearchL() ); + } + iDialer->DrawDeferred(); + } + break; + + case MDialingExtensionObserver::EEasyDialingDisabled: + { + // order parent to refresh its layout + iDialer->UpdateNumberEntryConfiguration(); + iDialer->SetSize( iDialer->Size() ); + iDialer->DrawDeferred(); + } + break; + + default: + break; + } + } + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +CDialingExtensionObserver::CDialingExtensionObserver( + CDialingExtensionInterface* aDialingExtension, + CDialerNumberEntry* aNumberEntry, + CDialer* aDialer ) : +iDialingExtension( aDialingExtension ), +iNumberEntry( aNumberEntry ), +iDialer( aDialer ), +iEikonEnvironment( NULL ) + { + } + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::CDialingExtensionObserver +// +// +// --------------------------------------------------------------------------- +// +void CDialingExtensionObserver::UpdateCba() + { + if ( !iEikonEnvironment ) + { + iEikonEnvironment = CEikonEnv::Static(); // codescanner::performance::eikonenvstatic + } + + if( iEikonEnvironment && iEikonEnvironment->EikAppUi() ) + { + TRAP_IGNORE( iEikonEnvironment->EikAppUi()->HandleCommandL( EPhoneCmdUpdateCba )); + } + } + + +// --------------------------------------------------------------------------- +// CDialingExtensionObserver::SearchL +// +// +// --------------------------------------------------------------------------- +// +void CDialingExtensionObserver::SearchL() + { + TPtrC searchString = iNumberEntry->Text(); + if ( searchString.Length() ) + { + iDialingExtension->SetInputL( searchString ); + } + } + +// end of file