# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1274780510 -10800 # Node ID b68fcd92391126fe4814c8343931a20895471489 # Parent ba54057fe0274f0d1dc8d2b6ec42e31ff320fa33 Revision: 201019 Kit: 2010121 diff -r ba54057fe027 -r b68fcd923911 phoneapp/phoneui/src/cphoneappui.cpp --- a/phoneapp/phoneui/src/cphoneappui.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/phoneui/src/cphoneappui.cpp Tue May 25 12:41:50 2010 +0300 @@ -35,7 +35,6 @@ #include // KAknsMessageSkinChange #include #include -#include #include // for Notification for startup... #include #include // EikSoftkeyImage @@ -129,10 +128,6 @@ iEnvChangeNotifier->Start(); - // Push key sounds to sound system. - CAknKeySoundSystem* keySounds = KeySounds(); - keySounds->PushContextL( R_PHONEUI_DEFAULT_SKEY_LIST ); - iPhoneViewController = CPhoneViewController::NewL( ClientRect() ); iPhoneUIController = CPhoneUIController::NewL( *iPhoneViewController ); diff -r ba54057fe027 -r b68fcd923911 phoneapp/phoneuicontrol/src/cphonestateincall.cpp --- a/phoneapp/phoneuicontrol/src/cphonestateincall.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/phoneuicontrol/src/cphonestateincall.cpp Tue May 25 12:41:50 2010 +0300 @@ -300,8 +300,6 @@ // Remove call iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId ); - //Make sure that toolbar is not shown - iViewCommandHandle->ExecuteCommandL( EPhoneViewHideToolbar ); BeginUiUpdateLC(); SetDefaultFlagsL(); if ( IsNumberEntryUsedL() ) @@ -363,6 +361,9 @@ // Go to idle state iStateMachine->ChangeState( EPhoneStateIdle ); + + //Make sure that toolbar is not shown + iViewCommandHandle->ExecuteCommandL( EPhoneViewHideToolbar ); } // ----------------------------------------------------------- diff -r ba54057fe027 -r b68fcd923911 phoneapp/phoneuistates/src/cphoneemergency.cpp --- a/phoneapp/phoneuistates/src/cphoneemergency.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/phoneuistates/src/cphoneemergency.cpp Tue May 25 12:41:50 2010 +0300 @@ -218,6 +218,8 @@ if ( aCallId == KEmergencyCallId ) { iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveCallHeader, aCallId ); + // Make sure that toolbar is not shown any more + iViewCommandHandle->ExecuteCommandL( EPhoneViewHideToolbar ); // Remove emergency connecting note if still there iViewCommandHandle->ExecuteCommandL( EPhoneViewRemoveNote ); // Close menu bar, if it is displayed @@ -338,6 +340,14 @@ // Close menu bar, if it is displayed iViewCommandHandle->ExecuteCommandL( EPhoneViewMenuBarClose ); + // Dim toolbar items + SetToolbarDimming( ETrue ); + + // Request that dimmed toolbar is visible. + // Do it already here. Otherwice a white/black toolbar area is shortly shown and + // a white screen can be a result when touching it. + iViewCommandHandle->HandleCommandL( EPhoneViewShowToolbar ); + // Disable global notes when the phone is dialling TPhoneCmdParamBoolean globalNotifierParam; globalNotifierParam.SetBoolean( ETrue ); @@ -381,8 +391,6 @@ SetTouchPaneButtons( EPhoneEmergencyCallButtons ); - SetToolbarDimming( ETrue ); - ShowNoteL( EPhoneEmergencyConnectWaitNote ); UpdateSetupCbaL(); diff -r ba54057fe027 -r b68fcd923911 phoneapp/phoneuiview/src/cphoneviewcontroller.cpp --- a/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/phoneuiview/src/cphoneviewcontroller.cpp Tue May 25 12:41:50 2010 +0300 @@ -142,6 +142,8 @@ const TInt KTouchDialerOpenEffect = 3; const TInt KTouchDialerCloseEffect = 5; +const TInt KDialerInputMaxChars( 100 ); + // ================= MEMBER FUNCTIONS ======================= // --------------------------------------------------------------------------- @@ -178,6 +180,8 @@ // Reserve the title pane iStatusPane->AddTitlePaneHandlerL( *this ); iStatusPane->ReserveTitlePane( *this ); + // Set status pane dimming + iStatusPane->StatusPane().SetDimmed( iSecurityMode ); iAppui = (CAknAppUi*)iEikEnv.EikAppUi(); iCba = iEikEnv.AppUiFactory()->Cba(); @@ -2167,12 +2171,39 @@ iMenuController->SetSecurityMode( aIsEnabled ); if ( iDialer ) { - iDialerController->SetRestrictedDialer( aIsEnabled ); + CDialingExtensionInterface* easyDialing = iDialer->GetEasyDialingInterface(); + if ( easyDialing ) + { + if ( aIsEnabled ) + { + // Reset the Easy Dialing just in case, this clears the existing matches + // when restricted mode is activated + easyDialing->Reset(); + } + else + { + if ( easyDialing->IsEnabled() ) + { + // If Easy Dialing is enabled, set the input from the numeric entry + // field for updating the search result when restricted mode is + // deactivated. + TBuf buf; + iDialer->NumberEntry()->GetTextFromNumberEntry( buf ); + easyDialing->SetInputL( buf ); + } + } + } + iDialerController->SetRestrictedDialer( aIsEnabled ); if ( iSecurityMode != aIsEnabled ) { iDialer->RelayoutAndDraw(); } } + if ( iSecurityMode != aIsEnabled ) + { + // Update status pane dimming + iStatusPane->StatusPane().SetDimmed( aIsEnabled ); + } iSecurityMode = aIsEnabled; } @@ -3623,53 +3654,32 @@ __LOGMETHODSTARTEND(EPhoneUIView, "CPhoneViewController::SwitchLayoutToFlatStatusPaneL()" ); - TInt currentLayout = iStatusPane->StatusPane().CurrentLayoutResId(); - if ( aSwitch ) { - // If current layout is different than flat layout then we - // need to do PushDefault for navipane and SwitchLayoutL for - // statuspane. - if ( currentLayout != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT || - currentLayout != R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ) + SwapEmptyIndicatorPaneInSecureStateL( ETrue ); + if ( !Layout_Meta_Data::IsLandscapeOrientation() ) { - SwapEmptyIndicatorPaneInSecureStateL( ETrue ); - - // Push default so that Operator name can be shown in title pane. - iStatusPane->NaviPane().PushDefaultL(); - - if ( !Layout_Meta_Data::IsLandscapeOrientation() ) - { - iStatusPane->StatusPane().SwitchLayoutL - ( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); - } - else - { - iStatusPane->StatusPane().SwitchLayoutL - ( R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ); - } + iStatusPane->StatusPane().SwitchLayoutL + ( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ); + } + else + { + iStatusPane->StatusPane().SwitchLayoutL + ( R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ); } } else { - // If current layout is flat layout then do Pop for navipane, - // layout is something else there is no need to do Pop and - // SwitchLayoutL for statuspane. - if ( currentLayout == R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT || - currentLayout == R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ) + SwapEmptyIndicatorPaneInSecureStateL( EFalse ); + if ( !Layout_Meta_Data::IsLandscapeOrientation() ) { - SwapEmptyIndicatorPaneInSecureStateL( EFalse ); - - if ( !Layout_Meta_Data::IsLandscapeOrientation() ) - { - iStatusPane->StatusPane().SwitchLayoutL - ( R_AVKON_STATUS_PANE_LAYOUT_IDLE ); - } - else - { - iStatusPane->StatusPane().SwitchLayoutL - ( R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ); - } + iStatusPane->StatusPane().SwitchLayoutL + ( R_AVKON_STATUS_PANE_LAYOUT_IDLE ); + } + else + { + iStatusPane->StatusPane().SwitchLayoutL + ( R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL_FLAT ); } } // ApplyCurrentSettingsL is called whenever statuspane @@ -3786,9 +3796,6 @@ { 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 ); @@ -3798,23 +3805,27 @@ iDialerView->DrawableWindow()->SetOrdinalPosition( iPhoneView->DrawableWindow()->OrdinalPosition() ); + // Hide in-call view toolbar + iToolbarController->HideToolbar(); + SwitchLayoutToFlatStatusPaneL( ETrue ); + // Don't make dialer view visible before status pane is updated. + // This prevents unnecessary resizings. + // But do it right away after it. Otherwice a black toolbar area is shortly shown. + iDialerView->MakeVisible( ETrue ); + // Number entry is emptied when dialer is hidden but drawing doesn't + // succeed at that point as dialer is hidden first. So must draw + // dialer as soon as it becomes visible to prevent the flashing of + // number entry (DrawDeferred() isn't fast enough here). + iDialerView->DrawNow(); + iPhoneView->DrawableWindow()->SetOrdinalPosition( -1 ); iPhoneView->MakeVisible( EFalse ); // Update control stack iAppui->AddToStackL( iDialerView ); iAppui->RemoveFromStack( iPhoneView ); - - // Don't make dialer view visible before status pane is updated. - // This prevents unnecessary resizings. - iDialerView->MakeVisible( ETrue ); - // Number entry is emptied when dialer is hidden but drawing doesn't - // succeed at that point as dialer is hidden first. So must draw - // dialer as soon as it becomes visible to prevent the flashing of - // number entry (DrawDeferred() isn't fast enough here). - iDialerView->DrawNow(); } } diff -r ba54057fe027 -r b68fcd923911 phoneapp/phoneuiview/src/phoneringingtonesrv.cpp --- a/phoneapp/phoneuiview/src/phoneringingtonesrv.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/phoneuiview/src/phoneringingtonesrv.cpp Tue May 25 12:41:50 2010 +0300 @@ -265,6 +265,14 @@ TProfileRingingType ringingType = (TProfileRingingType)aMessage.Int2(); TInt ttsLen = aMessage.GetDesLength( 0 ); + + if( ttsLen <= 0 ) + { + PHONEUIVIEW_PRINTF("CPhoneRingingToneServer::PlayTtsTone: TTS length error: %d!", ttsLen); + PHONEUIVIEW_PRINT("CPhoneRingingToneServer::PlayTtsTone >"); + return; + } + HBufC* textToSay = HBufC::New( ttsLen ); if ( !textToSay ) { diff -r ba54057fe027 -r b68fcd923911 phoneapp/phoneuivoipextension/src/cphonevcchandler.cpp --- a/phoneapp/phoneuivoipextension/src/cphonevcchandler.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/phoneuivoipextension/src/cphonevcchandler.cpp Tue May 25 12:41:50 2010 +0300 @@ -312,7 +312,7 @@ if ( tone == 1 ) { - globalNoteParam.SetTone( EAvkonSIDConfirmationTone ); + globalNoteParam.SetTone( EAvkonSIDDefaultSound ); } else { diff -r ba54057fe027 -r b68fcd923911 phoneapp/silenceactionplugin/data/silence.rul --- a/phoneapp/silenceactionplugin/data/silence.rul Tue May 11 16:13:03 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ - \ No newline at end of file diff -r ba54057fe027 -r b68fcd923911 phoneapp/silenceactionplugin/data/silenceringingtone_activate.rul --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/silenceactionplugin/data/silenceringingtone_activate.rul Tue May 25 12:41:50 2010 +0300 @@ -0,0 +1,63 @@ + \ No newline at end of file diff -r ba54057fe027 -r b68fcd923911 phoneapp/silenceactionplugin/data/silenceringingtone_silence.rul --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneapp/silenceactionplugin/data/silenceringingtone_silence.rul Tue May 25 12:41:50 2010 +0300 @@ -0,0 +1,30 @@ + \ No newline at end of file diff -r ba54057fe027 -r b68fcd923911 phoneapp/silenceactionplugin/group/bld.inf --- a/phoneapp/silenceactionplugin/group/bld.inf Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/silenceactionplugin/group/bld.inf Tue May 25 12:41:50 2010 +0300 @@ -23,11 +23,17 @@ DEFAULT PRJ_EXPORTS -../data/silence.rul\ - /epoc32/RELEASE/winscw/UDEB/Z/private/10282BC4/Rules/silence.rul +../data/silenceringingtone_activate.rul\ + /epoc32/RELEASE/winscw/UDEB/Z/private/10282BC4/Rules/silenceringingtone_activate.rul + +../data/silenceringingtone_activate.rul\ + /epoc32/data/Z/private/10282BC4/Rules/silenceringingtone_activate.rul -../data/silence.rul\ - /epoc32/data/Z/private/10282BC4/Rules/silence.rul +../data/silenceringingtone_silence.rul\ + /epoc32/RELEASE/winscw/UDEB/Z/private/10282BC4/Rules/silenceringingtone_silence.rul + +../data/silenceringingtone_silence.rul\ + /epoc32/data/Z/private/10282BC4/Rules/silenceringingtone_silence.rul ../data/silenceactionplugin_stub.SIS\ /epoc32/data/z/system/install/silenceactionplugin_stub.SIS diff -r ba54057fe027 -r b68fcd923911 phoneapp/silenceactionplugin/rom/silenceactionplugin.iby --- a/phoneapp/silenceactionplugin/rom/silenceactionplugin.iby Tue May 11 16:13:03 2010 +0300 +++ b/phoneapp/silenceactionplugin/rom/silenceactionplugin.iby Tue May 25 12:41:50 2010 +0300 @@ -22,7 +22,8 @@ #ifdef RD_CONTEXT_FRAMEWORK ECOM_PLUGIN( silenceactionplugin.dll, silenceactionplugin.rsc ) -data=\epoc32\data\Z\private\10282BC4\Rules\silence.rul private\10282BC4\Rules\silence.rul +data=\epoc32\data\Z\private\10282BC4\Rules\silenceringingtone_activate.rul private\10282BC4\Rules\silenceringingtone_activate.rul +data=\epoc32\data\Z\private\10282BC4\Rules\silenceringingtone_silence.rul private\10282BC4\Rules\silenceringingtone_silence.rul data=ZSYSTEM\install\silenceactionplugin_stub.SIS System\Install\silenceactionplugin_stub.SIS #endif // RD_CONTEXT_FRAMEWORK diff -r ba54057fe027 -r b68fcd923911 phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntContactManager.cpp Tue May 25 12:41:50 2010 +0300 @@ -74,7 +74,6 @@ { TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) ); } - delete iContactStore; delete iContactManager; delete iContactStoreUris; } diff -r ba54057fe027 -r b68fcd923911 phoneengine/PhoneCntFinder/ContactService/src/tphcntservicerequestparams.cpp --- a/phoneengine/PhoneCntFinder/ContactService/src/tphcntservicerequestparams.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneengine/PhoneCntFinder/ContactService/src/tphcntservicerequestparams.cpp Tue May 25 12:41:50 2010 +0300 @@ -124,11 +124,10 @@ AiwContactAssign::TAiwSingleContactAssignDataV1 data = AiwContactAssign::TAiwSingleContactAssignDataV1(); - - // EHideEditorExit has to be set because otherwise AIW provider offers - // exit menu item which will also exit the phone application. - data.SetFlags( AiwContactAssign::ECreateNewContact | - AiwContactAssign::EHideEditorExit ); + + // By default an existing contact is opened, we'll override this behaviour + // by setting the ECreateNewContact flag + data.SetFlags( AiwContactAssign::ECreateNewContact ); iGenericParamList->AppendL( TAiwGenericParam( @@ -191,8 +190,6 @@ AiwContactAssign::TAiwSingleContactAssignDataV1 data = AiwContactAssign::TAiwSingleContactAssignDataV1(); - data.SetFlags( AiwContactAssign::EHideEditorExit ); - iGenericParamList->AppendL( TAiwGenericParam( EGenericParamPhoneNumber, diff -r ba54057fe027 -r b68fcd923911 phoneengine/audiohandling/src/cpeaudiodtmftoneplayer.cpp --- a/phoneengine/audiohandling/src/cpeaudiodtmftoneplayer.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneengine/audiohandling/src/cpeaudiodtmftoneplayer.cpp Tue May 25 12:41:50 2010 +0300 @@ -33,7 +33,7 @@ // CONSTANTS const TInt KDtmfSilent = 0; -const TInt KDtmfPauseAfterTone = 100000; +const TInt KDtmfPauseAfterTone = 45000; const TInt KDtmfToneZero = 0; const TInt KBufSize = 10; _LIT( KPhoneTone_Asterisk, "*+w" ); diff -r ba54057fe027 -r b68fcd923911 phoneengine/phonemodel/inc/cpemessagehandler.h --- a/phoneengine/phonemodel/inc/cpemessagehandler.h Tue May 11 16:13:03 2010 +0300 +++ b/phoneengine/phonemodel/inc/cpemessagehandler.h Tue May 25 12:41:50 2010 +0300 @@ -761,6 +761,11 @@ TInt HandleDialCallL( const TBool aClientCall ); /** + * Reset CCCECallParameters to prevent of use a previous callīs parameters + */ + void ResetClientCallData(); + + /** * Checks if there are any connected video calls * @return EFalse: no active video call, * ETrue: active video call diff -r ba54057fe027 -r b68fcd923911 phoneengine/phonemodel/src/cpemessagehandler.cpp --- a/phoneengine/phonemodel/src/cpemessagehandler.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneengine/phonemodel/src/cpemessagehandler.cpp Tue May 25 12:41:50 2010 +0300 @@ -1868,6 +1868,10 @@ { HandleClientCallData(); } + else + { + ResetClientCallData(); + } //Get number of calls numberOfCalls = iCallHandling.GetNumberOfCalls(); @@ -1923,6 +1927,23 @@ } // ----------------------------------------------------------------------------- +// CPEMessageHandler::ResetClientCallData +// Reset CCCECallParameters to prevent of use a previous callīs parameters +// ----------------------------------------------------------------------------- +// +void CPEMessageHandler::ResetClientCallData() + { + TEFLOGSTRING( KTAINT, "PE CPEMessageHandler::ResetClientCallData()" ); + + CCCECallParameters& params = iDataStore.CallParameters(); + params.SetLineType( CCCECallParameters::ECCELineTypePrimary ); + params.SetUUSId( KNullDesC() ); + params.SetBearer( KNullDesC8() ); + params.SetSubAddress( KNullDesC() ); + params.SetOrigin( CCCECallParameters::ECCECallOriginPhone ); + } + +// ----------------------------------------------------------------------------- // CPEMessageHandler::HandleSatCallRequestCompleted // Sends respond to SAT after dial request completion // ----------------------------------------------------------------------------- diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Inc/BMTouchPane.h --- a/phoneuis/BubbleManager/Inc/BMTouchPane.h Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Inc/BMTouchPane.h Tue May 25 12:41:50 2010 +0300 @@ -163,7 +163,15 @@ * Replaces button with other. */ void ReplaceButtonL( TInt aButtonIndex, TInt aResourceId ); - + + /** + * Set used button layout. + * @param aButtonIndex Button index. + * @param aColumn Column index. + * @param aRow Row index. + */ + void SetButtonLayout( TInt aButtonIndex, TInt aColumn, TInt aRow ); + private: /** diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookBottom.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottom.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottom.cpp Tue May 25 12:41:50 2010 +0300 @@ -244,18 +244,7 @@ iFrameId, outerRect, innerRect, - iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } + iBubble ); break; } @@ -278,22 +267,18 @@ BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, outerRect, innerRect); - - TAknsItemID coMaskFrameId; + if ( callState == CBubbleManager::EOnHold ) { iFrameId = KAknsIIDQsnFrCall2Bubble; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask; } else if ( callState == CBubbleManager::EDisconnected ) { iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; } else { iFrameId = KAknsIIDQsnFrCall2BubbleFirst; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; } // for possible frame draw diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookBottomCnap.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomCnap.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomCnap.cpp Tue May 25 12:41:50 2010 +0300 @@ -240,17 +240,6 @@ outerRect, innerRect, iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } break; } @@ -275,21 +264,17 @@ outerRect, innerRect); - TAknsItemID coMaskFrameId; if ( callState == CBubbleManager::EOnHold ) { iFrameId = KAknsIIDQsnFrCall2Bubble; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask; } else if ( callState == CBubbleManager::EDisconnected ) { - iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; + iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn; } else { - iFrameId = KAknsIIDQsnFrCall2BubbleFirst; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; + iFrameId = KAknsIIDQsnFrCall2BubbleFirst; } // for possible frame draw @@ -368,15 +353,6 @@ innerRect, iBubble ); - - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - coMaskFrameId, - outerRect, - innerRect, - iBubble ); - - break; } diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImCnap.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImCnap.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImCnap.cpp Tue May 25 12:41:50 2010 +0300 @@ -158,22 +158,18 @@ BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, outerRect, innerRect); - - TAknsItemID coMaskFrameId; + if ( callState == CBubbleManager::EOnHold ) { iFrameId = KAknsIIDQsnFrCall2Bubble; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask; } else if ( callState == CBubbleManager::EDisconnected ) { iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; } else { iFrameId = KAknsIIDQsnFrCall2BubbleFirst; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; } iOuterRect = outerRect; diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImage.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImage.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomImage.cpp Tue May 25 12:41:50 2010 +0300 @@ -155,22 +155,18 @@ BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, outerRect, innerRect); - - TAknsItemID coMaskFrameId; + if ( callState == CBubbleManager::EOnHold ) { iFrameId = KAknsIIDQsnFrCall2Bubble; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask; } else if ( callState == CBubbleManager::EDisconnected ) { iFrameId = KAknsIIDQsnFrCall2BubbleFirstDisconn; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; } else { iFrameId = KAknsIIDQsnFrCall2BubbleFirst; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleFirstCoMask; } iOuterRect = outerRect; diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRiCnap.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRiCnap.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRiCnap.cpp Tue May 25 12:41:50 2010 +0300 @@ -242,18 +242,7 @@ iFrameId, outerRect, innerRect, - iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } + iBubble ); break; } @@ -277,22 +266,18 @@ BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, outerRect, innerRect); - - TAknsItemID coMaskFrameId; + if ( callState == CBubbleManager::EOnHold ) { iFrameId = KAknsIIDQsnFrCall2Bubble; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask; } else if ( callState == CBubbleManager::EDisconnected ) { iFrameId = KAknsIIDQsnFrCall2BubbleSecondDisconn; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleSecondCoMask; } else { iFrameId = KAknsIIDQsnFrCall2BubbleSecond; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleSecondCoMask; } // for possible frame draw diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRight.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRight.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookBottomRight.cpp Tue May 25 12:41:50 2010 +0300 @@ -237,17 +237,7 @@ outerRect, innerRect, iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } + break; } case CBubbleManager::EDisconnected: @@ -270,22 +260,18 @@ BubbleLayout2::BubbleFrameInnerOuterRects( frameRect, outerRect, innerRect); - - TAknsItemID coMaskFrameId; + if ( callState == CBubbleManager::EOnHold ) { iFrameId = KAknsIIDQsnFrCall2Bubble; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleCoMask; } else if ( callState == CBubbleManager::EDisconnected ) { iFrameId = KAknsIIDQsnFrCall2BubbleSecondDisconn; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleSecondCoMask; } else { iFrameId = KAknsIIDQsnFrCall2BubbleSecond; - coMaskFrameId = KAknsIIDQsnFrCall2BubbleSecondCoMask; } iOuterRect = outerRect; diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddle.cpp Tue May 25 12:41:50 2010 +0300 @@ -261,17 +261,7 @@ outerRect, innerRect, iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } + break; } case CBubbleManager::EDisconnected: diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookMiddleCnap.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddleCnap.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookMiddleCnap.cpp Tue May 25 12:41:50 2010 +0300 @@ -231,16 +231,6 @@ innerRect, iBubble ); - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } break; } diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookTopLeft.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookTopLeft.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookTopLeft.cpp Tue May 25 12:41:50 2010 +0300 @@ -210,17 +210,7 @@ outerRect, innerRect, iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } + break; } case CBubbleManager::EDisconnected: diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMBubbleOutlookTopRight.cpp --- a/phoneuis/BubbleManager/Src/BMBubbleOutlookTopRight.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMBubbleOutlookTopRight.cpp Tue May 25 12:41:50 2010 +0300 @@ -207,17 +207,7 @@ outerRect, innerRect, iBubble ); - - if ( iHeader->CallObjectImage() && - !iHeader->CallObjectText().Length() ) - { - // Add transparency - BubbleUtils::AddTransparencyToBubbleImageL( - KAknsIIDQsnFrCall2RectCoMask, // gradient tp mask - outerRect, - innerRect, - iBubble ); - } + break; } case CBubbleManager::EDisconnected: diff -r ba54057fe027 -r b68fcd923911 phoneuis/BubbleManager/Src/BMTouchPane.cpp --- a/phoneuis/BubbleManager/Src/BMTouchPane.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/BubbleManager/Src/BMTouchPane.cpp Tue May 25 12:41:50 2010 +0300 @@ -80,45 +80,74 @@ void CBubbleTouchPane::SizeChanged( ) { if ( !iButtons.Count() ) + { return; - + } + // button index // 1 2 OR 1 2 3 4 // 3 4 - TInt i = 0; - + TInt buttonInd = 0; + TInt rows = 0; TInt columns = 0; BubbleLayout6::button_grp_row_column_count(0, rows, columns); - for ( TInt row = 0; row < rows; row++ ) + if ( Layout_Meta_Data::IsLandscapeOrientation() && + !Layout_Meta_Data::IsMirrored() ) { + // Set places of the touch buttons so that they correspond places in portrait. + // However, don't change order if mirrored display is used. for ( TInt col = 0; col < columns; col++ ) { - TAknLayoutRect buttonPane; - buttonPane.LayoutRect( - Rect(), - BubbleLayout6::cell_call6_button_pane(0, col, row) ); - - if ( i < iButtons.Count() && iButtons[i] ) + for ( TInt row = rows - 1; row >= 0; row-- ) + { + SetButtonLayout( buttonInd, col, row ); + buttonInd++; + } + } + } + else + { + for ( TInt row = 0; row < rows; row++ ) + { + for ( TInt col = 0; col < columns; col++ ) { - // Button control layout according to background - AknLayoutUtils::LayoutControl( - iButtons[i], - buttonPane.Rect(), - BubbleLayout6::button_call6_background_graphics(0)); - - TAknLayoutText text; - text.LayoutText( buttonPane.Rect(), - BubbleLayout6::button_call6_function_text(0)); + SetButtonLayout( buttonInd, col, row ); + buttonInd++; + } + } + } + } + +// --------------------------------------------------------------------------- +// SetButtonLayout +// --------------------------------------------------------------------------- +// +void CBubbleTouchPane::SetButtonLayout( TInt aButtonIndex, TInt aColumn, TInt aRow ) + { + TAknLayoutRect buttonPane; + buttonPane.LayoutRect( + Rect(), + BubbleLayout6::cell_call6_button_pane(0, aColumn, aRow) ); - TAknLayoutRect icon; - icon.LayoutRect( buttonPane.Rect(), - BubbleLayout6::button_call6_function_graphics(0)); - - iButtons[i]->SetIconSize( icon.Rect().Size() ); - iButtons[i++]->SetLayout( text, icon.Rect() ); - } - } + if ( aButtonIndex < iButtons.Count() && iButtons[aButtonIndex] ) + { + // Button control layout according to background + AknLayoutUtils::LayoutControl( + iButtons[aButtonIndex], + buttonPane.Rect(), + BubbleLayout6::button_call6_background_graphics(0)); + + TAknLayoutText text; + text.LayoutText( buttonPane.Rect(), + BubbleLayout6::button_call6_function_text(0)); + + TAknLayoutRect icon; + icon.LayoutRect( buttonPane.Rect(), + BubbleLayout6::button_call6_function_graphics(0)); + + iButtons[aButtonIndex]->SetIconSize( icon.Rect().Size() ); + iButtons[aButtonIndex]->SetLayout( text, icon.Rect() ); } } diff -r ba54057fe027 -r b68fcd923911 phoneuis/dialer/inc/cdialer.h --- a/phoneuis/dialer/inc/cdialer.h Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/dialer/inc/cdialer.h Tue May 25 12:41:50 2010 +0300 @@ -397,6 +397,11 @@ void UpdateEdwinState( TEditorType aType ); /** + * Disables numeric key sounds, or removed disabling. + */ + void DisableNumericKeySounds( TBool aSounds ); + + /** * Loads easydialing plugin. If loading fails (for instance when * easydialing feature flag is not enabled in the device), * iEasyDialer will be NULL after this function returns. @@ -486,6 +491,12 @@ * for the alphabetic characters. */ TEditorType iEditorType; + + /* + * ETrue if numeric keysounds are disabled. They are disabled when number + * key should produce DTMF tone. + */ + TBool iNumericKeySoundsDisabled; }; #endif // CDIALER_H diff -r ba54057fe027 -r b68fcd923911 phoneuis/dialer/src/cdialer.cpp --- a/phoneuis/dialer/src/cdialer.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/dialer/src/cdialer.cpp Tue May 25 12:41:50 2010 +0300 @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include // for KDC_APP_RESOURCE_DIR @@ -35,6 +36,7 @@ #include #include #include +#include #include #include "cdialer.h" @@ -137,6 +139,9 @@ SetRect( aRect ); SetComponentsToInheritVisibility( EFalse ); + + // By default, numeric keysounds are disabled. + DisableNumericKeySounds( ETrue ); ActivateL(); #ifdef RD_SCALABLE_UI_V2 @@ -260,6 +265,10 @@ } UpdateEdwinState( editorType ); + + // Numeric keysound are disabled in if not in alpha mode. + // In numeric mode numeric keys should play DTMF only. + DisableNumericKeySounds( editorType != EAlphanumericEditor ); } // --------------------------------------------------------------------------- @@ -831,6 +840,30 @@ } // --------------------------------------------------------------------------- +// CDialer::SetNumericKeySounds +// --------------------------------------------------------------------------- +// +void CDialer::DisableNumericKeySounds( TBool aDisable ) + { + CAknAppUi *appUi = static_cast( ControlEnv()->AppUi() ); + CAknKeySoundSystem* keySounds = appUi->KeySounds(); + + if ( aDisable && !iNumericKeySoundsDisabled ) + { + // Disable numeric key sounds. This is done only if key sounds were not disabled previously, + // to avoid situation that there were multiple key sound contexts in the stack. + TRAP_IGNORE( keySounds->PushContextL( R_PHONEUI_DEFAULT_SKEY_LIST ) ); + } + else if ( !aDisable && iNumericKeySoundsDisabled ) + { + // Remove numeric key sound disabling. + keySounds->PopContext(); + } + + iNumericKeySoundsDisabled = aDisable; + } + +// --------------------------------------------------------------------------- // CDialer::LoadEasyDialingPlugin // --------------------------------------------------------------------------- // diff -r ba54057fe027 -r b68fcd923911 phoneuis/dialer/src/cdialernumberentry.cpp --- a/phoneuis/dialer/src/cdialernumberentry.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/dialer/src/cdialernumberentry.cpp Tue May 25 12:41:50 2010 +0300 @@ -98,7 +98,7 @@ iFrameContext = CAknsFrameBackgroundControlContext::NewL( KAknsIIDNone, TRect(0,0,4,4), TRect(1,1,3,3), EFalse ); - iFrameContext->SetFrame( KAknsIIDQsnFrCall2Rect ); + iFrameContext->SetFrame( KAknsIIDQsnFrInput ); iFrameContext->SetParentContext( AknsDrawUtils::ControlContextOfParent(this) ); @@ -434,7 +434,7 @@ (CWindowGc&) gc, iOuterRect, iInnerRect, - KAknsIIDQsnFrCall2Rect, + KAknsIIDQsnFrInput, KAknsIIDDefault )) { DIALER_PRINT("numberentry::Draw.Frame.failed"); @@ -496,7 +496,7 @@ AknsDrawUtils::PrepareFrame( skin, iOuterRect, iInnerRect, - KAknsIIDQsnFrCall2Rect, + KAknsIIDQsnFrInput, KAknsIIDDefault ); // Label layout diff -r ba54057fe027 -r b68fcd923911 phoneuis/dialer/tsrc/public/basic/T_VideoDtmfDialer/group/T_VideoDtmfDialer.mmp --- a/phoneuis/dialer/tsrc/public/basic/T_VideoDtmfDialer/group/T_VideoDtmfDialer.mmp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/dialer/tsrc/public/basic/T_VideoDtmfDialer/group/T_VideoDtmfDialer.mmp Tue May 25 12:41:50 2010 +0300 @@ -33,7 +33,9 @@ SOURCEPATH ../group -USERINCLUDE ../inc +USERINCLUDE ../../../../../../../phoneapp/phoneuiutils/inc/ +USERINCLUDE ../inc + APP_LAYER_SYSTEMINCLUDE SYSTEMINCLUDE ../../../../../inc // Telephony internal headers diff -r ba54057fe027 -r b68fcd923911 phoneuis/dialer/tsrc/public/basic/T_VideoDtmfDialer/src/T_VideoDtmfDialerBlocks.cpp --- a/phoneuis/dialer/tsrc/public/basic/T_VideoDtmfDialer/src/T_VideoDtmfDialerBlocks.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/dialer/tsrc/public/basic/T_VideoDtmfDialer/src/T_VideoDtmfDialerBlocks.cpp Tue May 25 12:41:50 2010 +0300 @@ -114,9 +114,9 @@ { if( iVideoDtmfDialerControl ) { - iDialer = CDialer::NewL( - *iVideoDtmfDialerControl, - CEikonEnv::Static()->EikAppUi()->ClientRect() ); + iDialer = CDialer::NewL( *iVideoDtmfDialerControl, + CEikonEnv::Static()->EikAppUi()->ClientRect(), + NULL ); iNumberEntry = iDialer->NumberEntry(); return KErrNone; diff -r ba54057fe027 -r b68fcd923911 phoneuis/easydialing/data/easydialingpluginresources.rss --- a/phoneuis/easydialing/data/easydialingpluginresources.rss Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/easydialing/data/easydialingpluginresources.rss Tue May 25 12:41:50 2010 +0300 @@ -209,5 +209,15 @@ }; } +//---------------------------------------------------------------------------- +// r_qtn_easydial_enter_number +// +// Info text shown in dialer when when number entry is empty. +// --------------------------------------------------------------------------- +// +RESOURCE TBUF r_qtn_easydial_enter_number + { + buf = qtn_easydial_enter_number; + } // End of File diff -r ba54057fe027 -r b68fcd923911 phoneuis/easydialing/inc/easydialingplugin.h --- a/phoneuis/easydialing/inc/easydialingplugin.h Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/easydialing/inc/easydialingplugin.h Tue May 25 12:41:50 2010 +0300 @@ -70,7 +70,7 @@ class CEDContactorService; class CEikMenuPane; class CAsyncCallBack; - +class CEikLabel; // CLASS DECLARATION @@ -122,6 +122,11 @@ * From CCoeControl */ void MakeVisible( TBool aVisible ); + + /** + * From CCoeControl + */ + void HandleResourceChange( TInt aType ); protected: @@ -436,7 +441,11 @@ */ TBool CanListBoxEffectBeUsed() const; - + /** + * Sets correct info label text color from theme. + */ + void SetInfoLabelColourL(); + private: /** Textual version of current search string. */ @@ -517,12 +526,29 @@ /** Action to be launched next asynchronously. */ TEasyDialingAction iActionToBeLaunched; + /** Contact link related to the asynchronous action. */ + HBufC8* iContactToBeLaunched; + + /** Contact name related to the asynchronous action. */ + HBufC* iContactToBeLaunchedName; + /** Key event to be simulated asynchronously. */ TKeyEvent iKeyEventToSimulate; /** Is virtual keyboard currently open or not.*/ TBool iVirtualKeyboardOpen; + + /** First line of info text shown when number entry is empty. Owned. */ + HBufC* iInfoLabelTextLine1; + /** Second line of info text shown when number entry is empty. Owned. */ + HBufC* iInfoLabelTextLine2; + + /** Label for showing first line of info text when number entry is empty. Owned. */ + CEikLabel* iInfoLabelLine1; + + /** Label for showing second line of info text when number entry is empty. Owned. */ + CEikLabel* iInfoLabelLine2; }; diff -r ba54057fe027 -r b68fcd923911 phoneuis/easydialing/loc/easydialing.loc --- a/phoneuis/easydialing/loc/easydialing.loc Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/easydialing/loc/easydialing.loc Tue May 25 12:41:50 2010 +0300 @@ -35,4 +35,12 @@ // #define qtn_easy_dialing_off "Off" +//d: Info text shown in dialer when when number entry is empty. +//d: Text is shown in the place of the contact matches listbox. +//d: Text can span multiple lines. Line breaks must be indicated with \n +//l: main_list_empty_pane +//r:9.2 +// +#define qtn_easydial_enter_number "Enter number or name" + // End of File diff -r ba54057fe027 -r b68fcd923911 phoneuis/easydialing/src/easydialinglistbox.cpp --- a/phoneuis/easydialing/src/easydialinglistbox.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/easydialing/src/easydialinglistbox.cpp Tue May 25 12:41:50 2010 +0300 @@ -513,6 +513,10 @@ ReportListBoxEventL( static_cast ( KEasyDialingContactLongTapped ) ); iPointerLongPressHandled = ETrue; + + TPointerEvent simulatedButtonUpEvent( TPointerEvent::EButton1Up, 0, + TPoint(), TPoint() ); + TRAP_IGNORE( CEikFormattedCellListBox::HandlePointerEventL( simulatedButtonUpEvent ) ); } diff -r ba54057fe027 -r b68fcd923911 phoneuis/easydialing/src/easydialingplugin.cpp --- a/phoneuis/easydialing/src/easydialingplugin.cpp Tue May 11 16:13:03 2010 +0300 +++ b/phoneuis/easydialing/src/easydialingplugin.cpp Tue May 25 12:41:50 2010 +0300 @@ -34,6 +34,8 @@ #include #include +#include + // Predictive search header files #include #include @@ -63,6 +65,8 @@ #include #include +#include + // CCA contactor service. #include "edcontactorservice.h" @@ -267,6 +271,11 @@ GfxTransEffect::Deregister( iContactListBox ); } + delete iInfoLabelLine1; + delete iInfoLabelLine2; + delete iInfoLabelTextLine1; + delete iInfoLabelTextLine2; + delete iContactListBox; if (iContactLauncher) @@ -286,6 +295,9 @@ } delete iAsyncCallBack; + delete iContactToBeLaunched; + delete iContactToBeLaunchedName; + OstTrace0( TRACE_NORMAL, CEASYDIALINGPLUGIN_UNLOAD_PLUGIN, "Plugin unloaded" ); LOGSTRING("EasyDialingPlugin: Plugin unloaded"); } @@ -325,6 +337,40 @@ SetFocus( EFalse ); iContactListBox->ActivateL(); + _LIT( KEDNewLine, "\n" ); + HBufC* infoLabelText = StringLoader::LoadLC( R_QTN_EASYDIAL_ENTER_NUMBER, iCoeEnv ); + TInt newLine = infoLabelText->Find( KEDNewLine ); + if ( newLine == KErrNotFound ) + { + iInfoLabelTextLine1 = infoLabelText; + CleanupStack::Pop( infoLabelText ); + iInfoLabelTextLine2 = HBufC::NewL(0); + } + else + { + iInfoLabelTextLine1 = infoLabelText->Left( newLine ).AllocL(); + iInfoLabelTextLine2 = infoLabelText->Mid( newLine + 1 ).AllocL(); + CleanupStack::PopAndDestroy( infoLabelText ); + } + + iInfoLabelLine1 = new( ELeave ) CEikLabel; + iInfoLabelLine1->SetContainerWindowL( *this ); + iInfoLabelLine1->SetParent( this ); + iInfoLabelLine1->SetMopParent( this ); + iInfoLabelLine1->SetLabelAlignment( ELayoutAlignCenter ); + iInfoLabelLine1->SetTextL( *iInfoLabelTextLine1 ); + iInfoLabelLine1->ActivateL(); + + iInfoLabelLine2 = new( ELeave ) CEikLabel; + iInfoLabelLine2->SetContainerWindowL( *this ); + iInfoLabelLine2->SetParent( this ); + iInfoLabelLine2->SetMopParent( this ); + iInfoLabelLine2->SetLabelAlignment( ELayoutAlignCenter ); + iInfoLabelLine2->SetTextL( *iInfoLabelTextLine2 ); + iInfoLabelLine2->ActivateL(); + + SetInfoLabelColourL(); + GfxTransEffect::Register( iContactListBox, KGfxContactListBoxUid, EFalse ); @@ -567,7 +613,7 @@ // TInt CEasyDialingPlugin::CountComponentControls() const { - return iNumberOfNames > 0 ? 1 : 0; + return iNumberOfNames > 0 ? 3 : 2; } @@ -578,7 +624,17 @@ // CCoeControl* CEasyDialingPlugin::ComponentControl( TInt aIndex ) const { - return aIndex == 0 ? iContactListBox : NULL; + switch ( aIndex ) + { + case 0: + return iInfoLabelLine1; + case 1: + return iInfoLabelLine2; + case 2: + return iContactListBox; + default: + return NULL; + } } @@ -600,6 +656,15 @@ } } +// ----------------------------------------------------------------------------- +// HandleResourceChange +// +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::HandleResourceChange( TInt /*aType*/ ) + { + TRAP_IGNORE( SetInfoLabelColourL() ); + } // ----------------------------------------------------------------------------- // SizeChanged @@ -623,6 +688,26 @@ itemToMakeVisible = iNumberOfNames - 1; } iContactListBox->ScrollToMakeItemVisible( itemToMakeVisible ); + + // get info label locations and fonts from layout + TRect baseRect = Rect(); + TAknTextComponentLayout labelLayoutLine1 = + AknLayoutScalable_Avkon::main_pane_empty_t1( 0 ); + TAknTextComponentLayout labelLayoutLine2 = + AknLayoutScalable_Avkon::main_pane_empty_t2( 0 ); + AknLayoutUtils::LayoutLabel( iInfoLabelLine1, baseRect, labelLayoutLine1 ); + AknLayoutUtils::LayoutLabel( iInfoLabelLine2, baseRect, labelLayoutLine2 ); + + // the layouts used place the text too low, so center the labels vertically + TInt labelHeight = iInfoLabelLine2->Rect().iBr.iY - iInfoLabelLine1->Rect().iTl.iY; + TInt centeredTop = ( baseRect.Height() - labelHeight ) / 2; + TInt offset = centeredTop - iInfoLabelLine1->Rect().iTl.iY; + iInfoLabelLine1->SetPosition( TPoint( iInfoLabelLine1->Rect().iTl.iX, + iInfoLabelLine1->Rect().iTl.iY + offset ) ); + iInfoLabelLine2->SetPosition( TPoint( iInfoLabelLine2->Rect().iTl.iX, + iInfoLabelLine2->Rect().iTl.iY + offset ) ); + + TRAP_IGNORE( SetInfoLabelColourL() ); } @@ -638,6 +723,7 @@ { // To be on the safe side, cancel async callback and reset input block. CancelActionLaunchAndInputBlock(); + iContactListBox->View()->ItemDrawer()->ClearFlags( CListItemDrawer::ESingleClickDisabledHighlight ); } CCoeControl::FocusChanged( aDrawNow ); InformObservers( MDialingExtensionObserver::EFocusChanged ); @@ -677,10 +763,18 @@ // However if user empties number entry, then it's feasible to show // effect. HideContactListBoxWithEffect(); + iInfoLabelLine1->SetTextL( *iInfoLabelTextLine1 ); + iInfoLabelLine2->SetTextL( *iInfoLabelTextLine2 ); + iInfoLabelLine1->DrawDeferred(); + iInfoLabelLine2->DrawDeferred(); Reset(); } else // proper search string { + iInfoLabelLine1->SetTextL( KNullDesC ); + iInfoLabelLine2->SetTextL( KNullDesC ); + iInfoLabelLine1->DrawDeferred(); + iInfoLabelLine2->DrawDeferred(); iSearchString.Copy( aSearchString.Left( iSearchString.MaxLength() ) ); LaunchSearchL(); } @@ -1127,6 +1221,8 @@ iContactListBox->ScrollToMakeItemVisible( iNumberOfNames-1 ); ShowContactListBoxWithEffect(); + iContactListBox->View()->ItemDrawer()->ClearFlags( CListItemDrawer::ESingleClickDisabledHighlight ); + static_cast( iContactListBox->View() )->SetCurrentItemIndexToNone(); } else { @@ -1193,9 +1289,9 @@ void CEasyDialingPlugin::LaunchCurrentContactL() { __ASSERT_DEBUG( iNumberOfNames > 0, EasyDialingPanic( EEasyDialingPanicNoResults ) ); - __ASSERT_DEBUG( iContactListBox->CurrentItemIndex() >= 0, EasyDialingPanic( EEasyDialingPanicNoContactSelected ) ); + __ASSERT_DEBUG( iContactToBeLaunched, EasyDialingPanic( EEasyDialingPanicNoContactSelected ) ); - if (( iContactLauncherActive ) || ( iNumberOfNames == 0 ) || ( !iContactListBox ) || ( iContactListBox->CurrentItemIndex() < 0 )) + if (( iContactLauncherActive ) || ( iNumberOfNames == 0 ) || ( !iContactListBox ) || ( !iContactToBeLaunched )) { OstTrace0( TRACE_ERROR, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_ERROR, "LaunchCurrentContactL: Parameter error" ); LOGSTRING("EasyDialingPlugin: LaunchCurrentContactL - Parameter error"); @@ -1213,22 +1309,22 @@ launchParameters->SetContactDataFlag(MCCAParameter::EContactLink); - // Get the contact link of the current contact item. - HBufC8* contact8 = iContactListBox->CurrentContactLinkLC(); - - // Expand it into 16-bit descriptor because cca launcher api expects this. - HBufC16* contact16 = HBufC16::NewLC( contact8->Length() ); - contact16->Des().Copy( *contact8 ); + // Expand contact link into 16-bit descriptor because cca launcher api expects this. + HBufC16* contact16 = HBufC16::NewLC( iContactToBeLaunched->Length() ); + contact16->Des().Copy( *iContactToBeLaunched ); launchParameters->SetContactDataL( *contact16 ); CleanupStack::PopAndDestroy( contact16 ); - CleanupStack::PopAndDestroy( contact8 ); + + OstTraceExt1( TRACE_NORMAL, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_LAUNCH_CCA, "Launch CL for contact: '%S'", *iContactToBeLaunchedName ); + LOGSTRING1("EasyDialingPlugin: Launch CL for contact: '%S'", iContactToBeLaunchedName ); - TPtrC selectedName = iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() ); - OstTraceExt1( TRACE_NORMAL, CEASYDIALINGPLUGIN_LAUNCHCURRENTCONTACTL_LAUNCH_CCA, "Launch CL for contact: '%S'", selectedName ); - LOGSTRING1("EasyDialingPlugin: Launch CL for contact: '%S'", &selectedName ); - + delete iContactToBeLaunched; + iContactToBeLaunched = NULL; + delete iContactToBeLaunchedName; + iContactToBeLaunchedName = NULL; + iContactLauncher->LaunchAppL( *launchParameters, this ); // Ownership of parameter transferred to CCA launcher => pop but do not destroy. @@ -1621,6 +1717,31 @@ void CEasyDialingPlugin::AsyncActionLaunchL( TEasyDialingAction aAction ) { iActionToBeLaunched = aAction; + + delete iContactToBeLaunched; + iContactToBeLaunched = NULL; + delete iContactToBeLaunchedName; + iContactToBeLaunchedName = NULL; + + if ( aAction == ECallCurrentContact + || aAction == EVideoCallCurrentContact + || aAction == ESendMessageCurrentContact + || aAction == ELaunchCurrentContact ) + { + // Need to save current contact link and name. Listbox current item + // index might not be correct when callback is handled. + iContactToBeLaunched = iContactListBox->CurrentContactLinkLC(); + CleanupStack::Pop( iContactToBeLaunched ); + + TPtrC contactString( iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() ) ); + TPtrC fullNameSeparators; + TInt error = TextUtils::ColumnText( fullNameSeparators, 1, &contactString ); + __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); + + // Remove highlight separators. It is possible that some contactor API has problem with them. + iContactToBeLaunchedName = AllocWithoutHighlightSeparatorsLC( fullNameSeparators ); + CleanupStack::Pop( iContactToBeLaunchedName ); + } CancelActionLaunchAndInputBlock(); @@ -1715,18 +1836,6 @@ return; } - // Get current contact link. - HBufC8* contact8 = iContactListBox->CurrentContactLinkLC(); - - TPtrC contactString( iListBoxModel->MdcaPoint( iContactListBox->CurrentItemIndex() ) ); - - TPtrC fullNameSeparators; - TInt error = TextUtils::ColumnText( fullNameSeparators , 1, &contactString ); - __ASSERT_DEBUG( error == KErrNone, EasyDialingPanic( EEasyDialingPanicInvalidListBoxModelString ) ); - - // Remove highlight separators. It is possible that some contactor API has problem with them. - HBufC* fullName = AllocWithoutHighlightSeparatorsLC( fullNameSeparators ); - VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector selector( VPbkFieldTypeSelectorFactory::EEmptySelector ); @@ -1769,20 +1878,24 @@ break; default: - CleanupStack::PopAndDestroy( fullName ); - CleanupStack::PopAndDestroy( contact8 ); + delete iContactToBeLaunched; + iContactToBeLaunched = NULL; + delete iContactToBeLaunchedName; + iContactToBeLaunchedName = NULL; __ASSERT_DEBUG( EFalse, EasyDialingPanic( EEasyDialingActionNotSupported ) ); return; } - CEDContactorService::TCSParameter param( selector, *contact8, + CEDContactorService::TCSParameter param( selector, *iContactToBeLaunched, CEDContactorService::TCSParameter::EEnableDefaults, - *fullName ); + *iContactToBeLaunchedName ); iContactorService->ExecuteServiceL( param ); - CleanupStack::PopAndDestroy( fullName ); - CleanupStack::PopAndDestroy( contact8 ); + delete iContactToBeLaunched; + iContactToBeLaunched = NULL; + delete iContactToBeLaunchedName; + iContactToBeLaunchedName = NULL; } @@ -1832,6 +1945,8 @@ case EEventFlickStopped: case EEventPanningStopped: case KEasyDialingScrollingStopped: + iContactListBox->View()->ItemDrawer()->ClearFlags( CListItemDrawer::ESingleClickDisabledHighlight ); + static_cast( iContactListBox->View() )->SetCurrentItemIndexToNone(); iContactDataManager->Pause( EFalse ); // Touching the listbox always removes the visual focus from any list item. @@ -1996,6 +2111,25 @@ return canBeUsed; } +// ----------------------------------------------------------------------------- +// CEasyDialingPlugin::SetInfoLabelColourL +// ----------------------------------------------------------------------------- +// +void CEasyDialingPlugin::SetInfoLabelColourL() + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb skinColor; + TInt error = AknsUtils::GetCachedColor( skin, skinColor, + KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); + + if ( error == KErrNone ) + { + iInfoLabelLine1->OverrideColorL( EColorLabelText, skinColor ); + iInfoLabelLine2->OverrideColorL( EColorLabelText, skinColor ); + } + } + + /* * ============================================================================== *