diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpstui/src/cvimpstuitabbedview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstui/src/cvimpstuitabbedview.cpp Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,3839 @@ +/* +* Copyright (c) 2008 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: Implementation for CVIMPSTUiTabbedView + * +*/ + + +// INCLUDE FILES +#include "cvimpstuitabbedview.h" + +#include "cvimpstcmdhandler.h" +#include "mvimpstuitabbedviewcontrol.h" +#include "mvimpstuitabcontrolfactory.h" +#include "vimpstcmd.hrh" +#include "mvimpstcmd.h" +#include "mvimpstengine.h" +#include "mvimpstenginesearchmgrextention.h" + +#include "vimpstui.hrh" +#include "vimpstextentionuiuid.h" +#include "tvimpstconsts.h" +#include "cvimpstuiextensionservice.h" +#include "cvimpstuibranddata.h" +#include "mvimpstprocessarray.h" +#include "vimpstutilsdialog.h" +#include "vimpstutilswaitnote.h" +#include "vimpstcmd.hrh" +#include "cvimpstuisearchfieldaray.h" +#include "mvimpstuisearchfield.h" +#include "cvimpstuisearchquerydialog.h" +#include "cvimpstuiavatarselectionhandler.h" // avatar selection +#include "cvimpstuistatuspanehandler.h" + + +#include "mvimpstengineextentionfeatures.h" +#include "mvimpststoragevpbkstorehandler.h" + +// System includes +#include //CAknToolbar +#include //CEikAppUiFactory + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Pbk2 +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +// xSP extension manager +#include "MxSPViewMapper.h" +#include "MxSPContactManager.h" +#include "cvimpststoragemanagerfactory.h" +#include "mvimpststorageserviceview.h" +#include "cvimpstuimenuextension.h" + +//resource +#include +#include + +//CCA +#include +#include +#include + +#include "vimpstdebugprint.h" + +//AIW - VOIP +#include +#include +#include +#include +#include +#include + +//browser launch +#include +#include "cvimpstuitermsofusedialoghandler.h" +#include +#include +#include "tvimpstconsts.h" +// avatar +#include "mvimpstenginepresencesubservice.h" +#include "mvimpstenginesubservice.h" +#include "mvimpstengineimsubservice.h" +#include "cvimpstuicontactselection.h" + +#include +// help launch +#include +#include +#include "meco.hlp.hrh" + +#include +#include //KAiwCmdCall +#include +#include + +using namespace AiwContactAssign; +using namespace Phonebook2; + +const TInt KBufLen(512); + + +// ================= MEMBER FUNCTIONS ======================= + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CVIMPSTUiTabbedView +// -------------------------------------------------------------------------- +// +CVIMPSTUiTabbedView::CVIMPSTUiTabbedView( +MxSPViewMapper& aMapper, +MxSPContactManager& aContactManager, +TUint aTabbedViewId, +TUint aServiceId, +CPbk2UIExtensionView& aView, +TUid /*aId*/, +CVIMPSTUIExtensionService& aServiceData, +MVIMPSTEngine& aEngine, +MVIMPSTCmdHandler& aCommandHandler, +CVIMPSTUIMenuExtension& aMenuExtension) : +CxSPBaseView( aMapper, aContactManager, aView ), +iViewId( aTabbedViewId ), +iServiceId(aServiceId), +iEngine(aEngine), +iExtensionService( aServiceData ), +iCommandHandler( aCommandHandler), +iMenuExtension(aMenuExtension), +iSelectedAction( KErrNotFound ) + + { + iFixedToolbar = NULL; + iIsToolBarHidden = ETrue; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ConstructL +// -------------------------------------------------------------------------- +// +inline void CVIMPSTUiTabbedView::ConstructL() + { + ViewBaseConstructL( KIMCONTACTSEXTNIMPLEMENTATIONUID, iViewId ); + + iCommandHandler.RegisterEventObserverL(this); + + iPreviousState = TVIMPSTEnums::ESVCENotRegistered; + + iServiceHandler = CAiwServiceHandler::NewL(); + + iServiceHandler->AttachL( R_IM_APP_INTEREST ); + iServiceHandler->AttachMenuL( R_SERVTAB_TABBED_VIEW_MENU, + R_IM_APP_INTEREST ); + + iServiceHandler->AttachL( R_AIWASSIGNMENT_INTEREST ); + + iServiceHandler->AttachL( R_AIWSELECT_INTEREST ); + + iStatusMessage = HBufC::NewL( KStatusTextLength ); + + iStatusPaneHandler = CCVIMPSTUiStatusPaneHandler::NewL(); + + //Get SearchMgr + MVIMPSTEngineExtentionFeatures* feature = iEngine.ExtentionFeatures(TVIMPSTEnums::ESearch); + if (feature) + { + MVIMPSTEngineSearchMgrExtention& searchMgr = + MVIMPSTEngineSearchMgrExtention::Cast + (*feature); + + searchMgr.RegisterObserver(this); + } + iSettingsStore = CVIMPSTSettingsStore::NewL(); + + iBrandHandler = CVIMPSTUiBrandData::NewL( iEngine ); + + iAppUi = CCoeEnv::Static()->AppUi(); + + CFbsBitmap *bitmap, *mask; + iBrandHandler->GetBrandBitmapsL( &bitmap, &mask); + iStatusPaneHandler->SetPictureL( bitmap, mask ); + + iIsServiceHandleReSet = EFalse; + + iContainerCreationStarted = EFalse; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::NewL +// -------------------------------------------------------------------------- +// +CVIMPSTUiTabbedView* CVIMPSTUiTabbedView::NewL( MxSPViewMapper& aMapper, + MxSPContactManager& aContactManager, + TUint aTabbedViewId, + TUint aServiceId, + CPbk2UIExtensionView& aView, + TUid aId, + CVIMPSTUIExtensionService& aServiceData, + MVIMPSTEngine& aEngine, + MVIMPSTCmdHandler& aCommandHandler, + CVIMPSTUIMenuExtension& aMenuExtension) + { + CVIMPSTUiTabbedView* self = new(ELeave) CVIMPSTUiTabbedView( aMapper, + aContactManager, + aTabbedViewId, + aServiceId, + aView, + aId, + aServiceData, + aEngine, + aCommandHandler, + aMenuExtension); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::~CVIMPSTUiTabbedView +// -------------------------------------------------------------------------- +// +CVIMPSTUiTabbedView::~CVIMPSTUiTabbedView() + { + delete iContactSelection; + delete iFriendRequestId; + + delete iSelectedData.iPackedLinks; + iSelectedData.iXSPList.ResetAndDestroy(); + + delete iQueryResult; + //Get SearchMgr + MVIMPSTEngineExtentionFeatures* feature = iEngine.ExtentionFeatures(TVIMPSTEnums::ESearch); + if (feature) + { + MVIMPSTEngineSearchMgrExtention& searchMgr = + MVIMPSTEngineSearchMgrExtention::Cast + (*feature); + + searchMgr.UnRegisterObserver(this); + } + + if(iParameter!=NULL) + iParameter->Close(); + if(iConnection!=NULL) + { + iConnection->Close(); + iConnection = NULL; + } + + if (iContainer && iAppUi ) + { + iAppUi->RemoveFromStack( iContainer->CoeControl() ); + delete iContainer; + iContainerCreationStarted = EFalse; + } + delete iBrandHandler; + iCommandHandler.UnRegisterEventObserver(this); + + if ( iFixedToolbar ) + { + iFixedToolbar->SetToolbarObserver( NULL ); + delete iFixedToolbar; + iFixedToolbar = NULL; + } + + if (iServiceHandler) + { + iServiceHandler->Reset(); + delete iServiceHandler; + iServiceHandler = NULL; + } + + delete iContact; + + if(iFocussedIDHistory) + { + delete iFocussedIDHistory; + iFocussedIDHistory = NULL; + } + delete iBrLauncher; + delete iUserId; + + if(iSettingsStore) + { + delete iSettingsStore; + iSettingsStore = NULL; + } + delete iStatusPaneHandler; + + delete iAiwParamList; + + if(iStatusMessage) + { + delete iStatusMessage; + } + + } + + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::DynInitMenuPaneL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ) + { + // AIW knows its own submenu hooks, so we can return from + // here if AIW handled this. + ReInitializeServiceHandlerL(); + + iMenuExtension.ResetAIWCommandMap(); + + if ( iServiceHandler->HandleSubmenuL( *aMenuPane ) ) + { + return; + } + + TBool imService = iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EIM); + TBool voipService = iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EVoip); + TBool presenceService = iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EPresence); + TVIMPSTEnums::TVIMPSTRegistrationState serviceTabState = + iEngine.ServiceState(); + + TInt itemIndex = CurrentItemIndex(); + // fetch the item and process correct type + TVIMPSTEnums::TItem itemType = iCommandHandler.GetProcessInterface().GetType(itemIndex); + TVIMPSTEnums::TOnlineStatus onlinestatus = iCommandHandler.GetProcessInterface().GetOnlineStatusL(itemIndex); + + switch( aResourceId) + { + case R_EXTENSION_MANAGER_MENU: + { + aMenuPane->AddMenuItemsL(R_SERVTAB_TABBED_VIEW_MENU); + aMenuPane->AddMenuItemsL(R_TABBED_VIEW_GENERAL_MENU); + + aMenuPane->SetItemDimmed(ECmdGetBlockedList, ETrue); + //based on sevice states decide what all submenu should be shown + //and main menu's to be shown + switch (serviceTabState) + { + case TVIMPSTEnums::ESVCENotRegistered: + { + aMenuPane->SetItemDimmed(ECmdCreateNewOption, ETrue); + aMenuPane->SetItemDimmed(ECmdMyAvatar, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeStatus, ETrue); + aMenuPane->SetItemDimmed(ECmdLogout, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninOnlineState, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninWaitingState, ETrue); + break; + } + case TVIMPSTEnums::ESVCERegistered: + { + if (!presenceService) + { + aMenuPane->SetItemDimmed(ECmdMyAvatar, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeStatus, ETrue); + } + else + { + //find whether avatar is supported + //Get Presence SubService + MVIMPSTEngineSubService* subService = + (iEngine.SubService(TVIMPSTEnums::EPresence)); + if(subService) + { + MVIMPSTEnginePresenceSubService& presence = + MVIMPSTEnginePresenceSubService::Cast (*subService); + + aMenuPane->SetItemDimmed(ECmdMyAvatar, !presence.IsAvatarSupported() ); + } + + } + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + + if (!ChangeConnectionSupportedL()) + { + aMenuPane->SetItemDimmed(ECmdChangeConnectioninOnlineState, ETrue); + } + + aMenuPane->SetItemDimmed(ECmdChangeConnectioninWaitingState, ETrue); + if(iEngine.IsBlockSupportedL()) + { + aMenuPane->SetItemDimmed(ECmdGetBlockedList, EFalse); + } + break; + } + case TVIMPSTEnums::ESVCENetworkConnecting: + { + aMenuPane->SetItemDimmed(ECmdChangeStatus, ETrue); + aMenuPane->SetItemDimmed(ECmdCreateNewOption, ETrue); + aMenuPane->SetItemDimmed(ECmdMyAvatar, ETrue); + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdLogout, ETrue); + aMenuPane->SetItemDimmed(ECmdSettings, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninOnlineState, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninWaitingState, ETrue); + if( !CancelLoginSupportedL()) + { + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + } + break; + } + case TVIMPSTEnums::ESVCEWaitingForNetwork: + case TVIMPSTEnums::ESVCEUpdatingContacts: + { + aMenuPane->SetItemDimmed(ECmdChangeStatus, ETrue); + aMenuPane->SetItemDimmed(ECmdCreateNewOption, ETrue); + aMenuPane->SetItemDimmed(ECmdMyAvatar, ETrue); + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninOnlineState, ETrue); + if (!ChangeConnectionSupportedL()) + { + aMenuPane->SetItemDimmed(ECmdChangeConnectioninWaitingState, ETrue); + } + break; + } + case TVIMPSTEnums::ESVCENetworkDisConnecting: + { + aMenuPane->SetItemDimmed(ECmdChangeStatus, ETrue); + aMenuPane->SetItemDimmed(ECmdCreateNewOption, ETrue); + aMenuPane->SetItemDimmed(ECmdMyAvatar, ETrue); + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdSettings, ETrue); + aMenuPane->SetItemDimmed(ECmdLogout, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninWaitingState, ETrue); + aMenuPane->SetItemDimmed(ECmdChangeConnectioninOnlineState, ETrue); + break; + } + default: + { + break; + } + } + // common to all + aMenuPane->SetItemDimmed(ECmdContactAddAsFriend, ETrue); + aMenuPane->SetItemDimmed(KAiwCmdCall, ETrue); + aMenuPane->SetItemDimmed(ECmdCloseConversation, ETrue); + aMenuPane->SetItemDimmed(ECmdContactDetails, ETrue); + aMenuPane->SetItemDimmed(ECmdOpenFriendRequest, ETrue); + aMenuPane->SetItemDimmed(ECmdContactEdit, ETrue); + aMenuPane->SetItemDimmed(ECmdAIWAddToContact, ETrue); + aMenuPane->SetItemDimmed(ECmdAIWLinkToContact, ETrue); + aMenuPane->SetItemDimmed(ECmdBlock, ETrue); + aMenuPane->SetItemDimmed(ECmdUnBlock, ETrue); + aMenuPane->SetItemDimmed(ECmdContactDelete, ETrue); + //based on items in focus decide what main menu items needs to be shown + switch(itemType) + { + case TVIMPSTEnums::EOwnStatusItem: + case TVIMPSTEnums::EInvalid: // this case comes when no matched found for findpane characters + { + break; + } + case TVIMPSTEnums::EContactItem: + { + //conversation related menu + MVIMPSTStorageServiceView* storage = + CVIMPSTStorageManagerFactory::ContactListInterfaceL(iServiceId); + TBool localstore = EFalse; + if (storage) + { + localstore = storage->IsLocalStore(); + } + if (TVIMPSTEnums::ESVCERegistered == serviceTabState) + { + TPtrC selectedItem = iCommandHandler.GetProcessInterface(). + GetItemUserId(itemIndex); + if( selectedItem != KNullDesC ) + { + if (imService) + { + if ( iCommandHandler.GetProcessInterface().IsConversationExist( itemIndex ) ) + { + aMenuPane->SetItemDimmed(ECmdCloseConversation, EFalse); + } + } + } + if(voipService) + { + TInt index; + aMenuPane->MenuItemExists(KAiwCmdCall, index); + aMenuPane->SetItemDimmed(KAiwCmdCall, EFalse); + + CAiwDialDataExt* dialDataExt = CAiwDialDataExt::NewL(); + CleanupStack::PushL( dialDataExt ); + dialDataExt->SetServiceId( iServiceId ); + ReInitializeServiceHandlerL(); + CAiwGenericParamList& paramList = iServiceHandler->InParamListL(); + dialDataExt->FillInParamListL( paramList ); + TAiwVariant variant; + TAiwGenericParam param ( EGenericParamSIPAddress, variant ); + paramList.AppendL( param ); + iServiceHandler->InitializeMenuPaneL( *aMenuPane, + R_SERVTAB_TABBED_VIEW_MENU, + // Must not overlap with the other menu ids! + ECmdAIWRangeStart, + paramList ); + + CleanupStack::PopAndDestroy( dialDataExt ); + + CEikMenuPaneItem::SData& data = aMenuPane->ItemDataByIndexL(index); + //add to AIW command map of the menuextension manager + iMenuExtension.AddToAIWCommandMap(KAiwCmdCall,data.iCommandId); + } + + aMenuPane->SetItemDimmed(ECmdContactDetails, EFalse); + + if (localstore) + { + //ContactEdit is enabled only for localstore + aMenuPane->SetItemDimmed(ECmdContactEdit, EFalse); + } + if(iEngine.IsBlockSupportedL()) + { + TVIMPSTEnums::TOnlineStatus status = iCommandHandler.GetProcessInterface().GetOnlineStatusL(itemIndex); + if(TVIMPSTEnums::EBlocked == status ) + { + aMenuPane->SetItemDimmed(ECmdUnBlock, EFalse); + } + else if( selectedItem .Length() ) + { + aMenuPane->SetItemDimmed(ECmdBlock, EFalse); + } + } + aMenuPane->SetItemDimmed(ECmdContactDelete, EFalse); + + + if (!localstore) + { + aMenuPane->SetItemDimmed(ECmdAIWAddToContact, EFalse); + aMenuPane->SetItemDimmed(ECmdAIWLinkToContact, EFalse); + } + } + else if (TVIMPSTEnums::ESVCENotRegistered == serviceTabState) + { + if(!presenceService) + { + if (localstore) + { + //ContactEdit is enabled only for localstore + aMenuPane->SetItemDimmed(ECmdContactEdit, EFalse); + } + } + } + + break; + } + case TVIMPSTEnums::EUnknonContactItem : + { + aMenuPane->SetItemDimmed(ECmdContactAddAsFriend, EFalse); + aMenuPane->SetItemDimmed(ECmdContactDetails, ETrue); + aMenuPane->SetItemDimmed(ECmdOpenFriendRequest, ETrue); + aMenuPane->SetItemDimmed(ECmdContactEdit, ETrue); + aMenuPane->SetItemDimmed(ECmdAIWAddToContact, ETrue); + aMenuPane->SetItemDimmed(ECmdAIWLinkToContact, ETrue); + aMenuPane->SetItemDimmed(ECmdBlock, ETrue); + aMenuPane->SetItemDimmed(ECmdUnBlock, ETrue); + aMenuPane->SetItemDimmed(ECmdContactDelete, ETrue); + if( iEngine.IsBlockSupportedL() ) + { + aMenuPane->SetItemDimmed(ECmdBlock, EFalse); + } + if (imService) + { + if (iCommandHandler.GetProcessInterface().IsConversationExist( itemIndex )) + { + aMenuPane->SetItemDimmed(ECmdCloseConversation, EFalse); + } + } + if(voipService) + { + TInt index; + aMenuPane->MenuItemExists(KAiwCmdCall, index); + + aMenuPane->SetItemDimmed(KAiwCmdCall, EFalse); + + CAiwDialDataExt* dialDataExt = CAiwDialDataExt::NewL(); + CleanupStack::PushL( dialDataExt ); + dialDataExt->SetServiceId( iServiceId ); + ReInitializeServiceHandlerL(); + CAiwGenericParamList& paramList = iServiceHandler->InParamListL(); + dialDataExt->FillInParamListL( paramList ); + TAiwVariant variant; + TAiwGenericParam param ( EGenericParamSIPAddress, variant ); + paramList.AppendL( param ); + iServiceHandler->InitializeMenuPaneL( *aMenuPane, + R_SERVTAB_TABBED_VIEW_MENU, + // Must not overlap with the other menu ids! + ECmdAIWRangeStart, + paramList ); + CleanupStack::PopAndDestroy( dialDataExt ); + + CEikMenuPaneItem::SData& data = aMenuPane->ItemDataByIndexL(index); + //add to AIW command map of the menuextension manager + iMenuExtension.AddToAIWCommandMap(KAiwCmdCall,data.iCommandId); + + } + break; + } + case TVIMPSTEnums::EFriendRequestItem: + { + aMenuPane->SetItemDimmed(ECmdContactDetails, ETrue); + aMenuPane->SetItemDimmed(ECmdContactEdit, ETrue); + aMenuPane->SetItemDimmed(ECmdAIWAddToContact, ETrue); + aMenuPane->SetItemDimmed(ECmdAIWLinkToContact, ETrue); + aMenuPane->SetItemDimmed(ECmdBlock, ETrue); + aMenuPane->SetItemDimmed(ECmdUnBlock, ETrue); + aMenuPane->SetItemDimmed(ECmdContactDelete, ETrue); + aMenuPane->SetItemDimmed(ECmdOpenFriendRequest, EFalse); + if(iEngine.IsBlockSupportedL()) + { + aMenuPane->SetItemDimmed(ECmdBlock, EFalse); + } + break; + } + default: + { + break; + } + } + // append the servicetab options(R_TABBED_VIEW_OPTIONS_MENU) and tabbed + // viem(R_SERVTAB_TABBED_VIEW_MENU) menu items and the the service + // specific options and then settings,help and exit.(R_TABBED_VIEW_GENERAL_MENU) + iMenuExtension.OfferMenuPaneToPlugins(ECmdCancelLogin,*aMenuPane,iServiceId); + + break; + } + + case R_SERVTAB_CREATENEW_OPTION_SUBMENU: + { + + aMenuPane->SetItemDimmed(ECmdAddContact, ETrue); + aMenuPane->SetItemDimmed(ECmdAddFromPhoneBook, ETrue); + aMenuPane->SetItemDimmed(ECmdSearch, ETrue); + + if (TVIMPSTEnums::ESVCERegistered == serviceTabState) + { + aMenuPane->SetItemDimmed(ECmdAddContact, EFalse); + aMenuPane->SetItemDimmed(ECmdAddFromPhoneBook, EFalse); + + //make search request using search manager in engine + MVIMPSTEngineExtentionFeatures* feature = + iEngine.ExtentionFeatures(TVIMPSTEnums::ESearch); + + if (feature) + { + if ( TVIMPSTEnums::ESupported == feature->IsSupported() ) + { + aMenuPane->SetItemDimmed(ECmdSearch, EFalse);//show if search is supported. + } + } + } + break; + } + + case R_SERVTAB_CHANGEAVATAR_SUBMENU: + { + if ((TVIMPSTEnums::ESVCERegistered != serviceTabState) || + (!presenceService)) + { + aMenuPane->SetItemDimmed(ECmdAvatarGallery, ETrue); + aMenuPane->SetItemDimmed(ECmdAvatarNewPhoto, ETrue); + aMenuPane->SetItemDimmed(ECmdDefaultAvatar, ETrue); + } + break; + } + + case R_TABBED_VIEW_GENERAL_MENU: + { + switch (serviceTabState) + { + case TVIMPSTEnums::ESVCENotRegistered: + { + aMenuPane->SetItemDimmed(ECmdLogout, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdGetBlockedList, ETrue); + break; + } + case TVIMPSTEnums::ESVCERegistered: + { + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + break; + } + case TVIMPSTEnums::ESVCENetworkConnecting: + { + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdGetBlockedList, ETrue); + aMenuPane->SetItemDimmed(ECmdLogout, ETrue); + aMenuPane->SetItemDimmed(ECmdSettings, ETrue); + if( !CancelLoginSupportedL()) + { + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + } + break; + } + case TVIMPSTEnums::ESVCEWaitingForNetwork: + case TVIMPSTEnums::ESVCEUpdatingContacts: + { + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdGetBlockedList, ETrue); + break; + } + case TVIMPSTEnums::ESVCENetworkDisConnecting: + { + aMenuPane->SetItemDimmed(ECmdLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdCancelLogin, ETrue); + aMenuPane->SetItemDimmed(ECmdSettings, ETrue); + aMenuPane->SetItemDimmed(ECmdGetBlockedList, ETrue); + aMenuPane->SetItemDimmed(ECmdLogout, ETrue); + break; + } + default: + { + break; + } + + + } + break; + } + } + + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleCommandL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleCommandL(TInt aCommand) + { + //offer to extensions first, then to aiw. + if(iMenuExtension.OfferHandleCommandToPlugins(aCommand)) + { + //command is executed, hence return. + return; + } + ReInitializeServiceHandlerL(); + TInt serviceCommandId =iServiceHandler->ServiceCmdByMenuCmd(aCommand); + + if ( iContainer && serviceCommandId == KAiwCmdCall ) + { + MakeVoipCallL(); + return; + } + + if( iContainer ) + { + iContainer->SetClrFindPaneFlag(ETrue); + } + + switch (aCommand) + { + case ECmdLogin: + { + LoginL(); + break; + } + case ECmdSearch: + { + SearchContactsL(); + break; + } + case ECmdAddFromPhoneBook: + { + + LaunchFetchDialogL(); + break; + } + case EAknCmdHelp: + { + TBool imSupported = iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EIM); + TBool voipSupported = iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EVoip); + if ( imSupported ) + { + if ( voipSupported ) + { // both Im and VOIP are enabled + LaunchHelpL( KSERVTAB_HLP_MAIN_VIEW_VOIPIM ); + } + else + {// only IM is enabled + LaunchHelpL( KSERVTAB_HLP_MAIN_VIEW_IM ); + } + } + else if ( voipSupported ) + { // only VOIP is enabled + LaunchHelpL( KSERVTAB_HLP_MAIN_VIEW_VOIP ); + } + + break; + } + case EAknCmdExit: + case EAknSoftkeyExit: + { + //exit from phone book. + Pbk2AppUi()->HandleCommandL( EAknSoftkeyExit ); + + break; + } + case ECmdSettings: + { + LaunchSettingsViewL(); + break; + } + + case ECmdLogout: + { + // this is for actual network logout + iCommandHandler.HandleCommandL(ELogoutService, this, &iServiceId); + break; + } + + case ECmdContactDetails: + { + TInt index = KErrNotFound; + if (iContainer) + { + index = iContainer->CurrentItemIndex(); + } + if(KErrNotFound != index) + { + TLaunchCCAData data; + data.iIndex = index; + iConnection = TCCAFactory::NewConnectionL(); + data.iConnection = iConnection; + iCommandHandler.HandleCommandL(ELaunchCCA, this, &data ); + } + break; + } + case ECmdOpenConversation: + { + if( iContainer ) + { + iContainer->SendMessageL(); + } + + break; + } + + case ECmdAddContact: + { + AddContactL( R_IM_ADD_CONTACT_MANUAL_QUERY ); + break; + } + + case ECmdContactEdit: + { + EditContactL(); + break; + } + case ECmdContactDelete: + { + if( iContainer ) + { + iContainer->SetClrFindPaneFlag(EFalse); + } + DeleteContactL(); + break; + } + case ECmdChangeStatus: + { + ChangeStatusProcessL(); + break; + } + case ECmdCancelLogin: + { + iCommandHandler.HandleCommandL( ECancelLogin , this , NULL ); + break; + } + + case ECmdOpenFriendRequest: + { + ProcessFriendRequestL(); + break; + } + + case ECmdAvatarGallery: + case ECmdAvatarNewPhoto: + { + CAvatarSelectionHandler* avatarHandler = CAvatarSelectionHandler::NewLC(); + HBufC* avatarFile = avatarHandler->HandleAvatarSelectionL( aCommand ); + if( avatarFile ) // if user selected the image + { + CleanupStack::PushL( avatarFile ); + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( R_QTN_SERVTAB_CHANGE_AVATAR_CHANGING, EFalse , ETrue ); + ChangeOwnAvatarL( *avatarFile , avatarHandler->MimeTypeL() ); + CleanupStack::PopAndDestroy(); //avatarFile + } + CleanupStack::PopAndDestroy(); // avatarHandler + break; + } + case ECmdDefaultAvatar: + { + ChangeOwnAvatarL( KNullDesC , KNullDesC8 ); + break; + } + + case ECmdCloseConversation: + { + CloseConversationL(); + break; + } + case ECmdChangeConnectioninWaitingState: + case ECmdChangeConnectioninOnlineState: + { + iEngine.ChangeConnectionL(); + break; + } + case ECmdBlock: + { + if( iContainer ) + { + iContainer->SetClrFindPaneFlag(EFalse); + } + BlockContactL(ETrue); + break; + } + case ECmdUnBlock: + { + if( iContainer ) + { + iContainer->SetClrFindPaneFlag(EFalse); + } + BlockContactL(); + break; + } + case ECmdGetBlockedList: + { + ShowBlockedContactListL(); + break; + } + case ECmdAIWAddToContact: + case ECmdAIWLinkToContact: + { + CreateOrLinkToPhoneBookL(aCommand); + break; + } + case ECmdContactAddAsFriend: + { + TInt index = KErrNotFound; + if (iContainer) + { + index = iContainer->CurrentItemIndex(); + } + MVIMPSTProcessArray& arrayprocess = iCommandHandler.GetProcessInterface(); + TVIMPSTEnums::TItem itemType = arrayprocess.GetType( index ); + if( itemType == TVIMPSTEnums::EUnknonContactItem ) + { + TPtrC userId = arrayprocess.GetItemUserId( index ); + AddContactL( R_IM_ADD_CONTACT_MANUAL_QUERY , userId ); + } + break; + } + case EAknCmdHideInBackground: + { + //in case of EAknCmdHideInBackground phonebook be in + //background and all the child application should close + + if(iConnection)// close connection to close cca + { + iConnection->Close(); + iConnection = NULL; + } + if (iServiceHandler)//reset selectionhandler so that it closes all the phonebook forms if open + { + iServiceHandler->Reset(); + iIsServiceHandleReSet = ETrue; + } + + Pbk2AppUi()->HandleCommandL( aCommand ); + + break; + } + default: + { + Pbk2AppUi()->HandleCommandL( aCommand ); + break; + } + } + } + + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::DoActivateViewL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::DoActivateViewL( const TVwsViewId& aPrevViewId, + TUid /*aCustomMessageId*/, + const TDesC8& aCustomMessage) + { + // When ST is launched from widget or universal indicator plugin + // user clicks twice continuously, then DoActivateL is called + // twice, as iContainer is NULL since construction is not complete + // then it creates two controls (containers), hence to avoid this + // situation, we are checking if construction of iContainer has + // started, then we ignore DoActivateL second time. + MPbk2ViewActivationTransaction* viewActivationTransaction = + Pbk2AppUi()->Pbk2ViewExplorer()->HandleViewActivationLC( + iView.Id(), + aPrevViewId, + &iEngine.ServiceName(), + NULL, + EUpdateAll ); + + // Notifies startup monitor of view activation + if( Pbk2AppUi()->Pbk2StartupMonitor() ) + { + Pbk2AppUi()->Pbk2StartupMonitor()-> + NotifyViewActivationL( iView.Id() ); + } + + iView.Cba()->SetCommandSetL( R_IM_CONTACTS_TABBED_VIEW_SOFTKEYS ); + + ReadAndSetOwnUserIdL(); + + if (!iContainer&& !iContainerCreationStarted) + { + iContainerCreationStarted = ETrue; + iContainer = MVIMPSTUiTabbedViewControlFactory::NewTabControlL(*this, + &iView,iCommandHandler, iServiceId, + *iBrandHandler, iEngine); + // take the control pointer + CCoeControl* cCoeControl = iContainer->CoeControl(); + iAppUi->AddToStackL( iView, cCoeControl ); + cCoeControl->SetMopParent( &iView ); + cCoeControl->SetRect( iView.ClientRect() ); + cCoeControl->ActivateL(); + } + iStatusPaneHandler->SetTextL( iEngine.ServiceName() ); + // Commit application-wide state changes + viewActivationTransaction->Commit(); + CleanupStack::PopAndDestroy(); //viewActivationTransaction + + //CreateToolBarL(); + + if(TVIMPSTEnums::ESVCERegistered == iEngine.ServiceState()) + { + if(iIsToolBarHidden) + { + ShowHideFixedToolbarL(ETrue); + } + } + else + { + if(!iIsToolBarHidden) + { + ShowHideFixedToolbarL(EFalse); + } + } + + if(iContainer && iFocussedIDHistory ) + { + iContainer->SetFocussedId( iFocussedIDHistory->Des() ); + } + + /* + * aCustomMessage has following format if it is coming from Service Widget + * when you click on widget + * we need to unpack data in similar format + * version number --> stream.WriteInt8L(1); + * EEnd --> stream.WriteInt8L( 0 ); + * Service Id --> stream.WriteInt32L( iServiceId ); + * + * If function call is coming from other than service widget then + * aCustomMessage will not have data in above format + */ + + if(aCustomMessage.Length()) + { + RDesReadStream stream( aCustomMessage); + stream.PushL(); + TInt serviceId = KErrNotFound; + TRAP_IGNORE( const TUint versionNumber = stream.ReadUint8L(); //equal to 1 + TInt type = stream.ReadInt8L(); // equal to eend + serviceId = stream.ReadInt32L(); ); + CleanupStack::PopAndDestroy();//stream + if( serviceId == iServiceId ) + { + // this case will get excuted only when there is + // fresh login from service widget for first time only + // uid has been taken for autologin + // if the service id is matches to aCustomMessage + // it is auto login ,called from service widget + // start the login procedure + LoginL(); + } + } + UpdateToolbarL(); + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::DoDeactivate +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::DoDeactivate() + { + + if(iFixedToolbar) + { + iIsToolBarHidden = ETrue; + delete iFixedToolbar; + iFixedToolbar = NULL; + } + + if (iContainer) + { + delete iFocussedIDHistory; + iFocussedIDHistory = NULL; + TRAP_IGNORE( iFocussedIDHistory = iContainer->GetFocussedId().AllocL() ); + iAppUi->RemoveFromStack( iContainer->CoeControl() ); + delete iContainer; + iContainer = NULL; + iContainerCreationStarted = EFalse; + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleForegroundEventL +// -------------------------------------------------------------------------- +// +TAny* CVIMPSTUiTabbedView::UIExtensionViewExtension( + TUid aExtensionUid ) + { + if (aExtensionUid == KMPbk2UIExtensionView2Uid) + { + return static_cast(this); + } + return NULL; + } +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleForegroundEventL +// -------------------------------------------------------------------------- +// + + void CVIMPSTUiTabbedView::HandleForegroundEventL(TBool aForeground) + { + if( aForeground && TVIMPSTEnums::ESVCENotRegistered == iEngine.ServiceState() ) + { + // user might has changed the setting read the new and refresh the view + // user can change setting in offline only + ReadAndSetOwnUserIdL(); + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleCommandKeyL +// -------------------------------------------------------------------------- +// +TBool CVIMPSTUiTabbedView::HandleCommandKeyL(const TKeyEvent& aKeyEvent, TEventCode /*aType*/) + { + TBool result = EFalse; + switch (aKeyEvent.iCode) + { + default: + { + break; + } + } + return result; + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleStatusPaneSizeChange +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleStatusPaneSizeChange() + { + // Resize the container to fill the client rectangle + if (iContainer) + { + iContainer->CoeControl()->SetRect( iView.ClientRect() ); + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CommandHandlerL +// -------------------------------------------------------------------------- +// +MVIMPSTCmdHandler& CVIMPSTUiTabbedView::CommandHandlerL() + { + return iCommandHandler; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CommandFinishedL +// -------------------------------------------------------------------------- +// + +void CVIMPSTUiTabbedView::CommandFinishedL( + const MVIMPSTCmd& aCommand ) + { + + //handle the observer for commands issues thro HandleCommandL() + + switch (aCommand.CommandId()) + { + case ELoginService: + { + //login command is complete + //use aCommand.Result() to get the data + //Ownership is not given to the caller + break; + } + case ELogoutService: + { + //logout command is complete + //use aCommand.Result() to get the data + //Ownership is not given to the caller + break; + } + case ECmdProcessAcceptedContactNew: // accept create new + case ECmdProcessAcceptedContactExist: // update existing + case ECmdProcessSelectedContactNew: + case ECmdProcessSelectedContactExist:// add from phonebook + case EAddContact: + { + //addcontact command is complete + //use aCommand.Result() to get the data + //Ownership is not given to the caller + //some error occured. + if (iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + if(aCommand.Result() != KErrNone) + { + ShowErrorNoteL( aCommand.Result() ); + } + break; + } + case EDeleteContact: + { + //addcontact command is complete + //use aCommand.Result() to get the data + //Ownership is not given to the caller + //some error occured. + if (iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + if(aCommand.Result() != KErrNone) + { + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( R_IM_ERROR_SERVICE_ERR ); + TInt ret( VIMPSTUtilsDialog::DisplayErrorNoteL( *prompt ) ); + CleanupStack::PopAndDestroy(prompt); + } + break; + } + case EChangeOwnStatus: + { + TInt error = aCommand.Result(); + if( KErrNone == error ) + { + // show confirmation note + HBufC* text = CEikonEnv::Static()->AllocReadResourceLC( R_QTN_CHAT_CHANGE_STATUS_CHANGED ); + CAknConfirmationNote* dlg = new( ELeave )CAknConfirmationNote(); + dlg->ExecuteLD( *text ); + CleanupStack::PopAndDestroy( text ); + //get the status from the engine and update in the ui. + if(iContainer) + { + iContainer->HandleItemAdditionL(); + } + + } + else if( KErrCancel == error ) + { + // user cancelled, status was not updated + HBufC* text = NULL; + text = StringLoader::LoadLC( R_QTN_IM_CHANGE_STATUS_NOT_CHANGED ); + VIMPSTUtilsDialog::DisplayNoteDialogL( *text ); + CleanupStack::PopAndDestroy(); //onlineText + } + else + { + // change status failed + HBufC* failed = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_STATUS_FAILED ); + VIMPSTUtilsDialog::DisplayErrorNoteL( *failed ); + CleanupStack::PopAndDestroy( failed ); + } + break; + } + case EChangeOwnMessage: + { + TInt error = aCommand.Result(); + if( KErrNone == error ) + { + // show note qtn_chat_change_message_changing + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_MESSAGE_CHANGED ); + VIMPSTUtilsDialog::DisplayNoteDialogL( *prompt); + CleanupStack::PopAndDestroy(prompt); + } + else if( KErrCancel == error) + { + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( R_QTN_IM_CHANGE_STATUS_NOT_CHANGED ); + VIMPSTUtilsDialog::DisplayNoteDialogL( *prompt); + CleanupStack::PopAndDestroy(prompt); + } + else + { + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_MESSAGE_FAILED ); + VIMPSTUtilsDialog::DisplayNoteDialogL(*prompt ); + CleanupStack::PopAndDestroy(prompt); + } + + break; + } + case ESearch: + { + // Search command is complete + //use aCommand.Result() to get the data + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + if(aCommand.Result() != KErrNone) + { + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC(R_QTN_CHAT_ERROR_NOT_SUP_FUNCTIONS ); + VIMPSTUtilsDialog::DisplayErrorNoteL( *prompt ) ; + CleanupStack::PopAndDestroy(prompt); + LaunchViewL(iExtensionService.TabbedViewId()); + } + } + case EFriendRejected: + case EFriendAccpeted: + { + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + if( ( aCommand.Result() != KErrNone ) && ( aCommand.CommandId() == EFriendAccpeted ) ) + { + HBufC* prompt = StringLoader::LoadLC( R_QTN_SERVTAB_SAVING_CONTACT_FAILED ); + VIMPSTUtilsDialog::DisplayErrorNoteL( *prompt ) ; + CleanupStack::PopAndDestroy(prompt); + } + break; + } + case EChangeOwnAvtar: + { + if(aCommand.Result() == KErrNone) // successfull show confirmation note + { + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + } + else // show error note + { + HBufC* prompt = StringLoader::LoadLC( R_QTN_SERVTAB_ERROR_UPDATE_AVATAR ); + VIMPSTUtilsDialog::DisplayErrorNoteL( *prompt ) ; + CleanupStack::PopAndDestroy(prompt); + } + break; + } + case ECmdBlockContact: + { + //blockcontact command is complete + //use aCommand.Result() to get the data + //Ownership is not given to the caller + //some error occured. + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + if(aCommand.Result() != KErrNone) + { + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( R_QTN_CHAT_BLOCKING_FAILED ); + TInt ret( VIMPSTUtilsDialog::DisplayErrorNoteL( *prompt ) ); + CleanupStack::PopAndDestroy(prompt); + } + break; + } + case ECmdUnBlockContact: + { + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + //unblockcontact command is complete + //use aCommand.Result() to get the data + //Ownership is not given to the caller + //some error occured. + if(aCommand.Result() != KErrNone) + { + HBufC* prompt = NULL; + prompt = StringLoader::LoadLC( R_QTN_CHAT_UNBLOCKING_FAILED ); + TInt ret( VIMPSTUtilsDialog::DisplayErrorNoteL( *prompt ) ); + CleanupStack::PopAndDestroy(prompt); + } + break; + } + default: + { + //should never be here. + break; + } + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ShowErrorNoteL +// -------------------------------------------------------------------------- +void CVIMPSTUiTabbedView::ShowErrorNoteL(TInt aError ) + { + HBufC* textResource = NULL; + switch( aError) + { + case EErrExistInBlockList: + { + textResource = StringLoader::LoadLC( R_QTN_SERVTAB_ADD_FRIEND_BLOCKED); + break; + } + case KErrAlreadyExists : + case EErrExistInContactList: + { + textResource = StringLoader::LoadLC( R_QTN_SERTAB_CONTACT_ALREADY_EXISTS_ERROR_NOTE); + break; + } + default : + { + textResource = StringLoader::LoadLC( R_QTN_SERVTAB_SAVING_CONTACT_FAILED ); + break; + } + } + if( textResource ) + { + CAknInformationNote* note = new ( ELeave ) CAknInformationNote; + note->ExecuteLD( *textResource ); + CleanupStack::PopAndDestroy( textResource ); + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleCommandEventL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleCommandEventL(TVIMPSTEnums::TVIMPSTRegistrationState aState, TInt /*aServiceError*/) + { + switch (aState) + { + case TVIMPSTEnums::ESVCERegistered: + { + // this is to make sure that it always has the user id + // some services they do not have the user id in offline case + // like skype ,get the user if service is logged in + if( !iUserId || iUserId->Length() == 0 ) + { + // read if user id is empty only + ReadAndSetOwnUserIdL(); + } + TInt isSuccessfulLogin = 0; + iSettingsStore->GetL(iServiceId, EServiceSuccessfullLogin, isSuccessfulLogin); + if(!isSuccessfulLogin) + { + isSuccessfulLogin = 1; + iSettingsStore->SetL(iServiceId, EServiceSuccessfullLogin, isSuccessfulLogin); + } + if(iIsToolBarHidden) + { + ShowHideFixedToolbarL(ETrue); + } + break; + } + case TVIMPSTEnums::ESVCENotRegistered: + { + // might user has choosen some diff user id while login + // set to store and engine etc + ReadAndSetOwnUserIdL(); + + // no need to hide the tool bar here as its already called while in the + // disconnecting state. + // assume in some cornere scenario, where network is lost, and the ui does not + // get a callback for disconnecting state then we need to call hidetoolbar in this case. + // hence the flag iIsToolBarHidden will set it when ever the tool bar is hidden + if(!iIsToolBarHidden) + { + ShowHideFixedToolbarL(EFalse); + } + break; + } + case TVIMPSTEnums::ESVCENetworkConnecting: + { + // might user has choosen some diff user id while login + // set to store and engine etc + ReadAndSetOwnUserIdL(); + break; + } + case TVIMPSTEnums::ESVCEWaitingForNetwork: + { + break; + } + case TVIMPSTEnums::ESVCENetworkDisConnecting: + { + if(!iIsToolBarHidden) + { + ShowHideFixedToolbarL(EFalse); + } + break; + } + case TVIMPSTEnums::ESVCEUpdatingContacts: + { + // might user has choosen some diff user id while login + // set to store and engine etc + // this is to make sure that it always has the user id + // some services they do not have the user id in offline case + // like skype ,get the user if service is logged in + if( !iUserId || iUserId->Length() == 0 ) + { + // read if user id is empty only + ReadAndSetOwnUserIdL(); + } + break; + } + default: + { + //should never be here. + break; + } + + } + if(iContainer) + { + iContainer->HandleItemAdditionL(); + } + + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CurrentItemIndex +// -------------------------------------------------------------------------- +// +TInt CVIMPSTUiTabbedView:: CurrentItemIndex() + { + TInt index = KErrNone; + iContainer?(index = iContainer->CurrentItemIndex()):(index = KErrNotFound); + return index; + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ReadAndSetOwnUserIdL() +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ReadAndSetOwnUserIdL() + { + if( iUserId ) + { + delete iUserId; + iUserId = NULL; + } + iUserId = iEngine.GetOwnUserIdFromCChOrStorageL(); + iEngine.SetOwnUserIdIfChangedL( *iUserId ); + } +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::AddContactL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::AddContactL( const TInt aResouceId, const TDesC& aUserId ) + { + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL(iServiceId); + if (storage) + { + if (!storage->IsLocalStore()) + { + HBufC* userid = HBufC::NewL(KUsernameMaxLength); + CleanupStack::PushL( userid ); + TPtr useridPtr( userid->Des() ); + + useridPtr.Copy( aUserId.Left( KUsernameMaxLength ) ); + TInt result = 0; + if( useridPtr == KNullDesC ) + { + CAknTextQueryDialog* dlg = CAknTextQueryDialog::NewL( useridPtr, CAknQueryDialog::ENoTone ); + dlg->SetPredictiveTextInputPermitted( ETrue ); // T9 + result = dlg->ExecuteLD( aResouceId ); + } + if( ( result == EAknSoftkeyOk ) || ( result == EAknSoftkeyYes ) || ( useridPtr != KNullDesC ) ) + { + TPtrC ownUserId = storage->OwnContactL().UserId(); + if(useridPtr.Compare( ownUserId ) == 0) //Do not add own data item to contact list + { + //show note "Own Data Item cannot be added" + HBufC* failed = StringLoader::LoadLC( R_QTN_SERVTAB_ERROR_ADDOWN ); + VIMPSTUtilsDialog::DisplayErrorNoteL( *failed ); + CleanupStack::PopAndDestroy( failed ); + } + else + { + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_SERVTAB_SAVING_CONTACT ,ETrue); + iCommandHandler.HandleCommandL(EAddContact, this, userid ); + CleanupStack::PopAndDestroy( note ); + } + } + CleanupStack::PopAndDestroy(userid); + } + else // server store + + { + //////////////////////////////////////////// + ReInitializeServiceHandlerL(); + TUint assignFlags = 0; + //for unknown item createnew/update existing querry is shown + // check whether the selected contact is unknown + if( iCommandHandler.GetProcessInterface().GetType(iContainer->CurrentItemIndex()) == TVIMPSTEnums::EUnknonContactItem ) + { + iSelectedAction = ShowNewUpdateQueryL(); + if(CVIMPSTUiTabbedView::EInvitAcceptCreateNew == iSelectedAction )//create new + { + assignFlags |= ECreateNewContact; + iSelectedAction = EContactCreateNew; + } + else if(CVIMPSTUiTabbedView::EInvitAcceptUpdateExisting == iSelectedAction ) // update existing + { + iSelectedAction = EContactAddFromContacts; + } + else // selected cancle option + { + return; + } + } + else // not unknown contact + { + iSelectedAction = EContactCreateNew; + assignFlags |= ECreateNewContact; + } + //show the phonebook dialog for create new/update existing option + if(iAiwParamList) + { + delete iAiwParamList; + iAiwParamList = NULL; + } + iAiwParamList = CAiwGenericParamList::NewL(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactAssignData, + TAiwVariant(TAiwSingleContactAssignDataV1Pckg( + TAiwSingleContactAssignDataV1().SetFlags( assignFlags ))))); + + if( aUserId.Length() > 0 ) + { + // add user id in impp field + TBuf xspId; //xsp max length + xspId.Append(iEngine.ServiceName()); + xspId.Append(KColon); + xspId.Append(aUserId); + + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamXSpId, + TAiwVariant(xspId) ) ); + } + iServiceHandler->ExecuteServiceCmdL( + KAiwCmdAssign, + *iAiwParamList, + iServiceHandler->OutParamListL(), + 0, + this); + } + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CreateOrLinkToPhoneBookL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::CreateOrLinkToPhoneBookL(TInt aCommand ) + { + TInt index = CurrentItemIndex(); + if( index <= 0 ) + { + return; + } + TUint assignFlags = 0; + if(ECmdAIWAddToContact == aCommand )//create new option + { + assignFlags |= ECreateNewContact; + } + TPtrC itemUserId = iCommandHandler.GetProcessInterface().GetItemUserId(index) ; + if(iAiwParamList) + { + delete iAiwParamList; + iAiwParamList = NULL; + } + iAiwParamList = CAiwGenericParamList::NewL(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactAssignData, + TAiwVariant(TAiwSingleContactAssignDataV1Pckg( + TAiwSingleContactAssignDataV1().SetFlags( assignFlags ))))); + + TBuf xspid; + xspid.Append(iEngine.ServiceName()); + xspid.Append(KColon); + xspid.Append(itemUserId); + ReInitializeServiceHandlerL(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamXSpId, + TAiwVariant(xspid)) ); + + iServiceHandler->ExecuteServiceCmdL( KAiwCmdAssign, + *iAiwParamList, + iServiceHandler->OutParamListL(), + 0, + this); + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::EditContactL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::EditContactL() + { + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL(iServiceId); + if (storage) + { + if( storage->IsLocalStore()) + { + iSelectedAction = KErrNotFound; + TInt index = CurrentItemIndex(); + MVPbkContactLink* contactLink = iCommandHandler.GetProcessInterface().ContactLink(index); + //show the phonebook dialog for edit existing data + if(iAiwParamList) + { + delete iAiwParamList; + iAiwParamList = NULL; + } + iAiwParamList = CAiwGenericParamList::NewL(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactAssignData, + TAiwVariant(TAiwSingleContactAssignDataV1Pckg( + TAiwSingleContactAssignDataV1().SetFlags( EskipInfoNotes ))))); + + HBufC8* packedLinks = contactLink->PackLC(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactLinkArray, + TAiwVariant(*packedLinks) ) ); + ReInitializeServiceHandlerL(); + + iServiceHandler->ExecuteServiceCmdL( + KAiwCmdAssign, + *iAiwParamList, + iServiceHandler->OutParamListL(), + 0, + this); + CleanupStack::PopAndDestroy(); // packedLinks + } + } + } + + + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::AddContactL +// -------------------------------------------------------------------------- +void CVIMPSTUiTabbedView::AddContactL(RPointerArray aContacts) + { + TInt count = aContacts.Count(); + + switch( count ) + { + case 0://no xsp found. + { + //launch add manually dialog. + AddContactL( R_IM_ADD_CONTACT_MANUAL_QUERY );//to do replace with some thing else. + break; + } + case 1://1 xsp foud. + { + //add new contact. + HBufC* xspId = aContacts[0]; + AddContactL( R_IM_ADD_CONTACT_MANUAL_QUERY, *xspId ); + break; + } + default :// > 1 xsp found. + { + //show single selection dialog + TInt selectionIndex = 0; + CDesCArray* xspIds = new( ELeave )CDesCArrayFlat( count ); + CleanupStack::PushL( xspIds ); + + //add all xsp(s) from aContacts to xspIds. + for( TInt i = 0 ; i < count ; i++ ) + { + xspIds->AppendL( *aContacts[i] ); + } + + HBufC* titleText = StringLoader::LoadLC( R_QTN_SERVTAB_SELECT_USER ); + + TInt ret = VIMPSTUtilsDialog::DisplayListQueryDialogL( &selectionIndex, + xspIds, + R_IM_LIST_SELECT_STATUS_MESSAGE_DLG, + *titleText, + KNullDesC, + ETrue ); + CleanupStack::PopAndDestroy( titleText ); + + + if ( ret == EAknSoftkeyOk || ret == EAknSoftkeyDone || ret == EAknSoftkeySelect ) + { + TPtrC selectedXspid = (*xspIds)[selectionIndex]; + AddContactL( R_IM_ADD_CONTACT_MANUAL_QUERY, selectedXspid ); + } + CleanupStack::PopAndDestroy(xspIds); + break; + } + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CopyToPhoneBookL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::CopyToPhoneBookL() + { + TInt index = CurrentItemIndex(); + + TPtrC name( KNullDesC ); + if( index <= 0 ) + { + // return if item not found + return; + } + + TPtrC seletctedItem = iCommandHandler.GetProcessInterface().GetItemUserId(index) ; + + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL(iServiceId) ; + if(storage) + { + MVIMPSTStorageContact* contact = storage->FindContactByUserId(seletctedItem); + if(contact) + { + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_SERVTAB_SAVING_CONTACT ,ETrue); + iCommandHandler.HandleCommandL(EAddToPbk, this, contact ); + CleanupStack::PopAndDestroy(note); + } + } + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::DeleteContactL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView:: DeleteContactL() + { + TInt index = CurrentItemIndex(); + HBufC* deletePrompt = NULL; + TPtrC name( KNullDesC ); + + if(iContainer) + { + iContainer->CheckAndSetLastItemFlag(); + } + if( index <= 0 ) + { + // return if item not found + return; + } + + TPtrC seletctedItem = iCommandHandler.GetProcessInterface().GetItemUserId(index) ; + name.Set( seletctedItem ); + + deletePrompt = StringLoader::LoadLC( R_QTN_SERVTAB_DELETE_CONTACT, name, CCoeEnv::Static() ); + TInt ret( VIMPSTUtilsDialog::DisplayQueryDialogL(R_GENERIC_YES_NO_CONFIRMATION_QUERY, *deletePrompt ) ); + CleanupStack::PopAndDestroy( deletePrompt ); + + MVPbkContactLink* contactLink = iCommandHandler.GetProcessInterface().ContactLink(index); + + if( ( ret == EAknSoftkeyOk ) || ( ret == EAknSoftkeyYes ) ) + { + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( R_QTN_CHAT_DELETING_CONTACT ,ETrue); + iCommandHandler.HandleCommandL(EDeleteContact, this, &contactLink ); + } + } + + + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ChangeStatusProcessL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ChangeStatusProcessL() + { + if( iEngine.ServiceState() ) + { + // Check variation + TInt showAppearOffline = 1; + TInt showAway = 1 ; + TInt showBusy = 1; + + TInt awayIndex( 0 ); + TInt busyIndex( 0 ); + TInt appOfflineIndex( 0 ); + + // first icon is online + // calculate indexes for other icons + if ( showAway) + { + awayIndex++; + busyIndex++; + appOfflineIndex++; + } + else + { + awayIndex = -1; + } + + if ( showBusy ) + { + busyIndex++; + appOfflineIndex++; + } + else + { + busyIndex = -1; + } + + if ( showAppearOffline ) + { + appOfflineIndex++; + } + else + { + appOfflineIndex = -1; + } + + TInt status( 0 ); + CAknListQueryDialog* dlg = new ( ELeave ) + CAknListQueryDialog( &status ); + dlg->PrepareLC( R_IM_STATUS_CHANGE_DLG ); + + // Format the texts + // Create a array for texts + CDesCArray* listItemsArray = + new ( ELeave ) CDesCArrayFlat( KAmountOfOwnStatusStates ); + CleanupStack::PushL( listItemsArray ); + + // Online + HBufC* onlineText = NULL; + onlineText = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_OWN_ONLINE ); + + HBufC* itemTxtOnline = + HBufC::NewLC( KTabFormatLenght + onlineText->Length() ); + TPtr itemTxtPtrOnline( itemTxtOnline->Des() ); + + itemTxtPtrOnline.Format( KTabFormat, KOnlineIconIndex ); + itemTxtPtrOnline.Append( *onlineText ); + listItemsArray->AppendL( itemTxtPtrOnline ); + CleanupStack::PopAndDestroy( itemTxtOnline ); + CleanupStack::PopAndDestroy( onlineText ); + + // Away + if ( showAway ) + { + HBufC* awayText = NULL; + awayText = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_OWN_AWAY ); + + HBufC* itemTxtAway = HBufC::NewLC( + KTabFormatLenght + awayText->Length() ); + TPtr itemTxtPtrAway( itemTxtAway->Des() ); + + itemTxtPtrAway.Format( KTabFormat, awayIndex ); + itemTxtPtrAway.Append( *awayText ); + listItemsArray->AppendL( itemTxtPtrAway ); + CleanupStack::PopAndDestroy( itemTxtAway ); + CleanupStack::PopAndDestroy( awayText ); + } + + // Busy + if ( showBusy ) + { + HBufC* busyText = NULL; + busyText = StringLoader::LoadLC( R_QTN_SERVTAB_CHANGE_OWN_DND ); + + HBufC* itemTextBusy = HBufC::NewLC( + KTabFormatLenght + busyText->Length() ); + TPtr itemTxtPtrBusy( itemTextBusy->Des() ); + + itemTxtPtrBusy.Format( KTabFormat, busyIndex ); + itemTxtPtrBusy.Append( *busyText ); + listItemsArray->AppendL( itemTxtPtrBusy ); + CleanupStack::PopAndDestroy( itemTextBusy ); + CleanupStack::PopAndDestroy( busyText ); + } + // Appear offline + if ( showAppearOffline ) + { + HBufC* offlineText = NULL; + offlineText = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_OWN_APPEAR_OFFLINE ); + + HBufC* itemTextOffline = HBufC::NewLC( + KTabFormatLenght + offlineText->Length() ); + TPtr itemTxtPtrOffline( itemTextOffline->Des() ); + + itemTxtPtrOffline.Format( KTabFormat, appOfflineIndex ); + itemTxtPtrOffline.Append( *offlineText ); + listItemsArray->AppendL( itemTxtPtrOffline ); + CleanupStack::PopAndDestroy( itemTextOffline ); + CleanupStack::PopAndDestroy( offlineText ); + } + + // Set the array + dlg->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( listItemsArray ); + dlg->SetItemTextArray( listItemsArray ); + + // Add icons + CArrayPtr< CGulIcon >* icons = LoadOwnStatusIconsL(); + + + dlg->SetIconArrayL( icons ); // transfers ownership + // TODO::get own status + + // get dialog's listbox + CEikListBox* listBox = dlg->ListBox(); + + //listBox->SetCurrentItemIndex( 0 ); + + TInt result = dlg->RunLD(); + + //structure to pack status and status text. + TStatusAndStatusText statusAndSatatustext; + + TInt error( KErrNone ); + if ( ( result == EAknSoftkeyOk ) || + ( result == EAknSoftkeySelect ) ) + { + if ( status == 0 ) + { + TInt autoStatusMsgEnabledForOnline = 1; /*IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_ONLINE_AUTO );*/ + if( autoStatusMsgEnabledForOnline ) + { + error = AskStatusMessageL( TVIMPSTEnums::EOnline, EFalse ); + } + if( error == KErrNone ) + { + statusAndSatatustext.iStatus = TVIMPSTEnums::EOnline; + statusAndSatatustext.iStatusText.Copy(iStatusMessage->Des()); + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_CHAT_CHANGE_STATUS_CHANGING ); + error = iCommandHandler.HandleCommandL(EChangeOwnStatus, this, &statusAndSatatustext); + CleanupStack::PopAndDestroy( note ); + } + } + else if ( status == awayIndex ) // Away + { + // can't get here unless Away is enabled + TInt autoStatusMsgEnabledForAway = 1; + //IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_AWAY_AUTO ); + if( autoStatusMsgEnabledForAway ) + { + error = AskStatusMessageL( TVIMPSTEnums::EAway, EFalse ); + } + if( error == KErrNone ) + { + statusAndSatatustext.iStatus = TVIMPSTEnums::EAway; + statusAndSatatustext.iStatusText.Copy(iStatusMessage->Des()); + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_CHAT_CHANGE_STATUS_CHANGING ); + error = iCommandHandler.HandleCommandL(EChangeOwnStatus, this, &statusAndSatatustext); + CleanupStack::PopAndDestroy( note ); + } + } + + else if ( status == busyIndex ) // Busy + { + // can't get here unless Busy is enabled + TInt autoStatusMsgEnabledForBusy = 1; + //IMUtils::IntResourceValueL( RSC_CHAT_VARIATION_BUSY_AUTO ); + if( autoStatusMsgEnabledForBusy ) + { + error = AskStatusMessageL( TVIMPSTEnums::EBusy, EFalse ); + } + if( error == KErrNone ) + { + statusAndSatatustext.iStatus = TVIMPSTEnums::EBusy; + statusAndSatatustext.iStatusText.Copy(iStatusMessage->Des()); + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_CHAT_CHANGE_STATUS_CHANGING ); + error = iCommandHandler.HandleCommandL(EChangeOwnStatus, this, &statusAndSatatustext); + CleanupStack::PopAndDestroy( note ); + + } + } + else if ( status == appOfflineIndex ) //appearOffline + { + + statusAndSatatustext.iStatus = TVIMPSTEnums::EInvisible; + statusAndSatatustext.iStatusText.Copy(iStatusMessage->Des()); + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_CHAT_CHANGE_STATUS_CHANGING ); + error = iCommandHandler.HandleCommandL(EChangeOwnStatus, this, &statusAndSatatustext); + CleanupStack::PopAndDestroy( note ); + } + else + { + HBufC* text = NULL; + text = StringLoader::LoadLC( R_QTN_IM_CHANGE_STATUS_NOT_CHANGED ); + VIMPSTUtilsDialog::DisplayNoteDialogL( *text ); + CleanupStack::PopAndDestroy( text ); + } + //iUISessionManager->SetStatusPaneIconsL(); + } + } + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::LoadOwnStatusIconsL +// --------------------------------------------------------- +// +CAknIconArray* CVIMPSTUiTabbedView::LoadOwnStatusIconsL() + { + + CAknIconArray* icons = iBrandHandler->LoadOwnStatusIconsLC(); + CleanupStack::Pop( icons ); + return icons; + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::AskStatusMessageL() +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CVIMPSTUiTabbedView::AskStatusMessageL( TVIMPSTEnums::TOnlineStatus aStatus, + TBool aUpdateToNetwork ) + { + CDesCArray* statusMessages = new( ELeave )CDesCArrayFlat(4); + CleanupStack::PushL( statusMessages ); + + HBufC* firstLine = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_NEW_MESSAGE ); + statusMessages->AppendL( *firstLine ); + CleanupStack::PopAndDestroy( firstLine ); + + // Read status messages + ReadStatusMessagesL( *statusMessages, aStatus ); + + // show the query + TInt selectionIndex( statusMessages->Count() > 1 ? 1 : 0 ); + + // Force to continue if selection query is not shown + TInt ret = EAknSoftkeyOk; + + if( selectionIndex == 1 ) + { + // There were previous status messages, show selection query + HBufC* titleText = StringLoader::LoadLC( R_QTN_CHAT_CHANGE_SELECT_MESSAGE ); + ret = VIMPSTUtilsDialog::DisplayListQueryDialogL( &selectionIndex, statusMessages, + R_IM_LIST_SELECT_STATUS_MESSAGE_DLG, + *titleText, KNullDesC, ETrue ); + CleanupStack::PopAndDestroy( titleText ); + } + + if ( !( ret == EAknSoftkeyOk || ret == EAknSoftkeyDone || ret == EAknSoftkeySelect ) ) + { + CleanupStack::PopAndDestroy( statusMessages ); + return KErrCancel; + } + + TPtr statusTxt( iStatusMessage->Des() ); + statusTxt.Zero(); + + if( selectionIndex != 0 ) + { + statusTxt.Copy( ( *statusMessages) [ selectionIndex ] ); + } + + TInt result = VIMPSTUtilsDialog::DisplayTextQueryDialogL( + statusTxt , + R_QTN_CHAT_CHANGE_STATUS_MESSAGE, + R_IM_ENTER_STATUS_MESSAGE_QUERY, + ETrue, // T9 + ETrue // LSK always visible + ); + + if ( (result == EAknSoftkeyOk || result == EAknSoftkeyDone )&&(iEngine.ServiceState())) + { + + // Delete first line. + statusMessages->Delete( 0 ); + statusMessages->InsertL( 0, statusTxt ); + WriteStatusMessagesL( *statusMessages, aStatus ); + if( aUpdateToNetwork ) + { + CVIMPSTUtilsWaitNote* note = CVIMPSTUtilsWaitNote::ShowWaitNoteLC( R_QTN_CHAT_CHANGE_MESSAGE_CHANGING ); + //structure to pack status and status text. + TStatusAndStatusText statusAndSatatustext; + statusAndSatatustext.iStatus = aStatus; + statusAndSatatustext.iStatusText.Copy( statusTxt ); + iCommandHandler.HandleCommandL(EChangeOwnMessage, this, &statusAndSatatustext); + CleanupStack::PopAndDestroy( note ); + } + } + else + { + CleanupStack::PopAndDestroy();//statusMessages + return KErrCancel; + } + CleanupStack::PopAndDestroy(); //statusMessages + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ReadStatusMessagesL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ReadStatusMessagesL( CDesCArray& aArray, TVIMPSTEnums::TOnlineStatus aStatus) + { + RBuf buffer; + buffer.CreateL( RProperty::KMaxPropertySize ); + CleanupClosePushL( buffer ); + TInt err(KErrNone); + switch ( aStatus ) + { + case TVIMPSTEnums::EOnline: + { + err = iSettingsStore->GetL( iServiceId, EServiceOwnStatusMessagesOnline, buffer ); + break; + } + case TVIMPSTEnums::EBusy: + { + err = iSettingsStore->GetL( iServiceId, EServiceOwnStatusMessagesBusy, buffer ); + break; + } + case TVIMPSTEnums::EAway: + { + err = iSettingsStore->GetL( iServiceId, EServiceOwnStatusMessagesAway, buffer ); + break; + } + } + TBuf< KStatusMessageHeaderLength > header; + + TInt countOfMessages( 0 ); + TInt offset( 1 ); // First character is for header length + TInt headerLength( 0 ); + if( err == KErrNone && buffer.Length() ) + { + TLex lexer( buffer.Left( 1 ) ); + err = lexer.Val( headerLength ); + } + else + { + err = KErrEof; + } + while( err == KErrNone && countOfMessages < KMaxStatusMessageCount ) + { + TPtrC ptr( buffer.Mid( offset ) ); + if( ptr.Length() > headerLength ) + { + header.Copy( ptr.Left( headerLength ) ); + header.Trim(); + TLex lexer( header ); + offset += headerLength; + TInt messageLength( 0 ); + err = lexer.Val( messageLength ); + if( err == KErrNone ) + { + ptr.Set( buffer.Mid( offset ) ); + if( ptr.Length() >= messageLength ) + { + if (messageLength) + { + aArray.AppendL( ptr.Left( messageLength ) ); + ++countOfMessages; // this should be increased only for not null messages. + } + offset += messageLength; + } + else + { + err = KErrEof; + } + } + } + else + { + err = KErrEof; + } + } + CleanupStack::PopAndDestroy(); //buffer + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::WriteStatusMessagesL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + +void CVIMPSTUiTabbedView::WriteStatusMessagesL( MDesCArray& aArray, TVIMPSTEnums::TOnlineStatus aStatus ) + { + + TPtrC firstLine = aArray.MdcaPoint( 0 ); + TInt countOfMessages( 0 ); + TInt arrayCount( aArray.MdcaCount() ); + TInt index( 0 ); + + RBuf buffer; + buffer.CreateL( RProperty::KMaxPropertySize ); + CleanupClosePushL( buffer ); + + TBuf< KStatusMessageHeaderLength > header; + // Read the array and append the buffer + while( index < arrayCount && countOfMessages < KMaxStatusMessageCount ) + { + if( index == 0 ) + { + header.Format( KStatusMessageHeaderLengthFormat, + KStatusMessageHeaderLength ); + buffer.Append( header ); + } + TPtrC message = aArray.MdcaPoint( index ); + if( index == 0 || message.CompareF( firstLine ) != 0 ) + { + header.Format( KStatusMessageHeaderFormat, message.Length() ); + buffer.Append( header ); + buffer.Append( message ); + //skipping increase of countOfMessages is to get one more status message if it is null. + if( message.Length() ) // null status message + { + ++countOfMessages; + } + } + ++index; + } + switch ( aStatus ) + { + case TVIMPSTEnums::EOnline: + { + iSettingsStore->SetL( iServiceId, EServiceOwnStatusMessagesOnline, buffer ); + break; + } + case TVIMPSTEnums::EBusy: + { + iSettingsStore->SetL( iServiceId, EServiceOwnStatusMessagesBusy, buffer ); + break; + } + case TVIMPSTEnums::EAway: + { + iSettingsStore->SetL( iServiceId, EServiceOwnStatusMessagesAway, buffer ); + break; + } + } + CleanupStack::PopAndDestroy(); // buffer + } + + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ChangeOwnStatusMessageL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ChangeOwnStatusMessageL() + { + TVIMPSTEnums::TOnlineStatus status = iCommandHandler.GetProcessInterface().GetOnlineStatusL( 0 ); //0 for own status item + // ETrue meaning network change required + AskStatusMessageL(status, ETrue); + } +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ChangeOwnAvatarL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ChangeOwnAvatarL(const TDesC& aFileName, const TDesC8& aMimeType ) + { + MVIMPSTProcessArray& arrayprocess = iCommandHandler.GetProcessInterface(); + TAvatarData avatarData; + avatarData.iStatus = arrayprocess.GetOnlineStatusL(0); + avatarData.iStatusText.Copy( arrayprocess.StatusTextL(0) ); + avatarData.iFileName.Set(aFileName); + avatarData.iMimeType.Set(aMimeType); + iCommandHandler.HandleCommandL(EChangeOwnAvtar, this, &avatarData); + } +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::GetServiceState +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TVIMPSTEnums::TVIMPSTRegistrationState CVIMPSTUiTabbedView::GetServiceState() + { + return iEngine.ServiceState(); + } + + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::SearchContactsL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView:: SearchContactsL() + { + CVIMPSTUiSearchFieldArray& fieldArray = iExtensionService.GetSearchFieldArray(); + + if( !fieldArray.Count() ) + { + return; + } + + if(!iIsToolBarHidden) + { + ShowHideFixedToolbarL(EFalse); + } + + if (iContainer) + { + iContainer->DeactivateFindPaneL(); + } + + fieldArray.ResetFieldData(); + fieldArray.SetSearchType( EIMBasicSearch ); + //Launch the search view with search dialog + LaunchViewL( iExtensionService.SearchViewId() ); + + } + +// --------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::LaunchViewL() +// --------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::LaunchViewL( TInt aViewId ) + { + + CPbk2ViewState* state = CPbk2ViewState::NewLC( ); + + TInt searchViewId; + TInt err = iMapper.GetNewView( + KIMCONTACTSEXTNIMPLEMENTATIONUID, + aViewId, + searchViewId ); + User::LeaveIfError( err ); + Phonebook2::Pbk2AppUi()->Pbk2ViewExplorer()->ActivatePhonebook2ViewL + (TUid::Uid(searchViewId), state); + + CleanupStack::PopAndDestroy( state ); + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::CreateToolBarL +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::CreateToolBarL() + { + if ( AknLayoutUtils::PenEnabled() ) + { + TInt resourceId = 0; + if(iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EIM) && + !iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EVoip)) + { + resourceId = R_IM_APP_TOOLBAR; + } + else if(iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EVoip) && + !iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EIM)) + { + resourceId = R_VOIP_APP_TOOLBAR; + } + else + { + resourceId = R_IM_VOIP_APP_TOOLBAR; + } + if ( resourceId != 0 && !iFixedToolbar ) + { + CAknToolbar* temp = iFixedToolbar; + + iFixedToolbar = CAknToolbar::NewL( resourceId ); + iFixedToolbar->SetToolbarObserver( this ); + iFixedToolbar->SetCloseOnAllCommands( EFalse ); + CEikAppUiFactory* appUiFactory = + static_cast(CEikonEnv::Static()->AppUiFactory() ); + appUiFactory->SetViewFixedToolbar( iFixedToolbar ); + + iFixedToolbar->SetToolbarVisibility( EFalse, EFalse ); + delete temp; + temp = NULL; + } + } + else + { + delete iFixedToolbar; + iFixedToolbar = NULL; + } + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::UpdateToolbarL +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::UpdateToolbarL() + { + if ( AknLayoutUtils::PenEnabled() && iFixedToolbar && iContainer ) + { + TInt currentItemIndex = iContainer->CurrentItemIndex(); + TVIMPSTEnums::TItem itemType = iCommandHandler.GetProcessInterface().GetType(currentItemIndex); + TVIMPSTEnums::TOnlineStatus onlinestatus = iCommandHandler.GetProcessInterface().GetOnlineStatusL(currentItemIndex); + TBool imEnabled = iEngine.IsSubServiceEnabled(TVIMPSTEnums::EIM); + TBool voipEnabled = iEngine.IsSubServiceEnabled(TVIMPSTEnums::EVoip); + TPtrC selectedItem = iCommandHandler.GetProcessInterface().GetItemUserId(currentItemIndex); + + if(voipEnabled && imEnabled) + { + if( TVIMPSTEnums::EOwnStatusItem == itemType || + TVIMPSTEnums::EFriendRequestItem == itemType || + KErrNotFound == currentItemIndex ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarVoipCall, ETrue, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarChat, ETrue, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarDetails, ETrue, EFalse ); + } + else if( TVIMPSTEnums::EUnknonContactItem == itemType ) + { + iFixedToolbar->SetItemDimmed(ECmdToolbarVoipCall, EFalse, EFalse); + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, EFalse, EFalse); + iFixedToolbar->SetItemDimmed(ECmdToolbarDetails, ETrue, EFalse); + } + else if( TVIMPSTEnums::EContactItem == itemType ) + { + if( selectedItem != KNullDesC && TVIMPSTEnums::EServiceOut != onlinestatus ) + { + + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, EFalse, EFalse); + } + else + { + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, ETrue, EFalse); + } + iFixedToolbar->SetItemDimmed(ECmdToolbarDetails, EFalse, EFalse); + iFixedToolbar->SetItemDimmed(ECmdToolbarVoipCall, EFalse, EFalse); + } + else + { + iFixedToolbar->SetItemDimmed(ECmdToolbarVoipCall, ETrue, EFalse); + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, ETrue, EFalse); + iFixedToolbar->SetItemDimmed(ECmdToolbarDetails, EFalse, EFalse); + } + } + else if(imEnabled && !voipEnabled) + { + if( TVIMPSTEnums::EOwnStatusItem == itemType || + TVIMPSTEnums::EFriendRequestItem == itemType || + KErrNotFound == currentItemIndex) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarChat, ETrue, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarDetails, ETrue, EFalse ); + } + else if( TVIMPSTEnums::EUnknonContactItem == itemType ) + { + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, EFalse, EFalse); + iFixedToolbar->SetItemDimmed(ECmdToolbarDetails, ETrue, EFalse); + } + else if( TVIMPSTEnums::EContactItem == itemType ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarDetails, EFalse, EFalse ); + if( selectedItem != KNullDesC && TVIMPSTEnums::EServiceOut != onlinestatus ) + { + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, EFalse, EFalse); + } + else + { + iFixedToolbar->SetItemDimmed(ECmdToolbarChat, ETrue, EFalse); + } + } + } + else if( voipEnabled && !imEnabled ) + { + if( (TVIMPSTEnums::EOwnStatusItem == itemType || + TVIMPSTEnums::EFriendRequestItem == itemType || + KErrNotFound == currentItemIndex) && !iAddContact ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarNewContact, EFalse, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarVoipCall, ETrue, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarDetails, ETrue, EFalse ); + } + else if( TVIMPSTEnums::EUnknonContactItem == itemType ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarNewContact, EFalse, EFalse ); + iFixedToolbar->SetItemDimmed(ECmdToolbarVoipCall, EFalse, EFalse ); + iFixedToolbar->SetItemDimmed(ECmdToolbarDetails, ETrue, EFalse); + } + else if( TVIMPSTEnums::EContactItem == itemType ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarNewContact, EFalse, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarDetails, EFalse, EFalse ); + iFixedToolbar->SetItemDimmed(ECmdToolbarVoipCall, EFalse, EFalse); + } + } + else + { + if( (TVIMPSTEnums::EOwnStatusItem == itemType || + TVIMPSTEnums::EFriendRequestItem == itemType || + KErrNotFound == currentItemIndex) && !iAddContact ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarNewContact, EFalse, EFalse ); + } + else if( TVIMPSTEnums::EUnknonContactItem == itemType ) + { + iFixedToolbar->SetItemDimmed( ECmdToolbarNewContact, EFalse, EFalse); + } + else + { + iFixedToolbar->SetItemDimmed( ECmdToolbarNewContact, EFalse, EFalse ); + iFixedToolbar->SetItemDimmed( ECmdToolbarDetails, EFalse, EFalse ); + } + } + iFixedToolbar->DrawNow(); + } + } +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::DynInitToolbarL +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::DynInitToolbarL( TInt /*aResourceId*/, CAknToolbar* /*aToolbar*/ ) + { + if ( AknLayoutUtils::PenEnabled() ) + { + UpdateToolbarL(); + } + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::OfferToolbarEventL +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::OfferToolbarEventL( TInt aCommand ) + { + if ( AknLayoutUtils::PenEnabled() ) + { + switch( aCommand ) + { + case ECmdToolbarVoipCall: + { + MakeVoipCallL(); + break; + } + case ECmdToolbarChat: + { + HandleCommandL( ECmdOpenConversation ); + break; + } + case ECmdToolbarDetails: + { + HandleCommandL( ECmdContactDetails );//EChatLaunchCCA + + break; + } + case ECmdToolbarNewContact: + { + HandleCommandL ( ECmdAddContact ); + break; + } + } + } + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::ShowHideFixedToolbarL +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ShowHideFixedToolbarL(TBool aShow) + { + if ( iFixedToolbar && iContainer ) + { + iFixedToolbar->HideItemsAndDrawOnlyBackground( !aShow ); + if(aShow) + { + iFixedToolbar->SetToolbarVisibility( aShow, !aShow); + } + iContainer->CoeControl()->SetRect( iView.ClientRect() ); + iContainer->CoeControl()->DrawDeferred(); + iIsToolBarHidden = !aShow; + } + + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::ProcessFriendRequestL +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ProcessFriendRequestL() + { + TInt index = CurrentItemIndex(); + if( index <= 0 ) + { + // return if item not found + return; + } + MVIMPSTProcessArray& arrayprocess = iCommandHandler.GetProcessInterface(); + if( iFriendRequestId ) + { + delete iFriendRequestId; + iFriendRequestId = NULL; + } + iFriendRequestId = arrayprocess.GetItemUserId(index).AllocL() ; + + if( !iFriendRequestId ) + { + return; + } + + HBufC* queryTxt = StringLoader::LoadLC( R_SERVTAB_FRIEND_REQUEST_CONF, *iFriendRequestId ); + + //ask the query and send the response back to the server. + TInt response = VIMPSTUtilsDialog::DisplayQueryDialogL(R_SERVTAB_GENERIC_ACCEPT_DECLINE_CONFIRMATION_QUERY,*queryTxt); + CleanupStack::PopAndDestroy(queryTxt); + + if((EAknSoftkeyYes == response)||(EAknSoftkeyOk == response ) ) + { + + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL( iEngine.ServiceId() ) ; + if( storage && storage->IsLocalStore() )//if local store popup create new/update existing dialog + { + iSelectedAction = ShowNewUpdateQueryL(); + TUint assignFlags = 0; + if(CVIMPSTUiTabbedView::EInvitAcceptCreateNew == iSelectedAction )//create new option + { + assignFlags |= ECreateNewContact; + } + else if(CVIMPSTUiTabbedView::EInvitAcceptUpdateExisting == iSelectedAction ) //if update existing is selected + { + assignFlags = 0; + } + else //if the selection dialog is cancelled then just do nothing + { + return; + } + //show the phonebook dialog for create new/update existing option + if(iAiwParamList) + { + delete iAiwParamList; + iAiwParamList = NULL; + } + iAiwParamList = CAiwGenericParamList::NewL(); + + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactAssignData, + TAiwVariant(TAiwSingleContactAssignDataV1Pckg( + TAiwSingleContactAssignDataV1().SetFlags( assignFlags ))))); + + TBuf xspId; //xsp max length + xspId.Append(iEngine.ServiceName()); + xspId.Append(KColon); + xspId.Append(*iFriendRequestId); + + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamXSpId, + TAiwVariant(xspId)) + ); + ReInitializeServiceHandlerL(); + iServiceHandler->ExecuteServiceCmdL( + KAiwCmdAssign, + *iAiwParamList, + iServiceHandler->OutParamListL(), + 0, + this); + // remove of friend request is done in HnadleNotify aiw call back + // to handle the cancel of selection dialog + } + else // in case of server store + { + if( iWaitNote ) + { + delete iWaitNote; + iWaitNote = NULL; + } + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( R_QTN_SERVTAB_SAVING_CONTACT, ETrue, EFalse ); + iCommandHandler.HandleCommandL(EFriendAccpeted, this, iFriendRequestId); + } + + } + //response value comes as zero if user rejects the request + else if( EAknSoftkeyCancel == response || 0 == response) // rejected the request + { + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( R_QTN_SERVTAB_DECLINING_INVITE, ETrue , EFalse );; + iCommandHandler.HandleCommandL(EFriendRejected, this, iFriendRequestId ); + } + + + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleSearchResultL() +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleSearchResultL(RArray /*aSearchData*/ ) + { + // no implemetation + } + + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleSearchFinishedL() +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleSearchFinishedL(TInt /*aError*/) + { + // no implemetation + } + +// --------------------------------------------------------- +// CVIMPSTUiSearchView::HandleSearchKeysEventL() +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleSearchKeysEventL( RArray& aEnumKeysArray, RPointerArray& aLebelKeysArray ) + { + iExtensionService.SetSearchFieldsDataL(aEnumKeysArray, aLebelKeysArray ); + } + +// --------------------------------------------------------- +// CVIMPSTUiSearchView::ShowURLQueryL() +// --------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ShowURLQueryL( ) + { + // Open browser with the specified URL + RBuf buffer; + buffer.CreateL( RProperty::KMaxPropertySize ); + CleanupClosePushL( buffer ); + iSettingsStore->GetL(iServiceId, EServiceURLLink, buffer); + HBufC16* url = HBufC::NewL(buffer.Length()); + url = buffer.Alloc(); + OpenWebBrowserL( *url ); + CleanupStack::PopAndDestroy( ); //buffer + } + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::OpenWebBrowserL +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::OpenWebBrowserL( const TDesC& aUrl ) + { + if( !iBrLauncher ) + { + iBrLauncher = CBrowserLauncher::NewL(); + } + //Asynchronous operation to launch the browser with aUrl + iBrLauncher->LaunchBrowserEmbeddedL( aUrl,this,this ); + } + + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::LoginL +// ----------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::LoginL() + { + TBool IsPasswordSet = iEngine.IsPasswordAvailableL(); + + if(iUserId) + { + delete iUserId; + iUserId = NULL; + } + + iUserId = iEngine.GetOwnUserIdFromCChOrStorageL(); + + + TBool urlNeedtoShow = IsURLQueryToBeShownL(); + //first login : userid is not initialized and password is not set. + TBool doLogin = ETrue; + if( urlNeedtoShow && (!IsPasswordSet) && (iUserId->Length() == 0)) + { + TInt menuChoise( KErrCancel ); + ShowUseExistingOrCreateNewMenuL( menuChoise ); + switch(menuChoise ) + { + case CVIMPSTUiTabbedView::EXmppMenuValuesCreateNew: + { + doLogin = EFalse; + ShowURLQueryL(); + break; + } + case CVIMPSTUiTabbedView::EXmppMenuValuesUseExisting: + { + // login must be called + doLogin = ETrue; + break; + } + default: // user has cancelled the createnew and i have acccount query + doLogin = EFalse; + break; + } + } + if( doLogin ) + { + TInt error = ShowTermsofuseL(); + if(KErrNone == error) + { + if( urlNeedtoShow ) + { + // Url query has been shown and accep by user + iSettingsStore->SetL(iServiceId, EURLRegistrationOff, ETrue); + } + iCommandHandler.HandleCommandL(ELoginService, this, &iServiceId); + } + } + } + + +// ----------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::IsURLQueryToBeShownL +// ----------------------------------------------------------------------------- +// +TBool CVIMPSTUiTabbedView::IsURLQueryToBeShownL() + { + TBool urlQueryShown = EFalse; + + RBuf buffer; + buffer.CreateL( RProperty::KMaxPropertySize ); + CleanupClosePushL( buffer ); + iSettingsStore->GetL(iServiceId, EServiceURLLink, buffer); + + //get the url from the cenrep. + TInt isURLQueryDisabled = EFalse; + iSettingsStore->GetL(iServiceId, EURLRegistrationOff, isURLQueryDisabled); + + if(buffer.Length() && !isURLQueryDisabled) + { + urlQueryShown = ETrue; + } + CleanupStack::PopAndDestroy(); //buffer + return urlQueryShown; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ShowUseExistingOrCreateNewMenuL +// return values <0 -> error +// 0 -> use existing +// 1 -> create new +// --------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ShowUseExistingOrCreateNewMenuL( TInt& aMenuChoise ) + { + TInt rvalue( KErrGeneral ); + + CAknSinglePopupMenuStyleListBox* accountList = + new ( ELeave ) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( accountList ); + + CAknPopupList* popupList = + CAknPopupList::NewL( accountList, R_AVKON_SOFTKEYS_OK_BACK ); + CleanupStack::PushL( popupList ); + + accountList->ConstructL( popupList, EAknListBoxMenuList); + + // construct listbox item array + CDesCArray *itemList = new (ELeave) CDesCArrayFlat( 2 ); + CleanupStack::PushL( itemList ); + TBuf item; + + // First listbox item + HBufC* text1 = StringLoader::LoadLC( R_QTN_USE_EXISTING ); + itemList->AppendL( *text1 ); + CleanupStack::PopAndDestroy( text1 ); + + // Second listbox item + HBufC* text2 = StringLoader::LoadLC( R_QTN_CREATE_NEW ); + itemList->AppendL( *text2 ); + CleanupStack::PopAndDestroy( text2 ); + + // Set items and ownership + accountList->Model()->SetItemTextArray( itemList ); + accountList->Model()->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( itemList ); + + HBufC* title = StringLoader::LoadLC( R_QTN_SELECT_ACTION ); + popupList->SetTitleL( *title ); + CleanupStack::PopAndDestroy( title ); + + TInt popupOk = popupList->ExecuteLD(); + + if ( popupOk ) + { + rvalue = accountList->CurrentItemIndex(); + } + else + { + rvalue = KErrCancel; + } + + CleanupStack::Pop( popupList ); + CleanupStack::PopAndDestroy( accountList ); + + aMenuChoise = rvalue; + } +// --------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ShowNewUpdateQueryL +// return values <0 -> error +// 0 ->create new +// 1 -> update existing +// --------------------------------------------------------------------------- +// +TInt CVIMPSTUiTabbedView::ShowNewUpdateQueryL() + { + TInt retValue( KErrCancel ); + + CAknSinglePopupMenuStyleListBox* selectionList = + new ( ELeave ) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( selectionList ); + + CAknPopupList* popupList = CAknPopupList::NewL( + selectionList, + R_AVKON_SOFTKEYS_SELECT_CANCEL ); + CleanupStack::PushL( popupList ); + + selectionList->ConstructL( popupList, EAknListBoxMenuList ); + + // construct listbox item array + CDesCArray *itemList = new (ELeave) CDesCArrayFlat( 2 ); + CleanupStack::PushL( itemList ); + + // First listbox item + HBufC* newItem = StringLoader::LoadLC( R_QTN_CREATE_NEW_CONTACT ); + itemList->AppendL( *newItem ); + CleanupStack::PopAndDestroy( newItem ); + + // Second listbox item + HBufC* updateItem = StringLoader::LoadLC( R_QTN_UPDATE_EXISTING ); + itemList->AppendL( *updateItem ); + CleanupStack::PopAndDestroy( updateItem ); + + // Set items and ownership + selectionList->Model()->SetItemTextArray( itemList ); + selectionList->Model()->SetOwnershipType( ELbmOwnsItemArray ); + CleanupStack::Pop( itemList ); // ownership is transfered to selectionList + + HBufC* title = StringLoader::LoadLC( R_QTN_SELECT_ACTION ); + popupList->SetTitleL( *title ); + CleanupStack::PopAndDestroy( title ); + + TInt response = popupList->ExecuteLD(); + + if ( response ) + { + retValue = selectionList->CurrentItemIndex(); + } + CleanupStack::Pop( popupList ); // onership given to selectionList + CleanupStack::PopAndDestroy( selectionList ); // selectionList + + return retValue; + } +// CVIMPSTUiTabbedView::ShowLoginDialogL +// --------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::ShowLoginDialogL( TDes& aUserName, TDes& aPassword ) + { + HBufC* userName = HBufC::NewLC( KUsernameMaxLength ); + HBufC* passWord = HBufC::NewLC( KPasswordMaxLength ); + + TPtr ptrUserName = userName->Des(); + TPtr ptrPassWord = passWord->Des(); + + if( aUserName.Length()== 0 ) + { + CAknMultiLineDataQueryDialog* dlg = CAknMultiLineDataQueryDialog::NewL( ptrUserName, + ptrPassWord ); + if ( dlg->ExecuteLD( R_LOGIN_DIALOG ) ) + { + aUserName.Copy( ptrUserName.LeftTPtr( aUserName.MaxLength() ) ); + aPassword.Copy( ptrPassWord.LeftTPtr( aPassword.MaxLength() ) ); + } + else + { + User::Leave( KErrCancel ); + } + } + else + { + CAknMultiLineDataQueryDialog* dlg = CAknMultiLineDataQueryDialog::NewL( aUserName, + aPassword ); + if ( dlg->ExecuteLD( R_LOGIN_DIALOG ) ) + { + aUserName.Copy( aUserName.LeftTPtr( aUserName.MaxLength() ) ); + aPassword.Copy( aPassword.LeftTPtr( aPassword.MaxLength() ) ); + } + else + { + User::Leave( KErrCancel ); + } + } + CleanupStack::PopAndDestroy( passWord ); + CleanupStack::PopAndDestroy( userName ); + } +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::HandleContentL +// Handles the content coming from the embedded browser. +// Returns EFalse: content will be passed on to framework +// ---------------------------------------------------- +// +TBool CVIMPSTUiTabbedView::HandleContentL( + const TDesC& /*aFileName*/, + const CAiwGenericParamList& /*aParamList*/, + TBool& aContinue ) + { + // Close browser after downloading content + aContinue = EFalse; + return EFalse; + } + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::DownloadedContentHandlerReserved1 +// ( Reserved for future use ) +// ---------------------------------------------------- +// +TAny* CVIMPSTUiTabbedView::DownloadedContentHandlerReserved1( TAny* /*aAnyParam*/ ) + { + // Empty implementation. + return NULL; + } + +// --------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::CloseConversation +// --------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::CloseConversationL() + { + TInt index = CurrentItemIndex(); + if( index <= 0 ) + { + // return if item not found + return; + } + MVIMPSTProcessArray& arrayprocess = iCommandHandler.GetProcessInterface(); + TPtrC itemId = arrayprocess.GetItemUserId(index); + + if(itemId.Length() == 0) + { + return; + } + + HBufC* queryTxt = StringLoader::LoadLC( R_QTN_SERVTAB_CLOSE_CONV, itemId ); + + //ask the query and send the response back to the server. + TInt response = VIMPSTUtilsDialog::DisplayQueryDialogL(R_GENERIC_YES_NO_CONFIRMATION_QUERY,*queryTxt); + CleanupStack::PopAndDestroy(queryTxt); + + if( (EAknSoftkeyYes == response)||(EAknSoftkeyOk == response ) ) + { + iCommandHandler.HandleCommandL(ECloseConversation, this, &itemId ); + } + + } + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::HandleServerAppExit +// ( Reserved for future use ) +// ---------------------------------------------------- +// +void CVIMPSTUiTabbedView::HandleServerAppExit( TInt /*aReason*/ ) + { + TInt error = KErrNone; + TRAPD(leaveErr,error = ShowTermsofuseL()); + if(KErrNone == error && KErrNone == leaveErr) + { + TRAP_IGNORE(iCommandHandler.HandleCommandL(ELoginService, this, &iServiceId)); + } + } + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::ShowTermsofuseL +// ( Reserved for future use ) +// ---------------------------------------------------- +// +TInt CVIMPSTUiTabbedView::ShowTermsofuseL() + { + TInt retVal = KErrNone; + // get the ETOUDlgOff if its set don't show TOU dialog else show TOU + TInt termsOfUseDisabled = KErrNone; + iSettingsStore->GetL(iServiceId, ETOUDlgOff, termsOfUseDisabled); + if( !termsOfUseDisabled) + { + HBufC* termsOfUsetext = iBrandHandler->GetToUStringL(); + if( termsOfUsetext ) + { + CleanupStack::PushL(termsOfUsetext); + retVal = CVIMPSTUiTermsOfUseDialogHandler::HandleTermsOfUseDialogLD( + *iSettingsStore, + *iUserId, + iServiceId, + termsOfUsetext ); // termsOfUsetext ownership is transfered + CleanupStack::Pop(); // termsOfUsetext ownership is transfered + } + } + return retVal; + } +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::MakeVoipCallL +// ( Reserved for future use ) +// ---------------------------------------------------- +// +void CVIMPSTUiTabbedView::MakeVoipCallL() + { + // making voip call will take in three steps + // pop up the selection dialog + // select adress + // create a call + TInt index = CurrentItemIndex(); + //Index should always be greater than zero + //Negative index means item not found. + if(index <= 0 ) + { + return; + } + MVIMPSTProcessArray& processArray = iCommandHandler.GetProcessInterface(); + TVIMPSTEnums::TItem itemType = processArray.GetType( index ) ; + + if( itemType == TVIMPSTEnums::EContactItem ) + { + iSelectedAction = CVIMPSTUiTabbedView::ECreateXSPCall; + TUint fetchFlags = 0; + TAiwSingleItemSelectionDataV3 data; + data.SetFlags(fetchFlags); + data.SetCommAddressSelectType(EAiwCommVOIPCall); + ReInitializeServiceHandlerL(); + CAiwGenericParamList& inParamList = iServiceHandler->InParamListL(); + // Set service data + inParamList.AppendL(TAiwGenericParam(EGenericParamContactSelectionData, + TAiwVariant(TAiwSingleItemSelectionDataV3Pckg(data)))); + + HBufC8* pack = processArray.ContactLink(index )->PackLC(); + // Set contactlink + inParamList.AppendL(TAiwGenericParam(EGenericParamContactLinkArray, + TAiwVariant(*pack))); + + iServiceHandler->ExecuteServiceCmdL(KAiwCmdSelect, inParamList, + iServiceHandler->OutParamListL(), 0, this); + CleanupStack::PopAndDestroy( pack ); + } + else if( itemType == TVIMPSTEnums::EUnknonContactItem ) + { + TPtrC unknownId = processArray.GetItemUserId( index ); + ExecuteAiwCallL( unknownId ); + } + } +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::ExecuteAiwCallL +// --------------------------------------------------------- +void CVIMPSTUiTabbedView::ExecuteAiwCallL( const TDesC& aSelectedAddress ) + { + //aSelectedAdress will be an xsp id of format "ServiceName:UserId" + //here we need to truncate the servicename and pass only the UserId + //Find if aSelectedAdress of type "ServiceName:UserId" + //if true, then remove the service part + TInt phoneNumberStart = aSelectedAddress.Locate(':'); + HBufC* numBuf = NULL; + + if ( KErrNotFound != phoneNumberStart ) + { + phoneNumberStart++; //To get rid of ':' + numBuf = aSelectedAddress.Right( + aSelectedAddress.Length() - phoneNumberStart + ).AllocLC(); + } + else + { + numBuf = aSelectedAddress.AllocLC(); + } + + TPtr numDesc( numBuf->Des ()); + CommonPhoneParser::ParsePhoneNumber ( numDesc, + CommonPhoneParser::EPhoneClientNumber); + + CAiwDialDataExt* dialDataExt = CAiwDialDataExt::NewLC(); + dialDataExt->SetPhoneNumberL ( numBuf->Des ()); + dialDataExt->SetServiceId(iServiceId); + dialDataExt->SetCallType( CAiwDialData::EAIWVoiP); + + dialDataExt->SetWindowGroup ( CCoeEnv::Static()->RootWin().Identifier() ); + ReInitializeServiceHandlerL(); + CAiwGenericParamList& paramList = iServiceHandler->InParamListL(); + dialDataExt->FillInParamListL ( paramList); + iServiceHandler->ExecuteServiceCmdL ( KAiwCmdCall, + paramList, + iServiceHandler->OutParamListL(), + 0, + NULL); + CleanupStack::PopAndDestroy(dialDataExt); + CleanupStack::PopAndDestroy(numBuf); + } + +// --------------------------------------------------------- +// CVIMPSTUiTabbedView::LaunchHelpL() +// Function launches help application using the HlpLauncher. +// @params: Reference to a descriptor, serves as context. +// --------------------------------------------------------- +// + +void CVIMPSTUiTabbedView::LaunchHelpL( const TDesC& aContext ) + { + CArrayFix< TCoeHelpContext >* cntx = new( ELeave ) CArrayFixFlat< TCoeHelpContext >( KHelpContextSize ); + CleanupStack::PushL( cntx ); + + TUid KHelpUid = { KHELPUID }; + cntx->AppendL( TCoeHelpContext( KHelpUid, aContext ) ); + CleanupStack::Pop( cntx ); + + //and launch help - takes ownership of context array + HlpLauncher::LaunchHelpApplicationL( CEikonEnv::Static()->WsSession(), cntx ); + } + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::SettingsStore() +// ---------------------------------------------------- +// +MVIMPSTSettingsStore* CVIMPSTUiTabbedView::SettingsStore() + { + return iSettingsStore; + } + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::CancelLoginSupportedL() +// ---------------------------------------------------- +// +TBool CVIMPSTUiTabbedView::CancelLoginSupportedL() + { + TInt cancelNotSupported(KErrNone); + TBool returnValue = ETrue; + // read from the cenrep settings + TInt err = iSettingsStore->GetL(iServiceId, EServiceCancelLoginNotSupported,cancelNotSupported); + // if any error OR cancelNotSupported = 1 then + if ( err || cancelNotSupported ) + { + returnValue = EFalse; // SOME Error or cancel is not supported : return EFalse + } + return returnValue; // cancel is supported : return ETrue + } + + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::ChangeConnectionSupportedL() +// ---------------------------------------------------- +// +TBool CVIMPSTUiTabbedView::ChangeConnectionSupportedL() + { + TInt changeConnectionSupported(KErrNone); + TBool returnValue = ETrue; + // read from the cenrep settings + TInt err = iSettingsStore->GetL(iServiceId, EServiceChangeConnectionNotSupported,changeConnectionSupported); + // if any error OR cancelNotSupported = 1 then + if ( err || changeConnectionSupported ) + { + returnValue = EFalse; // SOME Error or cancel is not supported : return EFalse + } + return returnValue; // cancel is supported : return ETrue + } + +// ---------------------------------------------------- +// CVIMPSTUiTabbedView::HandleNotifyL() +// ---------------------------------------------------- +// +TInt CVIMPSTUiTabbedView::HandleNotifyL( + TInt aCmdId, + TInt aEventId, + CAiwGenericParamList& aEventParamList, + const CAiwGenericParamList& /* aInParamList */) + { + TInt result = 0; + if( (aCmdId == KAiwCmdSelect) && (aEventId == KAiwEventCompleted && iSelectedAction == ECreateXSPCall )) + { + if( iQueryResult ) + { + delete iQueryResult; + iQueryResult = NULL; + } + TInt index = 1; // Get field data from index 1 + const TAiwGenericParam* param = + aEventParamList.FindFirst(index, EGenericParamContactFieldData); + if (KErrNotFound != index) + { + TInt length = param->Value().AsDes().Length(); + iQueryResult = HBufC::NewL(length); + iQueryResult->Des().Append( param->Value().AsDes() ); + // Data must be found! + if (0 >= iQueryResult->Length()) + { + User::Leave(KErrGeneral); + } + if( !iContactSelection ) + { + iContactSelection = CVIMPSTUiContactSelection::NewL(*this); //register for the contactselection + } + iContactSelection->IssueRequest(); + } + else + { + User::Leave(KErrNotFound); + } + result = ETrue; + } + + else if (aCmdId == KAiwCmdAssign || aCmdId == KAiwCmdSelect ) + { + if (aEventId == KAiwEventCompleted ) + { + if( iSelectedAction == CVIMPSTUiTabbedView::EInvitAcceptUpdateExisting || + iSelectedAction == CVIMPSTUiTabbedView::EInvitAcceptCreateNew || + iSelectedAction == CVIMPSTUiTabbedView::EContactCreateNew || + iSelectedAction == CVIMPSTUiTabbedView::EContactAddFromContacts ) + { + // action has been completed , + // this will be excuted only if invitation accepted using update existing contact + TInt paramIndex = 0; + const TAiwGenericParam* contactParam = aEventParamList.FindFirst( + paramIndex, EGenericParamContactLinkArray );//get the contact link + TPtrC8 packLink = contactParam->Value().AsData(); + delete iSelectedData.iPackedLinks; + iSelectedData.iPackedLinks = NULL; + if( packLink.Length() ) + { + iSelectedData.iPackedLinks = packLink.AllocL(); + if( !iContactSelection ) + { + iContactSelection = CVIMPSTUiContactSelection::NewL(*this); //register for the contactselection + } + iContactSelection->IssueRequest(); + } + } + result = ETrue; + } + else if (aEventId == KAiwEventQueryExit) + { + // Send an exit command in order to close CCA and Phonebook2 + CAknAppUi* appUi = static_cast( CCoeEnv::Static()->AppUi() ); + + if ( appUi ) + { + appUi->ProcessCommandL( EAknCmdExit ); + } + result = ETrue; + } + else if(aEventId == KAiwEventOutParamCheck) + { + result = ETrue; + } + } + if(aEventId == KAiwEventCanceled) + { + result = ETrue; + } + return result; + } +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::BlockContactL +// -------------------------------------------------------------------------- +// +void CVIMPSTUiTabbedView::BlockContactL(TBool aBlock /* = EFalse */) + { + TInt index = CurrentItemIndex(); + if(iContainer) + { + iContainer->CheckAndSetLastItemFlag(); + } + if( index <= 0 ) + { + // return if item not found + // 0 for own item which can not be blocked + return; + } + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + + MVIMPSTProcessArray& arrayprocess = iCommandHandler.GetProcessInterface(); + HBufC* contactId = arrayprocess.GetItemUserId(index).AllocLC(); + + if( contactId->Length() ) + { + if(aBlock ) + { + // load, format and show confirmation note + HBufC* prompt = StringLoader::LoadLC( R_QTN_SERVTAB_BLOCKING, *contactId ); + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( *prompt, ETrue, EFalse ); + // iCommandHandler.HandleCommandL(ECmdBlockContact, this, &(contactId) ); + iCommandHandler.HandleCommandL(ECmdBlockContact, this, contactId ); + CleanupStack::PopAndDestroy();// prompt + + if(iContainer) + { + + iContainer->HandleAvatarDeleteL(*contactId); + } + } + else + { + HBufC* unBprompt = StringLoader::LoadLC( R_QTN_CHAT_UNBLOCKING, *contactId ); + // load, format and show confirmation note + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( *unBprompt, ETrue, EFalse ); + iCommandHandler.HandleCommandL(ECmdUnBlockContact, this, contactId ); + CleanupStack::PopAndDestroy();// unBprompt + } + } + CleanupStack::PopAndDestroy(); //contactId + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ShowBlockedContactListL +// -------------------------------------------------------------------------- +void CVIMPSTUiTabbedView::ShowBlockedContactListL() + { + if(!iIsToolBarHidden) + { + ShowHideFixedToolbarL(EFalse); + } + + if (iContainer) + { + iContainer->DeactivateFindPaneL(); + } + + //Launch the search view with search dialog + LaunchViewL( iExtensionService.BlockViewId() ); + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::HandleContactSelectionCompleteL +// -------------------------------------------------------------------------- +void CVIMPSTUiTabbedView::HandleContactSelectionCompleteL() + { + CHAT_DP_FUNC_ENTER("CVIMPSTUiTabbedView::HandleContactSelectionCompleteL"); + if( iWaitNote ) + { + delete iWaitNote; + iWaitNote = NULL; + } + if( iSelectedAction == CVIMPSTUiTabbedView::EInvitAcceptUpdateExisting || iSelectedAction == CVIMPSTUiTabbedView::EInvitAcceptCreateNew) + { + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( R_QTN_SERVTAB_SAVING_CONTACT, ETrue, EFalse ); + + if ( iSelectedData.iPackedLinks ) //add the selected contact to the service tab + { + CHAT_DP_FUNC_DP("CVIMPSTUiTabbedView","process contact"); + if( iSelectedAction == CVIMPSTUiTabbedView::EInvitAcceptCreateNew ) + { + iCommandHandler.HandleCommandL( ECmdProcessAcceptedContactNew, this, (TAny*)&iSelectedData ); + } + else + { + iCommandHandler.HandleCommandL( ECmdProcessAcceptedContactExist, this, (TAny*)&iSelectedData ); + } + delete iSelectedData.iPackedLinks; + iSelectedData.iPackedLinks = NULL; + } + iSelectedData.iXSPList.ResetAndDestroy(); + + //invitation has been accepted using update existing contact + // updation is successful + // send accepted request to command/engine/server + CHAT_DP_FUNC_DP("HandleSessionContextEventL","frnrequest accepted"); + iCommandHandler.HandleCommandL(EFriendAccpeted, this, iFriendRequestId ); + } + else if( iSelectedAction == CVIMPSTUiTabbedView::EContactCreateNew || iSelectedAction == CVIMPSTUiTabbedView::EContactAddFromContacts) + { + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL( iEngine.ServiceId() ) ; + TBool localStore = EFalse; + if( storage ) + { + localStore = storage->IsLocalStore(); + } + if( localStore )//for server store wait note is shown by AddContactL function + { + if(iWaitNote) + { + delete iWaitNote; + iWaitNote = NULL; + } + iWaitNote = CVIMPSTUtilsWaitNote::ShowWaitNoteL( R_QTN_SERVTAB_SAVING_CONTACT, ETrue, EFalse ); + } + + if ( iSelectedData.iPackedLinks ) //add the selected contact to the service tab + { + CHAT_DP_FUNC_DP("CVIMPSTUiTabbedView","process contact"); + if( iSelectedAction == CVIMPSTUiTabbedView::EContactCreateNew ) + { + iCommandHandler.HandleCommandL( ECmdProcessSelectedContactNew, this, (TAny*)&iSelectedData ); + } + else + { + iCommandHandler.HandleCommandL( ECmdProcessSelectedContactExist, this, (TAny*)&iSelectedData ); + } + delete iSelectedData.iPackedLinks; + iSelectedData.iPackedLinks = NULL; + //server store xspid will be stored in iSelectedData.iXSPList and adding it to UI + if( !localStore && iSelectedAction == CVIMPSTUiTabbedView::EContactAddFromContacts) + { + AddContactL( iSelectedData.iXSPList ); + } + iSelectedData.iXSPList.ResetAndDestroy(); + + } + // this is for adding a fresh contact for local store + // read the data from link and send it to server for updation + } + else if( iSelectedAction == CVIMPSTUiTabbedView::ECreateXSPCall && iQueryResult ) + { + // make a call here + ExecuteAiwCallL(*iQueryResult ); + delete iQueryResult; + iQueryResult = NULL; + } + iSelectedAction = KErrNotFound; // This is to clear the previous selected action. + CHAT_DP_FUNC_DONE("CVIMPSTUiTabbedView::HandleContactSelectionCompleteL"); + } + +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::LaunchSettingsViewL +// -------------------------------------------------------------------------- +void CVIMPSTUiTabbedView::LaunchSettingsViewL() + { + /* + If settingsui is already opened, instead of starting with StartDocument just bring csc to foreground and send message + (csc opens correct settings ui even when itīs already open)What comes to coming back to meco tab by pressing Back in + settingsui i made change that tab view is opened by using RxSPViewServices in csc side and csc is closed after that. + I found only one problem while testing this solution, that is if phonebook is closed when settingsui is still open. + In that case settingsui stays in background, but even then when Back is pressed on settingsui correct tab is opened + (phonebook is reopened using RxSPViewServices) + + ************************************************************************************** + CSC team agreed to provide new generic CSC view launcher API, once CSC provide new API + below code need to remove and new API will be called. + *************************************************************************************** + */ + + _LIT(KStartupParams, "ACTION=4 SERID="); + _LIT8(KStartupParams8, "ACTION=4 SERID="); + //Take CSC UID (In future if this UID change , we also need to change it otherwise we will not be able + //to launch CSC settings. + const TUid KCSCAppUid = { 0x10275458 }; + RWsSession ws; + User::LeaveIfError( ws.Connect() ); + CleanupClosePushL( ws ); + TApaTaskList list( ws ); + + TApaTask task( list.FindApp( KCSCAppUid ) ); + + if ( task.Exists() ) + { + TBuf8<255> params8; + params8.Copy( KStartupParams8 ); + params8.AppendNum( iServiceId ); + //Bring CSC to foreground if already open + task.BringToForeground(); + task.SendMessage( + TUid::Uid( KUidApaMessageSwitchOpenFileValue ), params8 ); + } + else + { + RApaLsSession session; + CleanupClosePushL( session ); + User::LeaveIfError(session.Connect()); + + TUid appUid = KCSCAppUid; + TThreadId threadId; + TFileName fileName; + + fileName.Copy( KStartupParams ); + fileName.AppendNum( iServiceId ); + + User::LeaveIfError( + session.StartDocument( fileName, appUid, threadId ) ); + + session.Close(); + CleanupStack::PopAndDestroy( &session ); + } + + CleanupStack::PopAndDestroy( &ws ); + + }//End LaunchSettingsUiL() + // -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ReInitializeServiceHandlerL() +// -------------------------------------------------------------------------- + +void CVIMPSTUiTabbedView::ReInitializeServiceHandlerL() + { + if(iIsServiceHandleReSet ) + { + if(iServiceHandler) + { + iServiceHandler->AttachL( R_IM_APP_INTEREST ); + iServiceHandler->AttachMenuL( R_SERVTAB_TABBED_VIEW_MENU, + R_IM_APP_INTEREST ); + + iServiceHandler->AttachL( R_AIWASSIGNMENT_INTEREST ); + + iServiceHandler->AttachL( R_AIWSELECT_INTEREST ); + iIsServiceHandleReSet = EFalse; + } + } + } + // -------------------------------------------------------------------------- + // CVIMPSTUiTabbedView::LaunchFetchDialogL() + // -------------------------------------------------------------------------- + +void CVIMPSTUiTabbedView::LaunchFetchDialogL() + { + iSelectedAction = EContactAddFromContacts; + MVIMPSTStorageServiceView* storage = CVIMPSTStorageManagerFactory::ContactListInterfaceL( iEngine.ServiceId() ) ; + TBool localStore = EFalse; + if( storage ) + { + localStore = storage->IsLocalStore(); + } + + if( localStore ) + { + //multiple item fetch. + TUint fetchFlags = 0; + fetchFlags |= ::EExcludeGroupsView; + + ExecuteMultipleItemFetchL( TAiwMultipleEntrySelectionDataV2().SetFlags( fetchFlags ) ); + } + else + { + //single item fetch. + TUint fetchFlags = 0; + + ExecuteSingleItemFetchL( TAiwSingleEntrySelectionDataV2().SetFlags( fetchFlags ) ); + } + + } + // -------------------------------------------------------------------------- + // CVIMPSTUiTabbedView::ExecuteSingleItemFetchL + // -------------------------------------------------------------------------- + +void CVIMPSTUiTabbedView::ExecuteSingleItemFetchL( TAiwSingleEntrySelectionDataV2 aData ) + { + if(iAiwParamList) + { + delete iAiwParamList; + iAiwParamList = NULL; + } + iAiwParamList = CAiwGenericParamList::NewL(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactSelectionData, + TAiwVariant(TAiwSingleEntrySelectionDataV2Pckg(aData)))); + + ReInitializeServiceHandlerL(); + iServiceHandler->ExecuteServiceCmdL( + KAiwCmdSelect, + *iAiwParamList, + iServiceHandler->OutParamListL(), + 0, + this + ); + + } +// -------------------------------------------------------------------------- +// CVIMPSTUiTabbedView::ExecuteMultipleItemFetchL +// -------------------------------------------------------------------------- +void CVIMPSTUiTabbedView::ExecuteMultipleItemFetchL( TAiwMultipleEntrySelectionDataV2 aData ) + { + if(iAiwParamList) + { + delete iAiwParamList; + iAiwParamList = NULL; + } + iAiwParamList = CAiwGenericParamList::NewL(); + ReInitializeServiceHandlerL(); + iAiwParamList->AppendL( + TAiwGenericParam( + EGenericParamContactSelectionData, + TAiwVariant(TAiwMultipleEntrySelectionDataV2Pckg(aData)))); + + + iServiceHandler->ExecuteServiceCmdL( + KAiwCmdSelect, + *iAiwParamList, + iServiceHandler->OutParamListL(), + 0, + this + ); + } +// End of File