diff -r e686773b3f54 -r 04ab22b956c2 phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp --- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp Tue Feb 02 10:12:17 2010 +0200 +++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp Fri Feb 19 22:40:27 2010 +0200 @@ -21,8 +21,8 @@ #include "spbcontentprovider.h" #include "ccappcommlaunchercustomlistbox.h" #include -#include -#include +#include +#include #include #include #include "ccaextensionfactory.h" @@ -37,12 +37,11 @@ #include "ccafactoryextensionnotifier.h" #include - +namespace { const TInt KSocialPhonebookDisabled = 2; const TInt KSocialPhonebookEnabled = 3; -const TText KReplacedChars = ' '; - _LIT( KCcaIconDefaultFileName, "\\resource\\apps\\phonebook2ece.mif" ); +} // =========================== MEMBER FUNCTIONS =============================== @@ -115,11 +114,14 @@ link = contactArray->At( 0 ).CloneLC(); } - const MVPbkContactStoreProperties& storeProperties = link->ContactStore().StoreProperties(); - TVPbkContactStoreUriPtr uri = storeProperties.Uri(); + if ( link ) + { + const MVPbkContactStoreProperties& storeProperties = link->ContactStore().StoreProperties(); + TVPbkContactStoreUriPtr uri = storeProperties.Uri(); - isSame = uri.Compare( VPbkContactStoreUris::DefaultCntDbUri(), - TVPbkContactStoreUriPtr::EContactStoreUriAllComponents ); + isSame = uri.Compare( VPbkContactStoreUris::DefaultCntDbUri(), + TVPbkContactStoreUriPtr::EContactStoreUriAllComponents ); + } } if( isSame == 0 ) @@ -127,7 +129,7 @@ iStatusControl = CCCAppStatusControl::NewL( *iProvider, *this ); iStatusControl->SetContainerWindowL( *this ); iStatusControl->MakeVisible( EFalse ); - + iHeaderCtrl->SetStatusButtonVisibility( EFalse ); CFbsBitmap* bmp = NULL; CFbsBitmap* bmpMask = NULL; @@ -139,12 +141,12 @@ EMbmPhonebook2eceQgn_prop_wml_bm_ovi_mask ); CGulIcon* guiIcon = CGulIcon::NewL( bmp, bmpMask ); - iStatusControl->SetDefaultStatusL( R_QTN_CCA_DEFAULT_STATUS, guiIcon ); + iStatusControl->SetDefaultStatusIconL( guiIcon ); iStatusControl->SetContactLinkL( *link ); iFactoryExtensionNotifier = CCCaFactoryExtensionNotifier::NewL(); TCallBack callBack( CCCAppCommLauncherContainer::CheckExtensionFactoryL, this ); - iFactoryExtensionNotifier->ObserveExtensionFactory( callBack ); + iFactoryExtensionNotifier->ObserveExtensionFactoryL( callBack ); } if( link ) @@ -173,9 +175,8 @@ // void CCCAppCommLauncherContainer::CreateListboxControlL() { - // Will use customed list box later - // iListBox = CCCAppCommLauncherCustomListBox::NewL(); - iListBox = new (ELeave) CAknDoubleLargeStyleListBox(); + // Use customized list box + iListBox = CCCAppCommLauncherCustomListBox::NewL(); iListBox->ConstructL(this, EAknListBoxLoopScrolling); iListBox->SetContainerWindowL(*this); iListBox->CreateScrollBarFrameL(ETrue); @@ -215,51 +216,73 @@ // void CCCAppCommLauncherContainer::SizeChanged() { - const TRect drawRect(Rect()); + const TRect rect(Rect()); const TBool isLandscape(Layout_Meta_Data::IsLandscapeOrientation()); - // Header, Status and Listbox - TAknLayoutRect headerRect; - headerRect.LayoutRect(drawRect, AknLayoutScalable_Apps::cl_header_pane(isLandscape)); - iHeaderCtrl->SetRect(headerRect.Rect()); - - AknLayoutUtils::LayoutControl( - iListBox, drawRect, AknLayoutScalable_Apps::cl_listscroll_pane(isLandscape)); - - TRect listRect = iListBox->Rect(); - - if (!isLandscape) - { - listRect.iTl.iX = drawRect.iTl.iX; - listRect.iBr.iX = drawRect.iBr.iX; - } + // contact card pane layout + TAknWindowComponentLayout contactCardPaneLayout( + TAknWindowComponentLayout::Compose( + AknLayoutScalable_Apps::main_phob2_pane( 0 ), + AknLayoutScalable_Apps::phob2_contact_card_pane( 1 ) ) ); - if( iStatusControl && iStatusControl->IsVisible() ) - { - // status control (similar to list_double2_graphic_pane) - TAknLayoutRect statusLayout; - statusLayout.LayoutRect( listRect, - AknLayoutScalable_Avkon::list_double2_graphic_pane( 0 ) ); - TRect statusRect( statusLayout.Rect() ); - - // list gives space for status control (top of list) - listRect.Move( 0, statusRect.Height() ); - listRect.Resize( 0, -statusRect.Height() ); - - // status control - statusRect.Shrink( 10, 5 ); - iStatusControl->SetRect( statusRect ); - } - - iListBox->SetRect( listRect ); + + TInt option( isLandscape ? 3 : 2 ); // (w/o button) + if( iStatusControl && iStatusControl->IsVisible() ) + { + // (w button) + if( isLandscape ) + { + option = 1; + } + else + { + option = 0; + } + + // Status control layout + TAknWindowComponentLayout statusPaneLayout( + TAknWindowComponentLayout::Compose( + TAknWindowComponentLayout::Compose( + contactCardPaneLayout, + AknLayoutScalable_Apps::phob2_cc_data_pane( option ) ), + AknLayoutScalable_Apps::phob2_cc_button_pane( option ) ) ); + + TAknLayoutRect statusPaneLayoutRect; + statusPaneLayoutRect.LayoutRect( rect, statusPaneLayout.LayoutLine() ); + TRect statusPaneRect( statusPaneLayoutRect.Rect() ); + iStatusControl->SetRect( statusPaneRect ); + } + // Header and Listbox + + // header layout + TAknWindowComponentLayout headerPaneLayout( + TAknWindowComponentLayout::Compose( + contactCardPaneLayout, + AknLayoutScalable_Apps::phob2_cc_data_pane( option ) ) ); + + TAknLayoutRect headerPaneLayoutRect; + headerPaneLayoutRect.LayoutRect( rect, headerPaneLayout.LayoutLine() ); + TRect headerPaneRect( headerPaneLayoutRect.Rect() ); + iHeaderCtrl->SetRect( headerPaneRect ); + + // list layout + TAknWindowComponentLayout listPaneLayout( + TAknWindowComponentLayout::Compose( + contactCardPaneLayout, + AknLayoutScalable_Apps::phob2_cc_listscroll_pane( option ) ) ); + + TAknLayoutRect listPaneLayoutRect; + listPaneLayoutRect.LayoutRect( rect, listPaneLayout.LayoutLine() ); + TRect listPaneRect( listPaneLayoutRect.Rect() ); + iListBox->SetRect( listPaneRect ); // Background skin if (iBackground) { - iBackground->SetRect(drawRect); + iBackground->SetRect(rect); } - DrawNow(); + DrawDeferred(); } // ---------------------------------------------------------------------------- @@ -318,6 +341,9 @@ TKeyResponse CCCAppCommLauncherContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType) { + // Make sure timer can be canceled before user do any operation. + iPlugin.CancelTimer(); + // Forward the key-event 1st to base-class TKeyResponse returnValue = CCCAppViewPluginAknContainer::OfferKeyEventL(aKeyEvent, aType); @@ -402,6 +428,9 @@ void CCCAppCommLauncherContainer::HandlePointerEventL( const TPointerEvent& aPointerEvent) { + // Make sure timer can be canceled before user do any operation. + iPlugin.CancelTimer(); + TInt index; if ( iListBox->View()->XYPosToItemIndex( aPointerEvent.iPosition, index ) ) { @@ -424,30 +453,43 @@ // CCCAppCommLauncherContainer::HandleLongTapEventL() // ---------------------------------------------------------------------------- // -void CCCAppCommLauncherContainer::HandleLongTapEventL( const TPoint& aPenEventLocation, - const TPoint& aPenEventScreenLocation ) +void CCCAppCommLauncherContainer::HandleLongTapEventL( const TPoint& /*aPenEventLocation*/, + const TPoint& /*aPenEventScreenLocation*/ ) { CCAContactorService* contactorService = iPlugin.ContactorService(); - - if ( contactorService && contactorService->IsBusy() ) - { - return; - } - else if ( CommMethodsAvailable() ) + if ( contactorService ) { - TPtrC fullName; - iPlugin.ContactHandler().ContactFieldItemDataL( - CCmsContactFieldItem::ECmsFullName, fullName ); + if ( contactorService->IsBusy() ) + { + return; + } + else if ( CommMethodsAvailable() ) + { + TPtrC fullName; + iPlugin.ContactHandler().ContactFieldItemDataL( + CCmsContactFieldItem::ECmsFullName, fullName ); - TUint paramFlag = 0;//CCAContactorService::TCSParameter::EEnableDefaults; - CCAContactorService::TCSParameter param( - iPlugin.Container().SelectedCommunicationMethod(), - *iPlugin.ContactHandler().ContactIdentifierLC(),//contactlinkarray - paramFlag, - fullName ); - contactorService->ExecuteServiceL( param ); + TUint paramFlag = 0;//CCAContactorService::TCSParameter::EEnableDefaults; + + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector + contactActionType = iPlugin.Container().SelectedCommunicationMethod(); + CCAContactorService::TCSParameter param( + contactActionType, + *iPlugin.ContactHandler().ContactIdentifierLC(),//contactlinkarray + paramFlag, + fullName ); + + if ( contactActionType == VPbkFieldTypeSelectorFactory::EVoiceCallSelector || + contactActionType == VPbkFieldTypeSelectorFactory::EVideoCallSelector || + contactActionType == VPbkFieldTypeSelectorFactory::EVOIPCallSelector ) + { + iPlugin.StartTimerL(); + } + + contactorService->ExecuteServiceL( param ); - CleanupStack::PopAndDestroy( 1 );// contactlinkarray + CleanupStack::PopAndDestroy( 1 );// contactlinkarray + } } } @@ -491,7 +533,10 @@ if (executeContactAction) { - if ( iPlugin.Container().SelectedCommunicationMethod() + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector + contactActionType = iPlugin.Container().SelectedCommunicationMethod(); + + if ( contactActionType == VPbkFieldTypeSelectorFactory::EFindOnMapSelector ) { DoShowMapCmdL( (TPbk2CommandId)EPbk2ExtensionShowOnMap ); @@ -508,11 +553,18 @@ TUint paramFlag = CCAContactorService::TCSParameter::EEnableDefaults; CCAContactorService::TCSParameter param( - iPlugin.Container().SelectedCommunicationMethod(), + contactActionType, *iPlugin.ContactHandler().ContactIdentifierLC(),//contactlinkarray paramFlag, fullName); - + + if ( contactActionType == VPbkFieldTypeSelectorFactory::EVoiceCallSelector || + contactActionType == VPbkFieldTypeSelectorFactory::EVideoCallSelector || + contactActionType == VPbkFieldTypeSelectorFactory::EVOIPCallSelector ) + { + iPlugin.StartTimerL(); + } + contactorService->ExecuteServiceL(param); CleanupStack::PopAndDestroy(1);// contactlinkarray @@ -555,6 +607,11 @@ iHeaderCtrl->ContactFieldFetchedNotifyL(aContactField); // Forwarding to listbox-model iModel->ContactFieldFetchedNotifyL(aContactField); + + if( iStatusControl ) + { + SetDefaultStatusTextL(); + } } // ---------------------------------------------------------------------------- @@ -578,6 +635,11 @@ iListBox->DrawDeferred(); iMdlRowCount = mdlCount; + + if( iStatusControl ) + { + SetDefaultStatusTextL(); + } } // --------------------------------------------------------------------------- @@ -601,6 +663,17 @@ } // --------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::IsHighlight +// --------------------------------------------------------------------------- +// +const TBool CCCAppCommLauncherContainer::IsListBoxHighlightEnabled() + { + return !( iListBox->ItemDrawer()->Flags() & + CListItemDrawer::ESingleClickDisabledHighlight ); + } + + +// --------------------------------------------------------------------------- // CCCAppCommLauncherContainer::SelectedCommunicationMethod // --------------------------------------------------------------------------- // @@ -695,6 +768,27 @@ return *iLongTapDetector; } +// -------------------------------------------------------------------------- +// CCCAppCommLauncherContainer::SetDefaultStatusTextL +// -------------------------------------------------------------------------- +// +void CCCAppCommLauncherContainer::SetDefaultStatusTextL() + { + TPtrC fullName; + iPlugin.ContactHandler().ContactFieldItemDataL( + CCmsContactFieldItem::ECmsFullName, + fullName ); + + if( fullName.Size() == 0 ) + { + return; + } + + HBufC* defaultStatusText = StringLoader::LoadL( + R_QTN_CCA_FTU_DISCOVER, fullName, iCoeEnv ); + + iStatusControl->SetDefaultStatusTextL( defaultStatusText ); + } //----------------------------------------------------------------------------- // CCCAppCommLauncherContainer::StatusClicked() @@ -739,13 +833,21 @@ { iViewLauncher = extension->CreateViewLauncherL(); } - iStatusControl->MakeVisible( ETrue ); + if( iStatusControl ) + { + iStatusControl->MakeVisible( ETrue ); + iHeaderCtrl->SetStatusButtonVisibility( ETrue ); + } } else { delete iViewLauncher; iViewLauncher = NULL; - iStatusControl->MakeVisible( EFalse ); + if( iStatusControl ) + { + iStatusControl->MakeVisible( EFalse ); + iHeaderCtrl->SetStatusButtonVisibility( EFalse ); + } } }