phoneuis/dialer/src/cdialingextensionobserver.cpp
branchRCL_3
changeset 62 5266b1f337bd
child 81 c26cc2a7c548
--- /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 <eikenv.h>
+#include <eikappui.h>
+#include <phoneappcommands.hrh>
+
+// 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