phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp
branchRCL_3
changeset 62 5266b1f337bd
parent 61 41a7f70b3818
child 81 c26cc2a7c548
--- a/phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp	Tue Aug 31 15:14:29 2010 +0300
+++ b/phoneapp/phoneuicontrol/src/cphoneuicontroller.cpp	Wed Sep 01 12:30:10 2010 +0100
@@ -19,6 +19,7 @@
 // INCLUDE FILES
 #include <featmgr.h>        // for FeatureManager
 #include <settingsinternalcrkeys.h>
+#include <phoneappcommands.hrh>
 
 #include "cphoneuicontroller.h"
 #include "pevirtualengine.h"
@@ -26,14 +27,16 @@
 #include "cphoneenginehandler.h"
 #include "cphonesystemeventhandler.h"
 #include "cphoneremotecontrolhandler.h"
-#include "mphoneviewcommandhandle.h"
 #include "phonestatedefinitions.h"
 #include "phonelogger.h"
 #include "phoneconstants.h"
 #include "phoneui.pan"
+#include "cphonekeyeventforwarder.h"
 #include "cphonecenrepproxy.h"
 #include "cphonemediatorfactory.h"
 #include "tphonecmdparamnumberentryobserver.h"
+#include "cphonesecuritymodeobserver.h"
+#include "cphoneviewcontroller.h"
 
 // ================= MEMBER FUNCTIONS =======================
 
@@ -52,12 +55,11 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------
 //
-void CPhoneUIController::ConstructL( 
-    MPhoneViewCommandHandle* aViewCommandHandle )
+void CPhoneUIController::ConstructL( CPhoneViewController& aViewController )
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUIController::ConstructL()");
     // Creates correct protocol DLL
-    CreateProtocolDllL( aViewCommandHandle );
+    CreateProtocolDllL( aViewController );
 
     // Reference the phone state machine
     iStateMachine = CPhoneStateHandle::Instance()->StateMachine();
@@ -66,8 +68,10 @@
     iEngineHandler = CPhoneEngineHandler::NewL( iStateMachine );
     // Create the system event handler
     iSystemEventHandler = CPhoneSystemEventHandler::NewL( iStateMachine );
-     // Create the remote control handler
-    iRemoteControlHandler = CPhoneRemoteControlHandler::NewL( iStateMachine );
+
+    // Create the key event forwarder
+    iKeyEventForwarder = CPhoneKeyEventForwarder::NewL( 
+        CEikonEnv::Static()->EikAppUi()->ClientRect(), iStateMachine, &aViewController ); // codescanner::eikonenvstatic
 
     TInt leaveCode( 0 );
     TInt retry( 0 );
@@ -107,12 +111,27 @@
 
     // Store the phone engine information in the state machine
     iStateMachine->SetPhoneEngine( iPhoneEngine );
+	
+	// Set up security mode observer.
+	iSecurityModeObserver = CPhoneSecurityModeObserver::NewL();
+	iSecurityModeObserver->SetPhoneEngineInfo( iPhoneEngine->EngineInfo() );
+	iStateMachine->SetSecurityModeObserver( iSecurityModeObserver );
+	iStateMachine->SetSecurityMessageHandler( iSecurityModeObserver );
+	
+    // Set Number Entry observer
+    TPhoneCmdParamNumberEntryObserver cmdParamNumberEntryObserver;
+    cmdParamNumberEntryObserver.SetObserver( TCallBack( HandlePhoneNumberEditorCallBack, this ) );
+    aViewController.ExecuteCommand( EPhoneViewSetNumberEntryObserver, 
+                                            &cmdParamNumberEntryObserver);
     
+	// Set up controller to observe security mode state changes.
+    iStateMachine->SecurityMode()->RegisterStateObserver( aViewController );
+	
     // Go to the startup state
     iStateMachine->ChangeState( EPhoneStateStartup );
 
-      CPhoneMediatorFactory::Instance()->CommandListener( this, iStateMachine,
-            iStateMachine->PhoneEngineInfo() );
+	  CPhoneMediatorFactory::Instance()->CommandListener( this, iStateMachine,
+		    iStateMachine->PhoneEngineInfo() );
     }
 
 // -----------------------------------------------------------------------------
