--- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Tue Feb 02 00:10:04 2010 +0200
+++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Fri Feb 19 22:50:26 2010 +0200
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2005 - 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"
@@ -23,6 +23,8 @@
#include "cphonetoolbarcontroller.h"
#include "cphonebuttonscontroller.h"
#include "cphonedialercontroller.h"
+#include "cphoneeasydialingcontroller.h"
+#include "cphonedtmfdialercontroller.h"
#include "cphonemenucontroller.h"
#include "cphonenotecontroller.h"
#include "cphonequerycontroller.h"
@@ -106,7 +108,7 @@
#include <cphcntcontactid.h>
#include <AknUtils.h>
#include <AknSgcc.h>
-#include <SettingsInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
#include <UikonInternalPSKeys.h>
#include <startupdomainpskeys.h>
#include <utf.h>
@@ -128,7 +130,9 @@
#include <gfxtranseffect/gfxtranseffect.h>
#include <akntranseffect.h>
-#include <GSLauncher.h> // Call Settings launch.
+#include <gslauncher.h> // Call Settings launch.
+
+#include <dialingextensioninterface.h>
// Kastor effect IDs, aknskincontent/101f84b9.sel
const TInt KTouchDialerOpenEffect = 1505;
@@ -209,32 +213,40 @@
iEikEnv.WsSession(),
iEikEnv.WsSession().FindWindowGroupIdentifier( 0, KPhoneEikonServer ) );
+ CCoeEnv* coeEnv = CCoeEnv::Static();
+
if ( FeatureManager::FeatureSupported( KFeatureIdTouchCallHandling ) )
{
iButtonsController = CPhoneButtonsController::NewL( iBubbleWrapper->TouchPane() );
+ iToolbarController = CPhoneToolbarController::NewL( *coeEnv );
}
if ( FeatureManager::FeatureSupported( KFeatureIdOnScreenDialer ) )
{
+ iDialerActive = EFalse;
+ // Create dialer controller
+ iDialerController = CPhoneDialerController::NewL( iBubbleWrapper,
+ *coeEnv );
// Create dialer view
iDialerView = CPhoneDialerView::NewL( aRect );
iDialerView->DrawableWindow()->SetOrdinalPosition( -1 );
iDialerView->MakeVisible( EFalse );
// Create dialer
- iDialer = CDialer::NewL( *iDialerView, aRect );
+ iDialer = CDialer::NewL( *iDialerView, aRect, iDialerController );
// Set NE for bubbleWrapper
iBubbleWrapper->SetNumberEntry( iDialer->NumberEntry() );
- CCoeEnv* coeEnv = static_cast<CCoeControl*>(iDialer)->ControlEnv();
- iDialerController = CPhoneDialerController::NewL( *iBubbleWrapper,
- *coeEnv,
- *iMenuController );
+ iBubbleWrapper->SetNumberEntryObserver( *this );
+ // Finalise dialer view
+ iDialerView->SetControl( iDialer );
+ iDialerView->ActivateL();
- iToolbarController = CPhoneToolbarController::NewL( *coeEnv );
-
-
- iDialerView->SetControl( iDialer );
- iDialerView->ActivateL();
- iDialerActive = EFalse;
+ // Create controller for Easy Dialing
+ iEasyDialingController = CPhoneEasyDialingController::NewL( *iDialer );
+ iDialerController->SetEasyDialingController( iEasyDialingController );
+
+ // Create controller for DTMF mode of the dialer
+ iDtmfDialerController = CPhoneDtmfDialerController::NewL( iBubbleWrapper,
+ *coeEnv );
}
User::LeaveIfError( iKeyLock.Connect() );
@@ -298,6 +310,10 @@
}
delete iDialerView;
}
+
+ delete iEasyDialingController;
+ delete iDtmfDialerController;
+
delete iDialer;
if ( iSingleItemFetch )
{
@@ -542,7 +558,7 @@
{
if ( iDialer )
{
- iDialerController->UpdateToolbar();
+ iDialer->UpdateToolbar();
}
}
break;
@@ -745,8 +761,13 @@
break;
case EPhoneViewMenuPane:
- iMenuController->SetReplaceFlag( IsReplaceAllowed() );
- iMenuController->DynInitMenuPaneL( aCommandParam );
+ // First offer initialization to easydialing, and if no
+ // initialization done, give it to the menu controller.
+ if ( !iEasyDialingController->InitializeEasyDialingMenuL( aCommandParam ) )
+ {
+ iMenuController->SetReplaceFlag( IsReplaceAllowed() );
+ iMenuController->DynInitMenuPaneL( aCommandParam );
+ }
break;
case EPhoneViewMenuBar:
@@ -918,7 +939,7 @@
if ( iDialer )
{
- iDialerController->SetServiceCodeFlagL( aCommandParam );
+ iDialerController->SetServiceCodeFlag( aCommandParam );
}
break;
@@ -1057,13 +1078,19 @@
{
TPhoneCmdParamBoolean* booleanParam =
static_cast<TPhoneCmdParamBoolean*>( aCommandParam );
- iDialerController->SetDtmfDialerVisibleL(
- booleanParam->Boolean() );
+ if ( booleanParam->Boolean() )
+ {
+ iDialer->SetControllerL( iDtmfDialerController );
+ }
+ else
+ {
+ iDialer->SetControllerL( iDialerController );
+ }
}
break;
}
- case EPhoneViewSetRetrictedDialer:
+ case EPhoneViewSetRestrictedDialer:
{
if ( iDialer )
{
@@ -1106,10 +1133,12 @@
case EPhoneViewShowCustomizedDialer:
{
- TPhoneCmdParamCustomDialer* customDialerParam =
- static_cast<TPhoneCmdParamCustomDialer*>( aCommandParam );
- iDialerController->ShowCustomizedDialerL(
- customDialerParam->DialerController() );
+ if ( iDialer )
+ {
+ TPhoneCmdParamCustomDialer* customDialerParam =
+ static_cast<TPhoneCmdParamCustomDialer*>( aCommandParam );
+ iDialer->SetControllerL( customDialerParam->DialerController() );
+ }
}
break;
case EPhoneViewGetNumberFromEntry:
@@ -1148,6 +1177,21 @@
iToolbarController->DimToolbar( booleanParam->Boolean());
break;
}
+
+ case EPhoneViewSetInvalidCsPhoneNumberFlag:
+ iMenuController->SetInvalidCsPhoneNumberFlag( aCommandParam );
+ break;
+
+ case EPhoneViewGetInvalidCsPhoneNumberFlag:
+ iMenuController->GetInvalidCsPhoneNumberFlag( aCommandParam );
+ break;
+
+ case EPhoneViewGetEasyDialingMenuId:
+ case EPhoneViewGetEasyDialingCbaId:
+ {
+ iEasyDialingController->ExecuteCommandL( aCmdId, aCommandParam );
+ }
+ break;
default:
__PHONELOG( EBasic, EPhonePhoneapp,
@@ -1372,7 +1416,11 @@
static_cast<TPhoneCmdParamTransEffect*>( aCommandParam )->Type();
TBool isForeground = iAppui->IsForeground();
- if ( isForeground && // newer run effect if not at front
+ // Check whether the idle is on foreground
+ TBool idleInFore = ForegroundApplicationWindowGroupId() == IdleWindowGroupId() ?
+ ETrue : EFalse;
+
+ if ( isForeground && // Newer run effect if not at front
( ( type == EPhoneTransEffectDialerCreate && !iDialerActive ) ||
( type == EPhoneTransEffectDialerOpen && !iDialerActive &&
iBubbleWrapper->IsNumberEntryUsed() ) ||
@@ -1380,6 +1428,12 @@
{
HandleTransitionEffect( type );
}
+ // In case transition is from idle to dialer show transition effects as well.
+ else if ( idleInFore && !iDialerActive &&
+ type == EPhoneTransEffectDialerCreate )
+ {
+ HandleTransitionEffect( type );
+ }
}
break;
}
@@ -1408,8 +1462,7 @@
case EPhoneViewSetNumberEntryObserver:
{
- NumberEntryChangedHandler()->SetNumberEntryChangedCallBack(
- aCommandParam );
+ iBubbleWrapper->SetNumberEntryChangedCallBack( aCommandParam );
break;
}
case EPhoneViewGetSingleItemFetchType:
@@ -1447,9 +1500,11 @@
break;
case EPhoneViewEnableToolbarButton:
+ {
TPhoneCmdParamInteger* integerParam =
static_cast<TPhoneCmdParamInteger*>( aCommandParam );
iToolbarController->SetToolbarButtonDimmed( integerParam->Integer(), EFalse );
+ }
break;
default:
@@ -1493,7 +1548,26 @@
}
break;
- case EPhoneViewIsNumberEntryNumericMode:
+ case EPhoneViewGetEasyDialingInFocusStatus:
+ case EEasyDialingVoiceCall:
+ case EEasyDialingVideoCall:
+ case EEasyDialingSendMessage:
+ case EEasyDialingOpenContact:
+ case EEasyDialingCallHandlingActivated:
+ case EEasyDialingEnterKeyAction:
+ case EEasyDialingOn:
+ case EEasyDialingOff:
+ if ( iDialer )
+ {
+ viewResponse = iEasyDialingController->HandleCommandL( aCmdId );
+ }
+ else
+ {
+ viewResponse = EPhoneViewResponseFailed;
+ }
+ break;
+
+ case EPhoneViewIsNumberEntryNumericMode:
viewResponse = iBubbleWrapper->IsNENumericMode() ?
EPhoneViewResponseSuccess :
EPhoneViewResponseFailed;
@@ -1579,9 +1653,9 @@
case EPhoneViewIsDTMFEditorVisible:
if ( iDialer )
{
- viewResponse = iDialerController->IsDTMFDialerVisible() ?
+ viewResponse = ( IsDtmfDialerActive() ?
EPhoneViewResponseSuccess :
- EPhoneViewResponseFailed;
+ EPhoneViewResponseFailed );
}
else // non-touch.
{
@@ -1631,13 +1705,13 @@
RemovePhoneDialogsL();
}
// Remove DTMF dialer when exist
- if ( iDialerController->IsDTMFDialerVisible() )
+ if ( IsDtmfDialerActive() )
{
static_cast<MEikCommandObserver*>( CEikonEnv::Static()->EikAppUi() )
->ProcessCommandL( EPhoneDtmfDialerExit );
}
else if ( iCustomization &&
- iDialerController->IsCustomizedDialerVisible() )
+ IsCustomDialerActive() )
{
iCustomization->HandleCommandL(
*this, EPhoneViewOpenCallHandling, NULL );
@@ -1683,7 +1757,7 @@
case EPhoneIsCustomizedDialerVisible:
{
- viewResponse = iDialerController->IsCustomizedDialerVisible() ?
+ viewResponse = IsCustomDialerActive() ?
EPhoneViewResponseSuccess :
EPhoneViewResponseFailed;
}
@@ -1691,8 +1765,11 @@
case EPhoneViewHideCustomizedDialer:
{
- iDialerController->HideCustomizedDialer();
- viewResponse = EPhoneViewResponseSuccess;
+ if ( iDialer )
+ {
+ iDialer->SetControllerL( iDialerController );
+ viewResponse = EPhoneViewResponseSuccess;
+ }
}
break;
case EPhoneViewShowToolbar:
@@ -1841,19 +1918,19 @@
case EPhoneViewGetCustomizedDialerMenuResourceId:
{
- TInt resId = iDialerController->CustomizedMenuResourceId();
+ TInt resId = iDialer->Controller()->MenuResourceId(); // easydialing change
static_cast<TPhoneCmdParamInteger*>( aCommandParam )->SetInteger( resId );
viewResponse = EPhoneViewResponseSuccess;
}
break;
case EPhoneViewGetCustomizedDialerCbaResourceId:
{
- TInt resId = iDialerController->CustomizedCbaResourceId();
+ TInt resId = iDialer->Controller()->CbaResourceId(); // easydialing change
static_cast<TPhoneCmdParamInteger*>( aCommandParam )->SetInteger( resId );
viewResponse = EPhoneViewResponseSuccess;
}
break;
-
+
default:
if ( iCustomization )
{
@@ -2029,18 +2106,13 @@
"CPhoneViewController::HandleResourceChangeL()" )
// Notify the bubble that there has been a resource change
iBubbleWrapper->Control()->HandleResourceChange( aType );
-
+
// Notify dialer and switch statuspane layout.
if ( iDialer )
{
if ( aType == KEikDynamicLayoutVariantSwitch )
{
SwitchLayoutToFlatStatusPaneL( iDialerActive );
-
- if ( !iDialerActive && Layout_Meta_Data::IsLandscapeOrientation() )
- {
- iDialerController->HideToolbar();
- }
}
static_cast<CCoeControl*>(iDialer)->HandleResourceChange( aType );
}
@@ -2064,10 +2136,10 @@
__PHONELOG( EBasic, EPhoneUIView,"CPhoneViewController::HandleLayoutChange()" )
iPhoneView->SetRect( aRect );
if ( iDialerView )
- {
- iDialerView->SetRect( aRect );
- iStatusPane->UpdateTitlePane();
- }
+ {
+ iDialerView->SetRect( aRect );
+ iStatusPane->UpdateTitlePane();
+ }
}
// ---------------------------------------------------------------------------
@@ -2112,6 +2184,17 @@
}
// ---------------------------------------------------------------------------
+// CPhoneViewController::NumberEntryStateChanged
+// ---------------------------------------------------------------------------
+//
+void CPhoneViewController::NumberEntryStateChanged( TBool aEntryHasText )
+ {
+ iBubbleWrapper->HandleNumberEntryChanged();
+ iMenuController->SetNumberEntryEmptyFlag( !aEntryHasText );
+ ExecuteCommandL( EPhoneViewUpdateToolbar );
+ }
+
+// ---------------------------------------------------------------------------
// CPhoneViewController::GetBlockingDialogIsDisplayed
// ---------------------------------------------------------------------------
//
@@ -2596,7 +2679,9 @@
TInt resourceId = cbaResource->Integer();
iCba->SetCommandSetL( resourceId );
+
iCba->DrawDeferred();
+
}
// ---------------------------------------------------------------------------
@@ -3734,24 +3819,32 @@
{
iDialerActive = ETrue;
+ // Hide in-call view toolbar
+ iToolbarController->HideToolbar();
+
+ // Ensure that toolbar and menu commands are up-to-date
+ TBuf<1> temp; // we are only interested if the text is empty or not
+ iDialer->GetTextFromNumberEntry( temp );
+ NumberEntryStateChanged( temp.Length() > 0 );
+
// Make dialer view top most
iDialerView->DrawableWindow()->SetOrdinalPosition(
iPhoneView->DrawableWindow()->OrdinalPosition() );
- iDialerView->MakeVisible( ETrue );
- iDialerView->DrawNow();
SwitchLayoutToFlatStatusPaneL( ETrue );
iPhoneView->DrawableWindow()->SetOrdinalPosition( -1 );
iPhoneView->MakeVisible( EFalse );
- iToolbarController->HideToolbar();
- iDialerController->ShowToolbar();
-
// Update control stack
iAppui->AddToStackL( iDialerView );
- iAppui->RemoveFromStack( iPhoneView );
- }
+ iAppui->RemoveFromStack( iPhoneView );
+
+ // Don't make dialer view visible before status pane is updated.
+ // This prevents unnecessary resizings.
+ iDialerView->MakeVisible( ETrue );
+ iDialerView->DrawDeferred();
+ }
}
// ---------------------------------------------------------------------------
@@ -3763,34 +3856,36 @@
__PHONELOG1( EBasic, EPhoneUIView,
"CPhoneViewController::SetControltoCallHandlingL iDialerActive (%d)", iDialerActive );
+ // If securitymode or emergency call not show toolbar
+ if ( !iPhoneView->IsSecurityMode() &&
+ !iIncallIndicator->IsEmergencyCall() )
+ {
+ iToolbarController->ShowToolbar();
+ }
if ( iDialerActive )
{
iDialerActive = EFalse;
-
+ // Hide dialer view. Do this before resizing status pane to prevent unnecessary
+ // resizing of dialer components. Hiding dialer view already before showing
+ // phone view might cause screen flickering but tests have proven it doesn't happen.
+ iDialerView->MakeVisible( EFalse );
+
SwitchLayoutToFlatStatusPaneL( EFalse );
- // Make call handling view top most
- iPhoneView->DrawableWindow()->SetOrdinalPosition(
+ // Make call handling view top most
+ iPhoneView->DrawableWindow()->SetOrdinalPosition(
iDialerView->DrawableWindow()->OrdinalPosition() );
iPhoneView->MakeVisible( ETrue );
iPhoneView->DrawNow();
- iDialerView->DrawableWindow()->SetOrdinalPosition( -1 );
- iDialerView->MakeVisible( EFalse );
-
- iDialerController->HideToolbar();
+ iDialerView->DrawableWindow()->SetOrdinalPosition( -1 );
// Update control stack
- iAppui->AddToStackL( iPhoneView );
- iAppui->RemoveFromStack( iDialerView );
- }
-
- // If securitymode or emergency call not show toolbar
- if ( !iPhoneView->IsSecurityMode() &&
- !iIncallIndicator->IsEmergencyCall() )
- {
- iToolbarController->ShowToolbar();
- }
+ iAppui->AddToStackL( iPhoneView );
+ iAppui->RemoveFromStack( iDialerView );
+
+ iEasyDialingController->HandleCommandL( EEasyDialingCallHandlingActivated );
+ }
}
// ---------------------------------------------------------------------------
@@ -3897,16 +3992,32 @@
}
// ---------------------------------------------------------------------------
-// CPhoneViewController::NumberEntryChangedHandler
+// CPhoneViewController::IsDtmfDialerActive
// ---------------------------------------------------------------------------
//
-MPhoneNumberEntryChangedHandler* CPhoneViewController::NumberEntryChangedHandler() const
+TBool CPhoneViewController::IsDtmfDialerActive() const
{
- if( iDialerController )
- return iDialerController;
- else
- return iBubbleWrapper;
-
+ TBool ret =
+ ( iDialer && iDtmfDialerController &&
+ iDialer->Controller() == iDtmfDialerController );
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CPhoneViewController::IsCustomDialerActive
+// ---------------------------------------------------------------------------
+//
+TBool CPhoneViewController::IsCustomDialerActive() const
+ {
+ TBool ret = EFalse;
+ if ( iDialer )
+ {
+ MPhoneDialerController* curController = iDialer->Controller();
+ ret = ( curController &&
+ curController != iDialerController &&
+ curController != iDtmfDialerController );
+ }
+ return ret;
}
// End of File