@@ -121,12 +140,10 @@
 // -----------------------------------------------------------------------------
 //
 EXPORT_C CPhoneUIController* CPhoneUIController::NewL( 
-    MPhoneViewCommandHandle* aViewCommandHandle )
+    CPhoneViewController& aViewCommandHandle )
     {
-    __ASSERT_DEBUG( aViewCommandHandle,
-        Panic( EPhoneCtrlParameterNotInitialized ) );
-    
-    CPhoneUIController* self = new( ELeave ) CPhoneUIController;
+
+    CPhoneUIController* self = new( ELeave ) CPhoneUIController();
     
     CleanupStack::PushL( self );
     self->ConstructL( aViewCommandHandle );
@@ -143,10 +160,12 @@
 EXPORT_C CPhoneUIController::~CPhoneUIController()
     {
     __LOGMETHODSTARTEND(EPhoneControl, "CPhoneUIController::~CPhoneUIController()");
-    delete iRemoteControlHandler;
-    delete iSystemEventHandler;
-    delete iEngineHandler;
-    delete iStateHandle;
+	delete iSecurityModeObserver;
+	delete iRemoteControlHandler;
+	delete iSystemEventHandler;
+	delete iEngineHandler;
+	delete iKeyEventForwarder;
+//    delete iStateHandle; <-- CCoeStatic objects are destroyed outside application
     }
 
 // ---------------------------------------------------------
@@ -158,6 +177,14 @@
     const TInt aCallId ) 
     {
     __PHONELOGENGINEMSG( aMessage, aCallId );
+    
+    // PhoneCmdHandler is using Call information API so 
+	// Remote Control Handler can be constructed only after CCCE is constructed.
+	if ( aMessage == EPEMessagePEConstructionReady )
+		{
+		TRAP_IGNORE( ConstructRemoteControlHandlerL() );
+		}
+        	
     TRAPD( err, iEngineHandler->DoHandleMessageL( aMessage, aCallId ) );
 
     if ( err != KErrNone )
@@ -182,7 +209,7 @@
     {
     TInt err( KErrNone );
     
-       TRAP( err, iStateMachine->State()->HandleErrorL( aErrorInfo ) );            
+   	TRAP( err, iStateMachine->State()->HandleErrorL( aErrorInfo ) );	    	
     
     if( err != KErrNone )
         {
@@ -191,7 +218,7 @@
             EPhoneControl,
             "PHONEUI_ERROR: CPhoneUIController::HandleError -  leave (err=%d)",
             err);
-           __ASSERT_DEBUG( EFalse, Panic( EPhoneCtrlUnknownPanic ) );
+       	__ASSERT_DEBUG( EFalse, Panic( EPhoneCtrlUnknownPanic ) );
         }
     }    
 
@@ -203,26 +230,34 @@
     const TKeyEvent& aKeyEvent,
     TEventCode aEventCode )
     {
-    if ( aEventCode == EEventKey )
-        {
-        iStateMachine->State()->HandleKeyMessageL( 
-                        MPhoneKeyEvents::EPhoneKeyShortPress, 
-                        TKeyCode( aKeyEvent.iCode ) );
-        
-        iStateMachine->State()->HandleDtmfKeyToneL( aKeyEvent, aEventCode );
-        }
-    else if ( aEventCode == EEventLongPress )
-        {
-        iStateMachine->State()->HandleKeyMessageL( 
-                        MPhoneKeyEvents::EPhoneKeyLongPress, 
-                        TKeyCode( aKeyEvent.iCode ) );    
-        }
-    else 
-        {
-        iStateMachine->State()->HandleDtmfKeyToneL( aKeyEvent, aEventCode );
-        }
-        
-    return EKeyWasNotConsumed;
+    __ASSERT_DEBUG( iKeyEventForwarder, Panic( EPhoneCtrlInvariant ) );
+    return iKeyEventForwarder->OfferKeyEventAfterControlStackL( 
+                aKeyEvent,
+                aEventCode );
+    }
+
+// ---------------------------------------------------------
+// CPhoneUIController::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPhoneUIController::DynInitMenuPaneL( 
+    TInt aResourceId, 
+    CEikMenuPane* aMenuPane )
+    {
+    __ASSERT_DEBUG( iSystemEventHandler, Panic( EPhoneCtrlInvariant ) );
+    iSystemEventHandler->DynInitMenuPaneL( aResourceId, aMenuPane );
+    }
+
+// ---------------------------------------------------------
+// CPhoneUIController::DynInitMenuBarL
+// ---------------------------------------------------------
+//
+EXPORT_C void CPhoneUIController::DynInitMenuBarL( 
+    TInt aResourceId, 
+    CEikMenuBar* aMenuBar )
+    {
+    __ASSERT_DEBUG( iSystemEventHandler, Panic( EPhoneCtrlInvariant ) );
+    iSystemEventHandler->DynInitMenuBarL( aResourceId, aMenuBar );
     }
 
 // ---------------------------------------------------------
@@ -304,6 +339,17 @@
     {
     __ASSERT_DEBUG( iStateMachine->State(), Panic( EPhoneCtrlInvariant ) );
 
+	// Send key up message to engine so that we wouldn't accidentally play
+	// any DTMF tone.
+    
+    // DTMF tone is not ended if command is EPhoneDialerValidNumber or
+    // EPhoneDialerInvalidNumber. These commands result from
+    // user pressing numbers, and they must not interfere with tones.
+    if ( ! ( aCommand == EPhoneDialerValidNumber || aCommand == EPhoneDialerInvalidNumber ) )
+        {
+        iStateMachine->SendPhoneEngineMessage( MPEPhoneModel::EPEMessageEndDTMF );
+        }
+
     return iStateMachine->State()->HandleCommandL( aCommand );
     }
 
@@ -317,52 +363,41 @@
     return iStateMachine->State()->ProcessCommandL( aCommand );
     }
 
-
-// ---------------------------------------------------------
-// CPhoneUIController::HandleKeyLockEnabled
-// ---------------------------------------------------------
-//
-EXPORT_C void CPhoneUIController::HandleKeyLockEnabled( TBool aKeylockEnabled )
-    {
-    iSystemEventHandler->HandleKeyLockEnabled( aKeylockEnabled );
-    }
-
 // ---------------------------------------------------------
 // CPhoneUIController::CreateProtocolDllL
 // ---------------------------------------------------------
 //
-void CPhoneUIController::CreateProtocolDllL( 
-    MPhoneViewCommandHandle* aViewCommandHandle )
-    {
-    TBool voipSupported( EFalse );
+void CPhoneUIController::CreateProtocolDllL( CPhoneViewController& aViewController )
+	{
+	TBool voipSupported( EFalse );
 
     if( FeatureManager::FeatureSupported( KFeatureIdCommonVoip ) )
-        {
-        TInt dynamicVoIP( KDynamicVoIPOff );
-        CPhoneCenRepProxy::Instance()->GetInt( 
-            KCRUidTelephonySettings, KDynamicVoIP, dynamicVoIP );
-            
-        if( dynamicVoIP == KDynamicVoIPOn )
-            {
-            voipSupported = ETrue;                
-            }
-        }
+	    {
+	    TInt dynamicVoIP( KDynamicVoIPOff );
+		CPhoneCenRepProxy::Instance()->GetInt( 
+	        KCRUidTelephonySettings, KDynamicVoIP, dynamicVoIP );
+	        
+	    if( dynamicVoIP == KDynamicVoIPOn )
+		    {
+			voipSupported = ETrue;		    	
+		    }
+	    }
 
     if( voipSupported )
-        {
-        iStateHandle = CPhoneStateHandle::CreateL(
-            aViewCommandHandle,
-            KVoIPExtension,
-            KUidAppVoIPExtensionStates );                        
-        }
-    else
-        {
-        iStateHandle = CPhoneStateHandle::CreateL(
-            aViewCommandHandle,
-            KGSMProtocol,
-            KUidAppGSMStates );            
-        }        
-    }
+	    {
+	    iStateHandle = CPhoneStateHandle::CreateL(
+	        &aViewController,
+	        KVoIPExtension,
+	        KUidAppVoIPExtensionStates );				    	
+	    }
+	else
+		{
+	    iStateHandle = CPhoneStateHandle::CreateL(
+	        &aViewController,
+	        KGSMProtocol,
+	        KUidAppGSMStates );			
+		}		
+	}
 
 // ---------------------------------------------------------
 // CPhoneUIController::HandlePhoneNumberEditorCallBack
@@ -384,6 +419,17 @@
 //
 void CPhoneUIController::DoHandlePhoneNumberEditorCallBack()
     {
+    iStateMachine->State()->HandleNumberEntryEdited();
+    }
+
+// ---------------------------------------------------------
+// CPhoneUIController::ConstructRemoteControlHandlerL
+// ---------------------------------------------------------
+//
+void CPhoneUIController::ConstructRemoteControlHandlerL()
+    { 
+	// Create the remote control handler
+	iRemoteControlHandler = CPhoneRemoteControlHandler::NewL( iStateMachine );
     }
 
 //  End of File